標籤:android style blog http java 使用
Android應用開發過程中,一般會加入各種日誌列印,便於代碼調試,android.util.Log的方法經常被使用。如果應用總是在後台不斷的輸出Log.i或Log.d的內容,除了增加系統開銷外,對應用的整體效率受影響。ProGuard通過刪除從未用過的代碼和使用晦澀名字重新命名類、欄位和方法,對代碼進行壓縮,最佳化和混淆。結果產生一個比較小的.apk檔案,該檔案比較難進行逆向工程,因此安全性較高。
1 基礎配置
在Eclipse中建立一個Android工程,一個proguard-project.txt檔案會在工程的根目錄下自動建立。預設情況下,Eclipse中的建立工程不會加入ProGuard功能,需要修改project.properties檔案。即將“#proguard.config=…”前端的“#”去掉就可以了。“proguard.config=”的配置資訊由兩部分組成:預設部分和工程特有部分,工程特有部分將附加到預設部分(如提示),共同組成工程的混淆配置,因此如果需要根據需求配置混淆檔案,只需要修改proguard-project.txt。
2 最佳化日誌
預設情況下,上一節的配置沒有最佳化功能,因此我們應該將project.properties檔案中的“${sdk.dir}/tools/proguard/proguard-android.txt”替換為“${sdk.dir}/tools/proguard/proguard-android-optimize.txt”,這樣最佳化功能才沒有被關閉。
最佳化日誌主要是通過如下命令實現:
-assumenosideeffects class_specification
這個命令指出了哪些方法是無副作用的。在最佳化階段,此命令將會去除這些方法的調用。
3 執行個體
按照以上介紹的步驟和方法,建立工程,並配置ProGuard,在proguard-project.txt檔案中新增如下指令。
-assumenosideeffects class android.util.Log { public static int v(...); public static int i(...); public static int w(...); public static int d(...); }
需要注意的是,在Eclipse裡的Run或BuildProject/Build All來產生Apk,是不會混淆代碼的!“Export UnsignedApplication Package...”,然後按照嚮導操作即可,最終產生了不簽名的Apk。查看效果可以用7z等壓縮程式開啟,將其中的classes.dex解壓,用dex2jar轉成jar格式後,再用Java反編碼工具jd-gui開啟,就會看到代碼的混淆效果。