Android 热更新 Tinker Platform 应用

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结尾,防止被运营商挟持。

 

 

 

 

四、Tinker 的缺点

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以及桌面图标。
 

 

五、Tinker 在项目中是用来修复bug使用,不是作为new feature(新功能)发布使用。

具体示例请参见  TinkerTest.rar  工程

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页