Android APK瘦身之Android Studio Lint
第一部分: 瘦身內容介紹
項目新版本的迭代接近尾聲, 因為歷史累積問題, 導致有很多無效的資源讓已經臃腫的APK變得更腫, 因此公司決定做一次Android APK的資源瘦身.
這次瘦身使用的是 Lint審查工具 , 用Android Studio的Generate Signed APK打包, 瘦身前APK為17.3M, 瘦身后為15.7M. 瘦身結果為APK大小減少了1.6M(9.x%)
1. 完全相同的一張圖片, 在項目中存在多份(不同的開發人員從UI資源文件夾里復制出來, 修改為不同的名字, 引入工程)
2. 版本多次迭代后, 許多XML文件已經不再使用了(包括布局文件, 自定義圖形文件, 動畫文件, 顏色文件, 字符文件strings.xml, 單位文件dimens.xml等).
3. 由于功能的迭代, 有些Activity, Fragment已經無效(好像 Android Studio Lint無法查處這一類的無效資源 )
第二部分: 瘦身工具介紹
1. 使用的是Android Studio工具做代碼審查( Inspect Code功能 ), 實際上使用到的是其中 Android Lint 部分
2. Inspect Code配置(可以 單獨選擇Module ‘app’ 部分, 個人感覺library部分審查的意義不大. 不過為了方便, 我還是選擇了 Whole project. .. 不過這樣的結果就是, 同事的紅點鍵盤電腦還沒有Inspect完… 我已經把150多個無效資源全部處理完了… 所以還是 自行決定是否Fire The Whole吧 …)
第三部分: Android Studio Inspect Code 結果簡介
zzzZZZ(Inspecting…)
1. 既然是瘦身, 那無效資源引用就是頭等重要的事了. 個人覺得這部分都在 Inpsection模塊的Android Lint 視圖里面了.
首先, 在Inspection模塊里找到Android Lint
然后, 在Inspection模塊的Android Lint里向下滑動找到 Ununsed resources
來, 看一下Unused recources展開后的樣子(對不起, 重復圖片, 無效xml文件, 無效的strings.xml和dimens.xml都已經處理完了)…
( 說一下一個我自己的 處理”技巧” 吧, 對于無效的xml文件, 要刪除起來其實還比較麻煩, 因為Android Studio在xml頁面好像沒有刪除按鈕??? 我是這么做的:
在Inspect Code 的Android List結果展示區, 雙擊對應的xml無效提示(例如: The resource ‘R.dimen.spacing_0_5′ appears to be unused這一個item),
進入對應的xml文件后, 把所有內容刪除… 不要怕… 錯了git可以恢復的…
當你刪除的手酸的時候或者內心惶恐不安的時候, 在Android Studio里Clean一下工程[不懂的谷歌搜索: Android Studio Clean 工程...]
之后在Android Studio工程里遍歷所有的xml文件, 對于沒有內容的xml文件, Android Studio會用紅色的波浪線提示, 然后選中所有需要刪除的xml文件, 一次性刪除… 建議帶上引用審查)
安全刪除之引用審查
( 說一下一個坑吧 … 事情的起因是這樣的: android.content.res.Resources$NotFoundException
Android Lint信誓旦旦的說, R.dimen.spacing_0_5是沒用的(實際上他的名字是R.dimen.spacing_0.5…) 后刪之, 保留了values-1280×720目錄下diemns.xml里的R.dimen.spacing_0.5定義…
這樣看起來應該出現在分辨率為1280×720的HTC D816V完美不崩潰而其他分辨率可能崩潰的情況… 然而HTC D816V表示不服, 打開APP后崩潰,遂伙同Android Studio提示單身程序狗: Caused by: android.content.res.Resources$NotFoundException: File res/drawable/common_btn_grayf10.xml from drawable resource ID #0x7f0a0018
我找了一下, common_btn_grayf10.xml確實存在… HTC你”眼瞎”是不是!!! 還是Android Studio聰明, 在xml預覽圖里無預覽, 但是提示spacing_0.5 not in right format… 于是將spacing_0.5修改為spacing_1, 錯誤提示不記得在不在了, 但是程序依舊崩潰… 查了很久后, 嘗試將spacing_0.5也放到values/dimens.xml里試試… 結果崩潰問題解決…
總結: 在做適配的時候, 一定要保證values/dimens.xml文件是最大而全的 .就是說values/dimens.xml = values-aaxbb U values-ccxdd U etc… 這里U是離散數學里的取并集的意思(打我吧… 很羅嗦對不對)
)
2. 實際上Android Studio的Inspect Code還蠻強大的, 會幫你審查無效的LinearLayout, xml布局里View過多, onDraw()函數中分配內存這一類的效率問題. 舉一個 Code style的例子 (實在無語了有沒有!)
代碼里是這么寫的:
Intent intent = getIntent();
if (null != intent) {
goToMainPageFlag = intent.getBooleanExtra(KEY_GO_TO_MAIN_PAGE_FLAG, false);
} else {
goToMainPageFlag = false;
}
Inspect Code提示:
就是說, Android Studio的Inspect Code告訴你, 你的代碼一點都不優雅… 應該改成醬:
Intent intent = getIntent();
goToMainPageFlag = (null != intent && intent.getBooleanExtra(KEY_GO_TO_MAIN_PAGE_FLAG, false));
結論: 把六行的代碼改成兩行, 確實是一個很好的Code Style實踐有沒有! 是的, Android Studio的Inspect Code功能我也是第一次用, 里面東西實在太多了, 大大小小事無巨細的, 沒事兒多看看長長見識也是極好的… 雖然有時候你可能不能在短時間內一下子把所有選項優化完, 不過多看才會有優化的意識, 在之后的Code實踐里就會逐漸的靠近最佳實踐. (完)
來自:http://www.androidchina.net/5577.html