1. 程式人生 > >Android APK size壓縮(瘦身)

Android APK size壓縮(瘦身)

隨著業務需求的擴充套件,apk size會不斷增加,size太大會影響使用者下載和升級的意願,壓縮size是每個大型app必須的工作。

首先來看一下apk的構成:


主要包含資源和程式碼,那壓縮size就要從這2方面入手。

資源方面

1. 刪除無用資源

通過lint或resource shinking等刪除無用資源

2. 壓縮圖片

1)無透明度的png轉成jpg

2)通過tingpng, tingjpg等進行有失真壓縮,或通過ImageOptim進行無失真壓縮

3)在不影響質量的提前下將大圖轉換成webp

3. 壓縮動畫

壓縮loading等gif動畫,及其它較大的資源,如mp3

4. 動態載入

對動態表情等特定業務場景才使用的動畫等資源做動態載入,app啟動後線上下載,不隨apk發包。

5. 使用微信資源壓縮方案

程式碼方面

1. 開啟proguard

proguard不僅能夠混淆,而且能夠優化程式碼,可以大大減小dex檔案的大小。

但需要對被反射引用的類需要做好keep

2. 動態載入

對ocr(身份證識別)等較大的庫做動態載入,app啟動後線上下載,不隨apk發包。

3. 外掛化

將相對獨立的業務做成外掛,app啟動後線上下載,不隨apk發包。

4. 刪除非必要的so庫 很多app為了支援x86,apk至少包含arm和x86 2個ABI,甚至包括arm其實x86構架的手機也支援arm,可以刪除x86 so,只保留arm。
有人認為x86手機以相容模式執行arm so會影響效率,其實效率上的影響對使用者並沒有直接的感知。 刪除x86 so可以大大減少apk size,特別是app集成了很多第三方so庫的情況下,如fresco,rn等。

5. Facebook位元組碼優化方案redex

其它方面

Android標準打包過程未對so庫,arsc等檔案進行壓縮,打包時可以對這些資源進行壓縮,可以壓縮好幾M的大小。

實踐以上方案可大大減小apk size,實測45M降到30M以下~~~