以下都是Debug模式打包的茵宪,所以能做到穩(wěn)定蟹倾。但是Release時匣缘,不管怎樣都無法做到穩(wěn)定!:笆健孵户!
今天混淆App代碼發(fā)現(xiàn)一個奇怪的問題:安卓代碼混淆并不穩(wěn)定萧朝!
在不使用mapping文件時岔留,打出第一個包,獲得一個mapping文件M1检柬,和APK1献联,其唯一Dex文件Md5為H1。
首次使用M1打包何址,生成的APK2中的唯一Dex文件Md5為H2里逆。
再次使用M1打包,生成的APK3中的唯一Dex文件Md5為H3用爪。
理論上來說應(yīng)該是:H1=H2=H3原押,實際讓是H1!=H2,H2=H3
也就是說:不使用mapping文件打包結(jié)果就不穩(wěn)定偎血。
那么怎么解決這個問題呢诸衔?
很簡單,先打個包颇玷,得到APK0和mapping文件M0笨农,不要發(fā)布。接著用M0打包帖渠,此時得到的就是穩(wěn)定混淆APK1和M1谒亦。第二次發(fā)布時,需要用M1打包空郊。
有什么用份招?
使用Qigsaw時,如果用QigsawBundle打包狞甚,可以保證輸出Split的穩(wěn)定性锁摔。
舉個例子:只修改Base的版本號(versionName&versionCode),其它都不動入愧,然后打包鄙漏。所有Split的ApkMd5值都是固定的嗤谚,僅Base包變了。
ApkMd5:"AndroidManifest.xml"去掉版本號怔蚌,去掉"META-INF/BNDLTOOL.RSA"巩步、 "META-INF/BNDLTOOL.SF"、"META-INF/MANIFEST.MF"桦踊,所有文件排序椅野,再計算APK的MD5。
最后
如果本文幫助到了你籍胯,也幫我點個贊吧竟闪!
如果你愿意,還可以贊賞一杯咖啡或一瓶水杖狼,非常感覺你的慷慨炼蛤!