安卓APK瘦身
之前打包的時候直接就用eclipse或者android studio直接生成簽名文件,並沒有關心大小問題,近期有人問我有沒有對APK進行瘦身。對這方面內容一致沒有關註過,今天試用了各種方式把項目簽名apk降低了1/4大小。這樣對用戶節省了流量。
1、APK文件分析
APK是Android的安裝包。
APK文件事實上是zip格式,可是後綴被改動為apk,我們能夠直接解壓文件夾例如以下:
分析一下各個內容的作用
查看文件/文件夾大小主要針對assets、classes.dex、lib、res內容進行精簡。
2、assets精簡
存放在assets下的文件不會生成ID,存放的文件形式能夠是多樣的比方音頻、圖片、html相關的等等,精簡體積也就是精簡這些內容。
(1)音頻:主要用在鈴聲和通知方面,體積不要太大,使用壓縮格式的音頻
(2)圖片:在不降低圖片效果、保證APK顯示效果的前提下縮小圖片文件大小。
a、使用tinypng優化大部分圖片資源
tinypng的缺點是在壓縮某些帶有過渡效果(帶alpha值)的圖片時,圖片會失真。這樣的圖片能夠採用webP格式。保證圖片質量前提下大幅降低圖片的大小。
b、使用webP圖片格式
webP是一種支持有損和無損壓縮的網絡圖片格式,假設在 App 中使用 WebP,除了 Android4.0 以上提供的原生支持外,其他版本號以能夠使用官方提供的解析庫webp-android-backport編譯成so使用。通常UI提供的圖片都是png或者jpg格式。我們能夠通過
智圖:
(3)Html相關的
html主要涉及js和css這兩部內容採用壓縮格式降低體積
3、classes.dex
(1)盡量使用系統提供的字符串、ID、圖片資源等
(2)優化代碼結構,降低冗余代碼
(3)使用shape來替換圖片。能用代碼實現的圖片樣式都用代碼實現
(4)使用Proguard對代碼進行混淆、優化和壓縮,它有一個專門用來降低apk文件大小的功能叫做 tree-shaking。Proguard 會遍歷你的全部代碼然後找出無用處的代碼。全部這些不可達(或者不須要)的代碼都會在生成終於的apk文件之前被清除掉。
Proguard 也會重命名你的類屬性,類和接口,然整個代碼盡可能地保持輕量級水平。
(5)靜態代碼分析工具。無需執行,無需測試用例 掃描整個項目,分析以下潛在的問題,分類指出問題描寫敘述、問題位置,並提供合理的改動建議
4、res
通過AndroidUnusedResources來檢查安卓應用程序中未使用的資源,用法例如以下:
把下載下來的jar放到項目文件夾以下,在控制臺中輸入:
找到用不到的資源刪除掉
5、lib
在手機上一般僅僅要支持armabi就能夠了對於x86的不須要,所以引入第三方庫的時候把用不到的so刪除掉。
參考:
1、Android代碼優化——使用Android lint工具
2、android 混淆文件proguard.cfg具體解釋
3、怎樣給你的Android 安裝文件(APK)瘦身
4、給Apk瘦身
5、關於APK瘦身值得分享的一些經驗
6、使用到的工具
安卓APK瘦身