[Android技術專題]APK瘦身看這一篇文章就夠了

【轉載】張明雲

前言

  之前我在微信羣裏面有說到,隨着Android開發越來越成熟,關於Android方面的技術文章越來越多,作爲開發者不缺資源,缺乏的是系統的知識和指導,對於學生和上班族來講,更缺乏篩選信息的時間。從某個角度來講,精心篩選整理網絡上的優質文章,如果需要學習某方面的知識只需要看這一篇文章就夠,那意義會比寫一篇純技術文章會有價值得多。

  出於能夠更便捷、高效獲取優質資源的角度考慮,寫一系列專題的想法就誕生了,結合自己閱讀過的技術文章和實際工作經驗,將平時收集的優質技術文章按照某個方面整理成一系列的專題,比如APK瘦身、插件化、程序架構、性能優化、自定義view、增量升級、移動開發各種技術解決方案等。這是我目前能夠想到的除了寫書之外最值得做的一件事情了。

  這個系列從APK瘦身專題開始,後面會不定期推出其它專題,發不過的專題也會不斷更新。

APK瘦身的價值

  APK瘦身嚴格來講不算是對應用性能的優化,應該算是對程序體驗的優化。APK瘦身的價值主要有幾點:

  • 省流量:特別是在4G網絡下,更多的移動流量表示需要花費更多的錢(別指望着用戶一個月1、2G的流量專門給你騰出幾十M來用於下載安裝包);

  • 給用戶一個好印象,試想用戶在安裝你的程序需要很長的時間時,不僅會影響到他的心情,更是在浪費他的生命;

  • 如果你的APK是預置到設備中,更大的APK表示需要佔用更多的存儲空間,也會增加燒錄的時間。

從哪些方面入手

  一個APK實際上就是一個壓縮文件,解壓後可以看到通常包含如下幾種類型的文件或文件夾:

  • classes.dex源碼;

  • 編譯生成的二進制資源文件resources.arsc;

  • res資源文件夾;

  • assets文件夾;

  • lib庫文件夾;

  • AndroidManifest.xml清單文件;

  • 依賴關係配置文件project.properties;

  • 代碼混淆配置文件proguard.cfg;

  • 簽名信息文件META-INF等。

  除了AndroidManifest.xml、proguard.cfg、project.properties、META-INF這些本身很小沒有必要做進一步壓縮的文件外,其它文件或者文件夾都可以進一步優化,從而減小APK的體積。下面分別就每一個文件或者文件夾該如何減小其大小做介紹:

  • classes.dex源碼:

1.代碼混淆可以減小該文件的大小,因爲混淆後的代碼將較長的文件名、實例、變量、方法名等等做了簡化,從而實現字節長度上的優化,但代碼混淆會存在一些問題,比如比較耗時間,因爲需要找到不能做混淆的代碼並在配置文件中註明,其次是調試起來不太方便;

2.刪掉沒有用到的代碼,可以藉助Android Studio→Inspect Code…對工程做靜態代碼檢查,刪掉無用的代碼;

  • resources.arsc:

1.這個文件主要涉及到資源的ID這些,優化的空間不大,可以藉助Android Studio→Inspect Code…刪掉不必要的資源ID;

  • res資源文件夾:這是APK瘦身過程中優化的大頭,一個APK裏面最佔用空間的就是多媒體資源,圖片、音頻、視頻主要放在res和assets文件夾下;

1.通過Android Studio→Inspect Code…對工程做靜態代碼檢查,刪掉沒有用到的資源;

2.一個APK儘量只用一套圖片,從內存佔用和適配的角度考慮,這一套圖建議放在xhdpi文件夾下;

3.使用tinypng等圖片壓縮工具對圖片進行壓縮;

4.如果對圖片壓縮的質量不滿意,可以考慮使用其它圖片格式,比如不帶alpha值的jpg圖片、同等質量下文件更小的webP圖片格式;

5.藉助微信提供的資源文件混淆工具對資源文件做混淆,進一步壓縮資源文件所佔用的空間;

6.如果raw文件夾下有音頻文件,儘量不要使用無損的音頻格式,比如wav。可以考慮相比於mp3同等質量但文件更小的opus音頻格式;

7.能不用圖片的就不用圖片(用代碼實現),如果要用圖片則優先使用9圖;

8.考慮引進VectorDrawable和svg。

  • **assets文件夾:**assets文件夾相比於res文件夾,還有可能放字體文件、預置數據和web頁面等

1.使用文中提供的字體壓縮工具對字體文件進行壓縮;

2.如果有web頁面,可以考慮使用7zip壓縮工具對該文件夾進行壓縮,在正式使用的時候解壓;

3.儘量不要在APK中打包預置數據,做到程序和數據分離,如果是不得不,可以考慮用7zip壓縮工具對該文件進行壓縮,在程序運行時解壓;

  • lib庫文件夾:

1.只提供對主流架構的支持,比如arm,對於mips和x86架構可以考慮不支持,這樣可以大大減小APK的體積;

需要用到的工具

值得閱讀的文章

忠告

  APK瘦身要有一定的度,如果對某一方面做大小優化需要很長的時間,並且效果不大,可以考慮不做。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章