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-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實踐里就會逐漸的靠近最佳實踐. (完)
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM