proguard是一款能夠用于Java字節(jié)碼.class文件進(jìn)行優(yōu)化和壓縮的代碼混淆工具,它通過(guò)混淆類、字段以及方法的名稱來(lái)提供對(duì)反向工程的最小保護(hù),并且在代碼的處理上能夠通過(guò)移除無(wú)用代碼,使用簡(jiǎn)短無(wú)意義的名稱來(lái)重命名類、字段和方法從而能夠達(dá)到提升代碼保護(hù)的目的,最終我們會(huì)獲取一個(gè)較小的apk文件,而這個(gè)較小的apk文件使得我們更難于進(jìn)行程序的逆向工程破解。同時(shí)為了解決大多數(shù)用戶遇到的資源尋找難題,并且提供簡(jiǎn)易的配置教程幫助用戶更好的進(jìn)行代碼混淆操作,同時(shí)工具已集成到Android構(gòu)建系統(tǒng)中,所以我們不用手動(dòng)調(diào)用這個(gè)工具,我們可以選擇在只發(fā)布模式下構(gòu)建系統(tǒng)的時(shí)候再去運(yùn)行,極大的方便了用戶程序工具的調(diào)用操作。有需要的用戶可以在本站下載!
注:下載包中有proguard4.8安裝包以及軟件使用說(shuō)明,安裝包在未使用時(shí)請(qǐng)不要輕易刪除和更改文件類型。配置教程
1、準(zhǔn)備好你的jar包,我在這里舉例叫做test.jar;
2、解壓工具,執(zhí)行bin目錄下的proguardgui.bat,運(yùn)行如圖,點(diǎn)擊左邊“input/output”菜單;
3、點(diǎn)擊右邊的“add input”加入我們要混的jar包:test.jar,點(diǎn)擊右邊的“add output”填入我們要輸出的jar包(命名隨便),這里我寫test_out.jar。注意輸出的jar包,要自己手工填寫,添加支持庫(kù),下邊的“Library jars,wars,ears .....”那個(gè)框,點(diǎn)擊右邊的“add”,說(shuō)明一下,這里最好把你的
myeclipse里java project里的libraries所有Library的jar包,copy到一個(gè)目錄,然后在這里加入這些jar包;;
4、做完以上步驟后就差不多了,點(diǎn)擊“shrinking”,設(shè)置成如下圖;
5、點(diǎn)擊“obfuscation”,設(shè)置成如下圖;
6、點(diǎn)擊“optimization”,設(shè)置成如下圖;
7、點(diǎn)擊“process”,再點(diǎn)擊“save configuration”,在彈出的對(duì)話框中,輸入要保存的配置文件名稱(這里我的是test.pro),最后點(diǎn)擊“保存”,至些圖形化的設(shè)置已經(jīng)完成;
優(yōu)化種類
除了在壓縮操作刪除的無(wú)用類,字段和方法外,ProGuard也能在字節(jié)碼級(jí)提供性能優(yōu)化,內(nèi)部方法有:
常量表達(dá)式求值
刪除不必要的字段存取
刪除不必要的方法調(diào)用
刪除不必要的分支
刪除不必要的比較和instanceof驗(yàn)證
刪除未使用的代碼
刪除只寫字段
刪除未使用的方法參數(shù)
像push/pop簡(jiǎn)化一樣的各種各樣的peephole優(yōu)化
在可能的情況下為類添加static和final修飾符
在可能的情況下為方法添加private, static和final修飾符
在可能的情況下使get/set方法成為內(nèi)聯(lián)的
當(dāng)接口只有一個(gè)實(shí)現(xiàn)類的時(shí)候,就取代它
選擇性的刪除日志代碼
混淆規(guī)則
1.如果使用了Gson之類的工具要使JavaBean類即實(shí)體類不被混淆。
2.如果使用了自定義控件那么要保證它們不參與混淆。
3.如果使用了枚舉要保證枚舉不被混淆。
4.對(duì)第三方庫(kù)中的類不進(jìn)行混淆。
a.混淆時(shí)保護(hù)引用的第三方j(luò)ar包
如:-libraryjars libs/baidumapapi_v3_2_0.jar #保護(hù)引用的第三方j(luò)ar包不被混淆;
注意:在使用Eclipse+ADT時(shí)需要加入-libraryjars libs/...,如果你是使用Android Studio開發(fā)的項(xiàng)目則不需要加入libs包中的jar包,這是因?yàn)?,通過(guò)Android Studio進(jìn)行混淆代碼時(shí),默認(rèn)已經(jīng)將 lib目錄中的 jar 都已經(jīng)添加到打包腳本中,所以不需要再次手動(dòng)添加,否則會(huì)出現(xiàn)“ java.io.IOException: The same input jar is specified twice” 錯(cuò)誤。
b.混淆時(shí)保護(hù)第三方j(luò)ar包中的類不被混淆
如:-keep class com.baidu.** { *; } #讓ProGuard不要警告找不到com.baidu.**這個(gè)包里面的類的相關(guān)引用;
-dontwarn com.baidu.** #保持com.baidu.**這個(gè)包里面的所有類和所有方法不被混淆。
0條評(píng)論