博客: 安卓之家
掘金: jp1017
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917

当前热修复方案很多,今天研究了下微信的tinker,使用效果还是不错的,配合tinker server服用更佳。下面介绍两者的使用,以便大家快速接入。

tinker 接入指南

安装tinker gradle插件

1 在项目的build.gradle中, 添加tinker-patch-gradle-plugin的依赖

buildscript {dependencies {classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.5')}
}

2 然后在app的gradle文件app/build.gradle,我们需要添加tinker的库依赖以及apply tinker的gradle插件.

//apply tinker插件

apply plugin: ‘com.tencent.tinker.patch’

dependencies {//可选,用于生成application类provided('com.tencent.tinker:tinker-android-anno:1.7.5')//tinker的核心库compile('com.tencent.tinker:tinker-android-lib:1.7.5')
}

配置tinker task

配置基础包, tinkerid, dexMode等,详见gradle配置: tinker task 配置

我做了如下修改:

1 修改tinkerid为版本号, 跳过了需要commit一次的坑:smile:

def getTinkerIdValue() {//版本作为idreturn android.defaultConfig.versionName
}

2 移动备份文件到/tinker/bakApk/下, 防止clean掉基础包文件

3 重命名备份文件, 比如base-app-debug-v1.0.1-2016-1125.apk, 当然自动生成的是app-debug-v1.0.1-2016-1125.apk, 需要手动添加前缀作为基础包, 后面多次编译不会把基础包覆盖掉, 也不会像官方demo里那样以秒命名产生很多文件…

4 修改tinker message 为 I am the patch apk-v版本号

5 修改patchVersion为版本号, 这个在tinker server需要

-configField("patchVersion", "1.0.7")
+configField("patchVersion", android.defaultConfig.versionName)

注意 里面有些修改的地方, 包名修改为你的包名等, 我用todo做了标记

生成 Application

如果你有Application类, 那么需要自定义一个DefaultApplicationLike, 让tinker帮你生成Application

正如项目里的public class SampleApplicationLike extends DefaultApplicationLike {

并对类添加注解, 比如添加如下注解:

@DefaultLifeCycle(
application = "tinker.sample.android.app.SampleApplication",             //application name to generate
flags = ShareConstants.TINKER_ENABLE_ALL)

编译后, 会生成一个SampleApplication, 用这个作为你的Application, 写入清单文件

好了, tinker到这里就配置好了, 下面开始打补丁

打补丁包

1 命令行

打debug补丁: ./gradlew tinkerPatchDebug

打release补丁: ./gradlew tinkerReleaseDebug

这里需要注意, 命令在linux和mac下最好是./gradlew, 意思是当前项目的gradlew, 如果写成gradlew可以会去下载gradle等, 因为那是全局的, 比如AS2.2.2带的版本是2.14.1
而我现在的是最新版本3.2.1, 可输入./gradlew -vgradlew -v 查看
而windows就可以是gradlew

注意 debug和release配置的基包不同, 和他们一一对应, 另外, release还需要配置mapping文件.

2 双击对应task

就是去gradle projects里找到对应task, 双击执行就可以, 如下图:

比如, 打debug补丁, 双击tinkerPatchDebug就可以了

下一次打补丁时就可以从快捷栏选择,然后点击右侧运行, 如下图:

安装及卸载补丁

加载补丁

第二个参数是补丁包存放路径, 名称任意, 可以不以 .bak 结尾

TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), patchPath);

还可以自定义加载成功等交互, 请参考 SampleResultService, 别忘记添加进清单

清除补丁

当补丁出现异常或者某些情况,我们可能希望清空全部补丁,调用方法为:

Tinker.with(context).cleanPatch();

当然我们也可以选择卸载某个版本的补丁文件:

Tinker.with(context).cleanPatchByVersion();

在升级版本时我们也无须手动去清除补丁,框架已经为我们做了这件事情。需要注意的是,在补丁已经加载的前提下清除补丁,可能会引起crash。这个时候更好重启一下所有的进程。

查看补丁是否加载

boolean isPatched = tinker.isTinkerLoaded();

tinker server 接入及使用

tinker server 提供tinker补丁包下发及监控等, 使用也是很简单

gradle 配置环境

1 gradle远程仓库依赖jcenter

repositories {jcenter()
}

2 再添加sdk库的dependencies依赖:

dependencies {compile("com.tencent.tinker:tinker-server-android:0.3.0")
}

3 在 TinkerPatch 平台中得到的 AppKey 以及 AppVersion,将他们写入 buildConfig 中:

比如:

buildConfigField "String", "APP_KEY", "\"f938475486f91936\""
buildConfigField "String", "APP_VERSION",  "\"3.0.0\""

平台链接: tinkerpatch.com

新增app后可以得到AppKey, 至于AppVersion, 就是补丁的版本, 我这里都是版本号, 可以参考这个issue: 关于AppVersion问题

4 清单配置网络及sd卡读写权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

代码初始化

TinkerServerManager.installTinkerServer(getApplication(), Tinker.with(getApplication()), 3);

后面的3表示每隔3小时请求一次服务器, 检查是否有更新包

请求更新补丁

1 主动请求更新

TinkerServerManager.checkTinkerUpdate(true);

2 获取新增参数

TinkerServerManager.getDynamicConfig(new ConfigRequestCallback() {…

下面来一个该demo的tinker server 截图:

参考

更多使用及问题请参考官方文档:

Tinker – 微信Android热补丁方案

Tinker 接入指南

Tinker API概览

Tinker 自定义扩展

Tinker 常见问题

Tinker Platform 平台使用文档

代码就是Tinker官方示例,我做了一些修改,可点击这里查看: https://github.com/jp1017/tinker-sample-android

最后,非常感谢您的阅读,有任何疑问,可以后面评论,谢谢!

神奇的安卓开发网站:http://androidcat.com/

安卓开源库收集整理:https://github.com/XXApple/AndroidLibs

分享是一种美德,更是一种生活方式!!

也许你会说我是一个梦想者,但我不是唯一的一个。

悦分享,越快乐^_^

欢迎交流,转载请注明出处,谢谢!

微信热修复tinker及tinker server快速接入相关推荐

  1. Android 框架学习5:微信热修复框架 Tinker 从使用到 patch 加载、生成、合成原理分析

    这篇文章是基于内部分享的逐字稿内容整理的,现在比较喜欢写逐字稿,方便整理成文章. 文章目录 目录 Tinker 介绍 使用 TinkerApplicaition ``SampleApplicaitio ...

  2. Android 浅尝Tinker微信热修复

    现在热修复已经很热门了,比较著名的有阿里巴巴的AndFix.Dexposed,腾讯QQ空间的超级补丁和微信最近开源的Tinker. Tinker是一个android的热修复库,在不重新安装apk的情况 ...

  3. Android 微信热修复 Tinker 接入过程及使用方法

    一.前言 学习热修复 Tinker 的使用,主要有两个原因: 业务需要:项目会出现一些细小的bug,需要等到发布新版才能修复,因此一直有关注热修复这块的技术. 技术驱动:这是一件需要一直保持的事情,不 ...

  4. 微信热修复 Tinker 和 flavor 更新

    好久都没有写博客了,最近看了看关于热更新的内容.主要有阿里的,腾讯的,而实验的则是使用的是微信的热修复 Tinker ,以及在使用了 flavor 后的 热修复. 本文的内容是基于 AS3.0.1,注 ...

  5. 【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )

    文章目录 一.下载官方示例源码 二.处理 TINKER_ID 问题 三.编译 debug 包 四.安装 APK 并运行 五.修改 Gradle 构建脚本中的文件名称 六.修改程序逻辑代码 七.生成 p ...

  6. 微信热修复-同事写好后拉下来代码就报错了

    同事写的功能,在他的mac电脑上就是好的,但是我拉下来代码就不行了,做开始报的错的是jvm内存的问题,然后就内存大小,改大了崩溃,改小了报错,然后就围绕着内存展开了一系列的研究 Unable to s ...

  7. 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录

    2019独角兽企业重金招聘Python工程师标准>>> 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录 来源:微信技术团队的公众号WeMobileDev 热 ...

  8. 手把手教你使用Tinker Platform进行热修复补丁管理

    使用Tinker Platform进行热修复补丁管理 这是手把手教你使用腾讯的热修复框架-Tinker的姊妹篇,它主要讲述了如何接入Tinker以及Tinker的基本使用,不熟悉的可以点击了解一下. ...

  9. 【腾讯Bugly干货分享】微信热补丁Tinker的实践演进之路

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ad7a70eaed47bb2699e68e Dev Club 是一个交流移动 ...

最新文章

  1. 精通python网络爬虫-精通Python网络爬虫:核心技术、框架与项目实战 PDF
  2. Spring Cloud Sidecar –节点初始化
  3. 【Java】基于栈的括号匹配问题
  4. 【转】盖茨给职场新人的10句话
  5. RTT的IPC机制篇——邮箱
  6. 股价暴跌 特斯拉市值周四蒸发上千亿美元
  7. oracle clob 粘贴,使用Oracle SQL Developer将CLOB导出到文本文件
  8. winform 添加listview数据
  9. 将adb命令打包成脚本
  10. android图标包怎么安装,图标包怎么用 安卓好看的图标包推荐
  11. Mysql数据库——高阶语句(上)
  12. OJ期末刷题 问题 B: 求三角形面积-gyy
  13. staring mysql_mysql启动错误:Starting MySQL.. ERROR! The server quit without updating PID file错误...
  14. 关于华为应用市场的上架流程
  15. 静态html无法进行post请求,静态页接收post请求
  16. 知识图谱——TransH模型原理
  17. win7 64位虚拟机安装
  18. tiktok海外抖音发视频0播放怎么办?
  19. 怎么给Mongodb设置账号密码(跳坑版)
  20. 我的世界优化服务器ip,我的世界1.9.4服务器ip

热门文章

  1. 关于玩只狼时,解决 游戏画面只在屏幕左上角四分之一显示 的问题 !!!!
  2. QT 设置QPushButton背景为透明色
  3. 三国杀开源系列之二105@365
  4. 2.1 法学的历史(一):西方法学的历史
  5. 《正面管教》思维导图图解,找对教育孩子好方法
  6. win10共享打印机怎么设置_win10、win7与XP如何共享文件和打印机(下)
  7. 云服务器常见的十个问题
  8. SAP MM 因物料有负库存导致MMPV开账期失败问题之对策
  9. NVL和COALESCE的区别
  10. 计算机科学与技术脑电波,科学“读心术”,当脑电波扫描图遇到人工智能