安裝包瘦身
從APK的組成結(jié)構(gòu)可以看出涨共,其中占用空間最大的部分就是代碼和資源越败,所以我們要做安裝包瘦身就要從代碼和資源這兩個(gè)方向著手。
代碼部分:
冗余代碼
無用代碼
無用代碼是指工程中那些未被引用的代碼和文件栖秕,比如未被引用的變量蜂桶、方法和類等。
對(duì)于無用代碼交排,主要采用的方法就是用UCDetector對(duì)整個(gè)工程代碼進(jìn)行掃描划滋,找出引用為0的變量、方法埃篓、類处坪,然后根據(jù)情況進(jìn)行處理。
冗余代碼
冗余代碼是指重復(fù)的代碼或經(jīng)過優(yōu)化后可以用一段代碼量更小的代碼替換的代碼架专。
使用用simian的工具同窘,檢測(cè)出可以封裝的模塊,提高代碼復(fù)用率部脚。
方法數(shù)縮減
- 避免在內(nèi)部類中訪問外部類的私有方法/變量想邦。將成員變量的private屬性替換為protected/public或者直接去掉修飾
- 避免調(diào)用派生類中的未被覆蓋(override)的方法。對(duì)于不需要被覆蓋的方法委刘,顯式地改成調(diào)用基類的方法丧没。
- 將類的成員變量改為public,并去掉get锡移、set方法呕童。
代碼混淆
使用Proguard工具混淆代碼,它不但可以將代碼中的各種元素名稱改得簡(jiǎn)短淆珊,而且可以移除冗余代碼夺饲。
資源部分
冗余資源
APK的資源主要包括圖片、XML施符。與冗余代碼類似往声,資源里面可能也遺留了不少舊版本使用而新版本不再使用的圖片、XML等戳吝。
對(duì)冗余資源采用的方法是先用Lint掃描浩销,然后寫自動(dòng)化腳本對(duì)Lint掃描結(jié)果進(jìn)行處理,找到那些在代碼和XML中都不再引用的資源進(jìn)行刪除骨坑。
資源混淆
對(duì)資源名稱進(jìn)行混淆撼嗓,resources.arsc變小。
圖片處理
- 圖片壓縮欢唾,在適當(dāng)?shù)膱?chǎng)景下做圖片的有損壓縮且警。
- JPG與PNG的轉(zhuǎn)換,小尺寸礁遣、色彩數(shù)少斑芜、或者有alpha通道透明度的時(shí)候,使用PNG祟霍;大尺寸杏头、色彩漸變色多的用JPG。
- 點(diǎn)9圖化沸呐,減少了圖片量醇王,也減少了安裝包的大小。
- 無用圖片的再次梳理崭添,刪除以前版本遺留的無用圖片寓娩。
- 圖片網(wǎng)絡(luò)化,不重要的圖片可以采用下載的方式獲取呼渣。
極限壓縮zip
打包過程的壓縮原理
Android打包過程中壓縮文件的過程:
- aapt工具對(duì)工程非asset資源的編譯壓縮
aapt對(duì)壓縮安裝包的主要貢獻(xiàn)主要在于賦予每一個(gè)非assets資源一個(gè)ID值棘伴,以便將XML二進(jìn)制化,從而節(jié)省空間屁置,以及對(duì)圖片進(jìn)行無損壓縮焊夸。
- SignedJarBuilder類對(duì)工程的壓縮
SignedJarBuilder類對(duì)整個(gè)工程包括代碼.dex文件和一些可壓縮的資源、文件進(jìn)行壓縮蓝角,它使用的壓縮算法由Java.util.zip類提供阱穗。
提高壓縮級(jí)別
使用7z工具對(duì)其進(jìn)行DEFLATE極限壓縮以提高壓縮效率。提高壓縮級(jí)別可在不對(duì)APK包本身的內(nèi)容做任何修改的情況下得到更小的APK包使鹅。