ProGuard 工具簡介
ProGuard是Java字節碼最受歡迎的優化程序。它能夠讓Java代碼變小90%變快20%。ProGuard通過混淆類名、屬性、方法來提供對代碼的保護,一次對抗反編譯工程。
ProGuard是一個對Java類文件進行壓縮,優化,混淆和校驗的工具。
壓縮過程查找並刪除沒有使用到的類,字段,方法和屬性。優化過程對方法的字節碼進行分析和優化。
混淆過程把剩餘的元素名字該寫成簡短且無意義的名字。這些過程會使程序體積更小,運行更高效,更難被反編譯。
最後的校驗過程爲類增加校驗信息,但這個過程依賴J2ME和JDK6或以上的編譯環境
再次之前我查閱了很多博客 都只說將 LOCAL_PROGUARD_E NABLED:= full LOCAL_PROGUARD_FLAG_FILES := proguard.flags
自己實際測試過是不行的 寫這些的人肯定自己沒有測試過很坑容易誤導別人直接就複製別人的博客內容就進行發表 我寫的博客都會經過我自己實際測試的纔會發表
Android.mk文件中,用LOCAL_PROGUARD_ENABLED來配置混淆的模式:
LOCAL_PROGUARD_FLAG_FILES用來指定配置文件 如想用自己的配置文件就有這個屬性來引用自己編寫的配置文件
LOCAL_PROGUARD_ENABLED的取值比較多如下:
full:使用編譯系統默認的配置:壓縮但不混淆和優化,默認的混淆配置文件是build/core/proguard.flags 內部引用的是 proguard_basic_keeps.flags 可以將這個文件裏面的內容拷貝出來在此基礎上加上自己的東西
custom:和full一樣,但不包括aapt生成的resource相關的混淆配置。
nosystem:不使用系統的默認配置,但使用aapt生成的resource相關的混淆配置,其他混淆由模塊自己負責。
disabled:關閉混淆
obfuscation:和full一樣,並且開啓混淆
optimization:和full一樣,並且開啓優化
不設置時,如果是app,默認爲full,如果是sdk,則默認爲disabled。
那麼mk 裏面我們怎麼寫呢如下:
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_PROGUARD_E NABLED:= obfuscation optimization
#LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags
這個配置是啥意思呢?
指定了混淆配置文件 這個會同時使用你的混淆配置加系統模式配置進行混淆 如果你只想用你自己的可以將LOCAL_PROGUARD_FLAG_FILES註釋 LOCAL_PROGUARD_FLAGS放出 在Android.mk 同級目錄創建proguard.flags文件
LOCAL_PROGUARD_E NABLED:這個配置的意思是 打開混淆開關 並開啓優化
編譯成功後可以使用 jadx-gui-1.0.0.exe Android逆向工具查看是否混淆成功