討厭寫proguard rule
但是又不得不寫
小幾百日活的APP都馬上有山寨APP掛一堆廣告重新上傳
NMB元莫。
好好寫proguard rule文件狂巢。
好處至少有如下幾點(diǎn):
1 防止山寨,如果APP有線服務(wù)竭恬,在線服務(wù)應(yīng)該做版本合法性判斷
低于正常版本做更新提示尾菇,高于正常版本判斷非法遏乔,拒絕提供服務(wù)
然而客戶端代碼如果被反了,然后改了相關(guān)代碼妨托,可能也沒什么卵用
2 應(yīng)用包體積或多或少會(huì)減少
proguard容易出問題無非是native method缸榛、反射等導(dǎo)致需要保持一些類、方法兰伤、成員變量内颗;proguard相關(guān)寫法不介紹了,搜索引擎上狠詳細(xì)医清。
如果Proguard前應(yīng)用能正常運(yùn)行起暮,Proguard后崩潰怎么定位和解決問題?
1 Proguard文件加上下面兩行
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
如果不加這兩行会烙,崩潰信息只有一個(gè)類名负懦,沒有源碼行數(shù)信息,而由于類名被混淆柏腻,很難定位崩潰代碼位置纸厉;
2 找到mapping文件,使用Android Studio打包五嫂,mapping文件在module目錄下build/outputs/mapping/渠道名稱/release(debug)/mapping.txt颗品;eclipse的話,找搜索引擎吧
3 根據(jù)Logcat打印出來的錯(cuò)誤信息沃缘,首先根據(jù)mapping文件搜索崩潰發(fā)生在哪個(gè)文件躯枢,然后根據(jù)行數(shù)信息定位具體錯(cuò)誤代碼。
如果你手頭還有dex2jar槐臀、jd-gui這樣的工具(沒有建議搜下下載)锄蹂,那么可以反編譯下classes.dex;看下混淆后想保留的信息是不是真的保留了水慨。