以下都是Debug模式打包的,所以能做到稳定。但是Release时,不管怎样都无法做到稳定!!!
今天混淆App代码发现一个奇怪的问题:安卓代码混淆并不稳定!
在不使用mapping文件时,打出第一个包,获得一个mapping文件M1,和APK1,其唯一Dex文件Md5为H1。
首次使用M1打包,生成的APK2中的唯一Dex文件Md5为H2。
再次使用M1打包,生成的APK3中的唯一Dex文件Md5为H3。
理论上来说应该是:H1=H2=H3,实际让是H1!=H2,H2=H3
也就是说:不使用mapping文件打包结果就不稳定。
那么怎么解决这个问题呢?
很简单,先打个包,得到APK0和mapping文件M0,不要发布。接着用M0打包,此时得到的就是稳定混淆APK1和M1。第二次发布时,需要用M1打包。
有什么用?
使用Qigsaw时,如果用QigsawBundle打包,可以保证输出Split的稳定性。
举个例子:只修改Base的版本号(versionName&versionCode),其它都不动,然后打包。所有Split的ApkMd5值都是固定的,仅Base包变了。
ApkMd5:"AndroidManifest.xml"去掉版本号,去掉"META-INF/BNDLTOOL.RSA"、 "META-INF/BNDLTOOL.SF"、"META-INF/MANIFEST.MF",所有文件排序,再计算APK的MD5。
最后
如果本文帮助到了你,也帮我点个赞吧!
如果你愿意,还可以赞赏一杯咖啡或一瓶水,非常感觉你的慷慨!