原文链接:https://blog.csdn.net/dingshuhong_/article/details/96436153
Tinker的作用
Tinker就是为了解决这种问题而生的, 修改少量的代码,生成差分包,然后用户下载非常小的更新包,就可以解决问题。它是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。
https://github.com/Tencent/tinker
下面这个是 官方的demo代码, 下载源码 单独跑这一个demo就可以测试tinker
https://github.com/Tencent/tinker/tree/master/tinker-sample-android
如何接入
废话不多说 直接贴上我的demo代码。
引入依赖
(1) E:\xxx\TinkerDemo\build.gradle
(2) E:\xxx\TinkerDemo\app\build.gradle
(3) 配置一些tinker patch.gradle文件
(4) 测试TinkerDemo
E:\xxx\TinkerDemo\app\src\main\java\com\example\tinkerdemo\MainActivity.java
(5) 没有使用tinker之前的效果
接下来修改一下需要解决的问题, 这里我在布局文件里修改一些东西
对应的需要记住 这个版本的apk 以及 resource R文件,作为基准包。 如果你添加了混淆,需要添加对应的mapping文件。
得到差分包以后,就可以上传到服务器供用户下载,更新。 这里我就直接拷贝到手机的指定目录。
至此,我们的热更新就已经完成了。上面的图我们可以发现,差分包其实就只有几kb大小。 用户只需很短的时间就可以下载好更新包。
(6) 遇到的坑
(一)权限问题
加载apk需要将apk复制到指定的文件目录进行资源 和dex文件的插入替换。需要SDK读写权限。 如果你是网络更新还需要网络权限。
(二)android9.0问题
用真机测试发现出现这样的bug
原因是ensureStringBlocks 已经被加入到黑名单,搜索 github tinker issues ,因为9.0原因,建议使用最新的tinker版本
(三)生成差分包处所
https://github.com/Tencent/tinker/issues/961
详细原因查看这个issues
解决办法:
1.基准文件备份下
2.clean项目clean(app-build下的bakApk文件夹会被清空,然后把备份的文件重新导入build文件夹内)
3.打补丁包
github Demo地址:https://github.com/MrShuHong/TinkerDemo
————————————————