最近将项目的gradle和gradle插件升级到最新,tinker也升级到最新,然而发现tinker在部分手机上提示补丁修复成功,但是实际上并没有修复成功的问题。下载官方的demo测试发现是好的,排查了半天,发现是项目中tinker设置了isProtectedApp = true
这个属性导致的。
这个属性表示是否开启加固,默认是false,将该值改为false后打补丁就没问题了。
但是我们项目是需要加固的啊!!
要加固的话这个值就得设置成true,不然加固后的包就无法修复。
那为什么设置为true后,补丁就不生效了呢?
原来是我安装的包是未加固的,如果安装的加固的包,就没问题......
也就是,如果你打开了isProtectedApp这个开关,那么需要被修复的包,就得是加固后的。(可是为什么有的手机未加固的包也能生效呢)
梳理一下加固包打补丁的过程
- 首先打基准包,这个包要保留下来
- 将基准包加固,加固后再重新签名,打渠道包
- 发布步骤2生成的包
- 线上出现bug啦,需要补丁修复
- 找到步骤1的基准包,注意这个包是未加固的,把这个基准包当作old.apk
6.修复bug,执行打补丁命令,生成补丁 - 将补丁上传的公司服务器进行下发
ps:我用的是乐固加固