「Android Tips」使用 ProGuard 移除無用輸出語句
首先,來看一段這樣的程式碼。
if (LogUtil.sEnable) {
Log.d(TAG, "some output");
}
從接觸 Android 開始,這樣的程式碼我在各種不同的專案裡都見過。這樣做有什麼不對的地方嗎?並沒有。可是有更好的解決方式嗎?
有。
上述程式碼將應用的 Log 輸出用一個開關控制,如果是 Debug 版本則開啟輸出。反之如果是 Released 版本,則關閉輸出。
新的解決辦法就是通過 ProGuard
這個工具。在所有 Android 應用中,都有一個配置檔案 Proguard。通常,我們都使用這個檔案混淆我們的程式碼。但是官方文件是這樣說明的:
The ProGuard tool shrinks, optimizes, and obfuscates your code by removing unused code and renaming classes, fields, and methods with semantically obscure names. The result is a smaller sized .apk file that is more difficult to reverse engineer.
裡面提到一點,說 ProGuard
可以移除無用的程式碼,在查閱了官方文件之後會發現,-assumenosideeffects
選項會在版本構建的時候就將指定的原始碼移除。
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** i(...);
public static *** v(...);
}
示例程式碼演示了在 Released 版本中,debug, info, verbose 三個等級的 Log 輸出將被刪除。通過自定義,不僅可以在 Log 控制輸出等級,還能減小安裝包的體積,簡直一石二鳥!
IMPORTANT
需要注意的是,必須不能有關閉優化的配置-dontoptimize
,否則上述方法將無效。
相關文章
- MySQL 使用tee記錄語句和輸出日誌MySql
- 完整sql語句輸出的工具類SQL
- SSH框架控制檯輸出HQL語句和SQL語句的方法框架SQL
- Android & proguardAndroid
- 深入學習ProGuard之:ProGuard簡介與android的應用Android
- 【Tips】使用SQL生成外來鍵的SQL建立語句SQL
- python的輸出語句怎麼寫Python
- Laravel 中輕鬆容易的輸出 SQL 語句LaravelSQL
- ProGuard 在 Android 上的使用姿勢Android
- Java技巧:用一個迴圈語句輸出九九乘法表!Java
- Android Proguard 詳解Android
- Laravel 中輸出 SQL 語句的到 log 日誌LaravelSQL
- [譯] ProGuard 在 Android 上的使用姿勢Android
- Laravel 中除錯輸出 SQL 語句的簡便方法Laravel除錯SQL
- 使用資料泵匯出DDL語句
- Android混淆(Proguard)詳解Android
- 用C語言輸出蛇形矩陣C語言矩陣
- 在 laravel 中輕鬆容易的輸出完整的 sql 語句LaravelSQL
- js根據不同的時間段輸出不同的語句JS
- vim下快速輸入sql語句SQL
- Java - 4 鍵盤輸入語句Java
- PbootCMS lopp迴圈語句使用用於根據迴圈輸出一段內容boot
- C語言輸入輸出C語言
- C語言之輸入輸出C語言
- IDEA自定義設定快捷鍵輸出你想要的語句!Idea
- sql 語句網路除錯和 sql 語句低層傳輸檢視SQL除錯
- ccat – 使用語法突出顯示輸出內容
- c語言中,while(1)語句使用break語句跳出迴圈C語言While
- C語言goto語句以及用goto語句構成迴圈C語言Go
- 輸入和輸出基礎語法
- Android 應用開發者必看的 9 個 TipsAndroid
- Android Proguard混淆對抗之我見Android
- [譯] 實用 ProGuard 規則示例
- Android Tips 1Android
- Java 可以採用什麼語句跳出迴圈語句Java
- 『無為則無心』Python基礎 — 13、Python流程控制語句(條件語句)Python
- 『無為則無心』Python基礎 — 15、Python流程控制語句(for迴圈語句)Python
- Android原生SQLite常用SQL語句AndroidSQLite