微信热修复tinker及 tinker server 的快速接入方法

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

目录


1.tinker接入指南

•安装tinker gradle插件
•配置tinker task
•生成Application
•打补丁包
•安装及卸载补丁
▪加载补丁
▪清除补丁
▪查看补丁是否加载

2.tinker serve接入及使用

•gradle配置环境
•代码初始化
•请求更新补丁

3.参考

image
image

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() {
    //版本作为id
    return 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, 双击执行就可以, 如下图:

image

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

image

安装及卸载补丁

1.加载补丁

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

TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), patchPath);

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

2.清除补丁

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

Tinker.with(context).cleanPatch();

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

Tinker.with(context).cleanPatchByVersion();

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

3.查看补丁是否加载

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, 就是补丁的版本。

4.清单配置网络及sd卡读写权限 代码初始化

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

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

请求更新补丁

1.主动请求更新

TinkerServerManager.checkTinkerUpdate(true);

2.获取新增参数

TinkerServerManager.getDynamicConfig(new ConfigRequestCallback() {...

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

image

参考


更多使用及问题请参考官方文档:
Tinker -- 微信Android热补丁方案
Tinker 接入指南
Tinker API概览
Tinker 自定义扩展
Tinker 常见问题
Tinker Platform 平台使用文档

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

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

安卓开源库收集整理:github.com/XXApple/And…

(文章转载自:https://juejin.im/post/5838298d61ff4b006b442b53

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容