首先,配置时我参考的是这一篇: 微信热修复Tinker使用
和链接中文章中不同的是【我踩过的坑】以下几点:
- 配置app.gradle 时,需要tinker库依赖,还需要:
compile “com.android.support:multidex:1.0.1”
- app.gradle 中的 default config 添加:
,同时添加:multiDexEnabled true
dexOptions {
javaMaxHeapSize “2g”
preDexLibraries = false
jumboMode=true
- app.gradle 中的
,置为ignoreWarning=false
我第一次编译 tinkerPatchDebug 时耗费四五个小时,还不行,出现了“远程主机强制关闭了一个现有连接…”。后来把这个参数改了,就很顺利了。官方解释如下:ignoreWarning=true
Tinker热修复,配置时的坑 - 继承自
的类,根本不是Application类型,能使用的生命周期只有DefaultApplicationLike
,如果需要使用Application,仍需在方法中添加:onCreate()
Application app=getApplication()
大概的一个流程,【好麻烦,千万别弄错了】
第一步:运行到手机上,然后取出 build/apk/下的包,放置到配置文件中,
oldApk
所指定的位置,作为基准包
第二步:进行代码的修改
第三步:运行右侧
Gradule
里的
app/Tasks/tinker/tinkerPatchDebug
第四步:编译成功后,取出
build/outputs/tinkerPatch/debug/patch_signed_7zip.apk
,即是生成的差异补丁包。将补丁包放入手机中指定的位置。
注意事项:
1. 程序运行如果无误的话,会在第一次运行时加载补丁包,第二/三/四次运行时会显示修改后的程序。同时,放入手机中的补丁包会自动删除。【这才代表找到补丁,并且加载补丁成功】
2. 假设基准包是A,打了补丁a成功后,还想打第二个补丁,就必须将修改后的代码(即补丁a想要修复的代码)重新作为基准包B,生成第二个补丁b。
如果,仍将A作为基准包,则生成的第二个补丁b,已经打了第一个补丁的程序将无法加载补丁b。
Tinker修复成功的概率很高,也不是100%,所以关于如何打补丁,如何部署补丁,还需要公司内部权衡。
3. 生成的补丁包以
.apk
结尾,但发布时最好不使用这个后缀,
以防被运营商挟持
,Tinker支持任意后缀名。
这些是我收集的关于Tinker资料的参考链接:
原理:微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录
源码解释:Android 热修复方案Tinker
接入:微信热修复Tinker使用
官方接入指南:Tinker 接入指南