作为小公司小项目的Android菜鸟,我也想在项目中集成热修复,公司没有测试,都是自己测试的,有时候发新版后会出现一些小bug,错别字之类的还好,有时候因为一些bug直接导致APP闪退,甚至会导致公司经济利益的损失,是大家都不愿意看得到的。
所以我就开始尝试热修复,首选Tinker。相信腾讯,相信微信的实力。
对着官方文档一通Ctrl c,Ctrl v。将官方Demo代码全部copy到项目中。
遇到的问题:
1.程序启动时会加载默认的Application类,这导致我们补丁包是无法对它做修改了。需要自定义Application类。
2.多Flavor打包,配置了productFlavors后生成差异包时出现问题,如果只是多渠道的需求,建议不要使用flavor的方式。首先其打包很慢,其次需要维护多个基线包,后期维护成本也很大。Tinker官方推荐packer-ng-plugin或者walle来进行多渠道打包,其中walle是支持最新的SchemaV2签名的。
3.后来觉得还要自己做管理后台,处理很多问题,没这时间和精力。就使用tinkerpatch。
TinkerPatch:
后台补丁平台的支持一键傻瓜式接入
不需要自己去改造Application,不需要去参与补丁的后台管理。
walle:
美团开源的Android Signature V2 Scheme签名下的新一代渠道包打包神器
用法示例:
生成渠道包./gradlew clean assembleReleaseChannels
支持 productFlavors./gradlew clean assembleMeituanReleaseChannels
1.需要注意channel文件不带.txt后缀。
2.360加固失效?在使用加固后导致Stringchannel=WalleChannelReader.getChannel(this.getApplicationContext());无法获取到渠道信息。解决办法是:先加固没签名的包,然后用buildtool中的apksigner签名然后用walle注入渠道。
3.ProtectedApkResignerForWalle:[Walle官方推荐]一步解决应用加固导致Walle渠道信息失效的自动化脚本工具,自动生成渠道包。
ProtectedApkResignerForWalle:
一步解决应用加固导致Walle渠道信息失效的自动化脚本,自动生成渠道包
按照config.py文件中的注释改成自己项目配置
将已经加固好的包【未签名的包,请不要使用加固客户端签名工具】放到脚本工具根目录下,即app-release.encrypted.apk
各种渠道的定义是在channel这个文件中,请根据项目情况修改
运行命令python ApkResigner.py,即可自动生成所有渠道包。
最后我的热修复算是做完了,轻描淡写,记录自己的热修复路程,全是第三方开源工具解决。
开源万岁。。。