ProGuard是Java字節(jié)碼最受歡迎的優(yōu)化器。它使您的Java和Android應用程序的升級速度降低了90%,速度提高了20%。ProGuard還通過模糊類,字段和方法的名稱,提供最小的反向工程保護。ProGuard可以免費使用來處理您的應用程序,無論商業(yè)還是非商業(yè)用途。ProGuard代碼本身受版權(quán)保護,并根據(jù)GNU通用公共許可證(GPL)第2版的規(guī)定進行分發(fā)。用戶手冊也受版權(quán)保護,只能以未修改的代碼重新分發(fā)原始形式。
功能介紹
壓縮(Shrink):檢測并移除代碼中無用的類、字段、方法和特性(Attribute)。
優(yōu)化(Optimize):對字節(jié)碼進行優(yōu)化,移除無用的指令。
混淆(Obfuscate):使用a,b,c,d這樣簡短而無意義的名稱,對類、字段和方法進行重命名。
預檢(Preveirfy):在Java平臺上對處理后的代碼進行預檢,確保加載的class文件是可執(zhí)行的。
注意事項
1、注意版本,如果不是項目需要,最好使用最新穩(wěn)定版本,這樣出錯的機會小一些,學習曲線會明顯縮短。
2、最好以源碼的同編譯版本的jvm來啟動proguardgui.jar,不要直接用默認的jvm打開。
3、注意proguaardgui啟動后默認加載的libraryjar中包含的rt.jar,它的版本和你使用到的jvm版本一致。
4、使用1.4的jvm打開proguard時,注意在optimization選項卡中,不要勾中keep enumerations選項,因為勾中這個選項會導致configration文件中出現(xiàn)java.lang.Enum,這個類
只有在1.5的環(huán)境下才有。報錯信息如下:
[proguard] Note: the configuration refers to the unknown class 'java.lang.Enum'
[proguard] Note: there were 1 references to unknown classes.
[proguard] You should check your configuration for typos.
5、嵌入ant腳本時,通常會有這么一段
<target name="proguard" depends="init">
<taskdef resource="proguard/ant/task.properties" classpath="${lib.dir}/proguard/proguard.jar" />
<proguard configuration="${src.dir}/config.pro" />
</target>
task.properties在proguard.jar中,保留,config.pro是proguard的配置文件,最好使用proguardgui.jar先生成,然后再根據(jù)需求手動修改。
常見問題
1、conversion to dalvik format failed with error 1
網(wǎng)上主要有這幾種解決方案:
1、編輯eclipse項目下的.classpath文件,改為
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>即可
2、下載最新版本的proguard,替換android sdk下的tools\proguard(我用的就是這個方法解決的,我的android sdk是r20,其中帶的proguard是4.7的,我把它更新到4.8后就好了)
3、將tools\proguard\bin\proguard.bat文件中的call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %×替換為:
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9(我也試了這種方式,不過當時導致了另外一個錯誤"Expecting class path separator ';' before ... in argument number 7")
官方網(wǎng)站:https://www.guardsquare.com/en/proguard
相關搜索:Java