******** ******** 第一部分: 瘦身內容介紹 ******** ********android
項目新版本的迭代接近尾聲, 由於歷史累積問題, 致使有不少無效的資源讓已經臃腫的APK變得更腫, 所以公司決定作一次Android APK的資源瘦身. git
此次瘦身使用的是Lint審查工具, 用Android Studio的Generate Signed APK打包, 瘦身前APK爲17.3M, 瘦身後爲15.7M. 瘦身結果爲APK大小減小了1.6M(9.x%)安全
1. 徹底相同的一張圖片, 在項目中存在多份(不一樣的開發人員從UI資源文件夾裏複製出來, 修改成不一樣的名字, 引入工程)app
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 結果簡介 ********spa
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-1280x720目錄下diemns.xml裏的R.dimen.spacing_0.5定義...
這樣看起來應該出如今分辨率爲1280x720的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實踐裏就會逐漸的靠近最佳實踐. (完)