Tinker热修复,配置时的坑

首先,配置时我参考的是这一篇: 微信热修复Tinker使用
和链接中文章中不同的是【我踩过的坑】以下几点:

  1. 配置app.gradle 时,需要tinker库依赖,还需要:

    compile “com.android.support:multidex:1.0.1”

  2. app.gradle 中的 default config 添加:multiDexEnabled true,同时添加:

    dexOptions {
    javaMaxHeapSize “2g”
    preDexLibraries = false
    jumboMode=true

  3. app.gradle 中的 ignoreWarning=false ,置为ignoreWarning=true 我第一次编译 tinkerPatchDebug 时耗费四五个小时,还不行,出现了“远程主机强制关闭了一个现有连接…”。后来把这个参数改了,就很顺利了。官方解释如下:这里写图片描述

  4. 继承自DefaultApplicationLike 的类,根本不是Application类型,能使用的生命周期只有onCreate(),如果需要使用Application,仍需在方法中添加:

    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 接入指南

展开阅读全文

没有更多推荐了,返回首页