APP 热更新是一个有特定作用的功能, 目前常见的APP如微信、支付宝都有应用到, 我们经常看到APP界面、功能有及时的变化,又不提示版本更新, 就是热更新发挥作用了。
Tinker Platform 是一个热更新平台, 也就是打补丁平台, 官网 :http://www.tinkerpatch.com/, 有一个流程示意图如下:
最终我们需要的是一个patch.apk文件(也就是补丁apk), 这个文件是通过老apk和新apk对比生成的,
具体怎么对比和生成,是tinker控制的,所以需要导入他的依赖包 ,
新APK和老APK的mapping必须是一致的,所以我们需要把老APK的mapping保存起来,方便新APK与他对比,
这样就能得到最终的patch,然后调用sdk的TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), path);
这样就实现了热修复的目的。
1.
Error:A problem occurred configuring project ':app'. Failed to notify project evaluation listener.
Tinker does not support instant run mode, please trigger build by assembleDebug or disable instant run in 'File->Settings...'. can't find tinkerProcessDebugManifest,
you must init tinker plugin first!
A: tinker不支持instant run模式,你需要找到File->Settings->Build,Execution,Deployment->instant run并关闭,
日常调试可以tinker关闭来使用instant run。
2.
注意的是tinkerpatch.gradle的reflectApplication要设置为true,否则会抛出
TinkerRuntimeException: Tinker Exception:applicationLike must not be null。
3.
com.tencent.tinker.build.util.TinkerPatchException: loader classes are found in old secondary dex
不得不说, Tinker 对很多概念的定义, 只字不提,直接就是一股脑 扔将出来, 让读者看得晦涩,难懂。 我看了文档之后,只想骂 “ 霸道”, “x日的”,
例如:
鉴于此, 本文对一些概念作说明, 如有不妥之处,请读者指出
1. 全量包 即 基准安装包
2. assemble 集合,装配,组合, 在当前环境有 渠道 之意
3. patch_signed_7zip.apk 签名后并使用7zip压缩的补丁包,也是我们通常使用的补丁包。但正式发布的时候,最好不要以.apk
结尾,防止被运营商挟持。
1.Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件(1.9.0支持新增非export的Activity);
2.由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码;
3.在Android 7 版本上,补丁对应用启动时间有轻微的影响;
4.不支持部分三星android-21机型,加载补丁时会主动抛出"TinkerRuntimeException:checkDexInstall failed";
5.对于资源替换,不支持修改remoteView。例如transition动画,notification icon以及桌面图标。