Android热更新(1)-玩转TinkerDemo

1.tinker的demo在什么位置:

如图所示,clone下来之后把这个圈出来的工程拷贝出来,单独打开。

2.开始测试之前的准备工作:

先推荐一些这个过程之中对我有帮助的资料,然后再总结下我学习所得:

http://www.trojx.me/2016/09/28/tinker-sample-introduction/
http://www.jianshu.com/p/19906d3012e9

由于tinker的差分包和基准包都是通过gradle task来实现的,那么就会牵扯到一个问题,gradle task该如何运行?这里我录了一个gif(作为菜鸟的我当初找了老半天才找到这个区域 -.-!)。

2.生成基准包:

ok,知道了gradle task在哪个地方之后,生成基准包的task在如下位置(debug/release):

Task/tinker/tinkerPatchDebug
Task/tinker/tinkerPatchRelease

运行了这俩个task之后呢,我们去build文件夹下边能看到生成的基准包:

app/build/bakApk/xxx.apk

这个apk的路径比较重要,因为它决定以谁为基准来生成补丁。

2.生成差分包(补丁):

生成差分包则是需要配置好基准包的路径之后,再基于这个基准包进行代码修改,然后再对其进行编译(同上面步骤),生成补丁。

配置基准包的路径:

ext {
    //for some reason, you may want to ignore tinkerBuild, such as instant run debug build?
    tinkerEnabled = true


    //for normal build
    //old apk file to build patch apk   >  老基准包  生成查分包时用是以它为基准
    tinkerOldApkPath = "${bakPath}/app-debug-1101-19-35-29.apk"


    //proguard mapping file to build patch apk  >  
    tinkerApplyMappingPath = "${bakPath}/app-debug-1018-17-32-47-mapping.txt"
    //resource R.txt to build patch apk, must input if there is resource changed
    tinkerApplyResourcePath = "${bakPath}/app-debug-1018-17-32-47-R.txt"
    //only use for build all flavor, if not, just ignore this field
    tinkerBuildFlavorDirectory = "${bakPath}/app-1018-17-32-47"
}

我们去把这个改了,tinkerOldApkPath = “${bakPath}/app-debug-1101-19-35-29.apk”

然后去修改补丁包的代码:
比如原来textview的字样是 “刺激刺激刺激刺激刺激刺激”,现在我把MainActivity的textView字样设置为了 “天干物燥天干物燥天干物燥”

然后再去找到生成的补丁包,路径如下:

app/build/outputs/tinkerPatch/debug/patch_signed_7zip.apk

3.热修复:

生成了补丁包之后,我们需要去加载这个补丁包,核心代码:

TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath() + “/patch_signed_7zip.apk”);

这个本地地址可以我们自定义,这行代码的含义就是tinker内的源码对2个apk的一个合并操作了,具体内部怎么实现,还需要研究下它的源码,注意tinker加载了差分包之后,得重新启动app才行。

4.加载补丁是否成功验证:

就目前的操作,我得到了基准包 app-debug-1102-13-14-57.apk,也得到了补丁 patch_signed_7zip.apk。

现在我去把补丁文件拷贝到(程序内指定的)路径位置,下边的日志是我从我的小米5测试机上打印出来的:

E/补丁路径: /storage/emulated/0/patch_signed_7zip.apk

确定目标文件存在正确的位置:

然后打开基准包demo,点击load tinker:

回想一下,基准包的textView是”刺激刺激刺激刺激刺激刺激”,补丁包的textView是”天干物燥天干物燥天干物燥”

当出现了这个吐司时候表示合成成功

然后再点击killSelf重启app,呈现了补丁打完之后的效果:

本文测试用的demo apk:
http://download.csdn.net/download/user11223344abc/10111457
下载下来之后,先将基准包装上,再将补丁包放在指定目录位置,点击demo内的加载补丁后重启APP就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值