热修复框架 - 从Tinker 1.9.14.7开始

2020-08-11  本文已影响0人  Stan_Z
一、热修复背景

修复bug走常规发版流程,缺点有三:发版代价高、用户升级覆盖速度慢、bug修复不及时。而热修复则能很好解决此问题:及时推送修复补丁,修复成功率高,代价相对小。

二、热修复方案比较

综合考虑兼容性、修复覆盖面、性能等几个方面,目前Tinker是个比较好的选择。
wiki:https://github.com/Tencent/tinker/wiki

但是Tinker也有一些局限性:

由于原理与系统限制,Tinker有以下已知问题:

Tinker尽量只用来做bug修复补丁,而非功能发版。因为合成包太大,会影响到动态加载插件时的性能。

三、Tinker1.9.14.7 集成

Tinker项目地址
https://github.com/Tencent/tinker

最新版本更新说明:
2020年5月17日

1.9.14.7 是当前最新版本,能覆盖到Android Q版本。

Tinker集成:
demo地址:TinkerSdkDemo
项目描述:想run起来tinker源码工程有点难度,我弄了个demo可以帮助debug1.9.14.7核心源码,并且写了个简单的热修复功能,方便debug整个修复过程,持续维护中。

demo热修复使用说明:

ext {
    tinkerEnable = true //tinker功能开关
   tinkerID = "1.0"
   tinkerOldApkPath = "${bakPath}/app-release-0806-14-18-36.apk"
   tinkerApplyMappingPath = "${bakPath}/"
   tinkerApplyResourcePath = "${bakPath}/app-release-0806-14-18-36-R.txt"
   tinkerBuildFlavorDirectory = "${bakPath}/"
}

中途遇到的坑大部分在issue中能找到解决办法,其余的低级错误度娘之即可:
https://github.com/Tencent/tinker/issues

这里有一点需要注意一下:

错误: 无法访问Keep
  找不到com.tencent.tinker.anno.Keep的类文件

用:compileOnly("com.tencent.tinker:tinker-android-anno-support:${TINKER_VERSION}”)
替换:compileOnly("com.tencent.tinker:tinker-android-anno:${TINKER_VERSION}")

tinker官方文档太老了,这里并没有更新。

四、app热修复正式商业化项目流程

流程:

各公司下发patch逻辑略有差异,但是也大同小异,参考我做的这版方案:

上一篇下一篇

猜你喜欢

热点阅读