結(jié)構(gòu)分析
查看 apk包的占用大小 :
打開方式:Andr oi dSt udi o下 ——>Bui l d——>Anal y zeapp)
APK包結(jié)構(gòu)如下: 1.l i b/ :包含特定于處理器軟件層的編譯代碼晒夹。該目錄包含了每種平臺的子 目錄裆馒,像 ar meabi ,ar meabi v 7a丐怯, ar m64v 8a喷好,x86,x86_ 64读跷,和 mi ps梗搅。大多 數(shù)情況下我們可以只用一種 ar meabi v 7a,后面會講到原因效览。 2.asset s/ :包含應(yīng)用可以使用 Asset Manager對象檢索的應(yīng)用資源无切。 3.r es/ :包含未編譯到的資源 r esour ces. ar sc, 主要有圖片資源文件。 4.METAI NF/ :包含 CERT. SF和 CERT. RSA簽名文件以及 MANI FEST. MF 清單文件丐枉。 5.r esour ces. ar sc:包含已編譯的資源哆键。該文件包含 r es/ v al ues/文件夾所 有配置中的 XML內(nèi)容。打包工具提取此 XML內(nèi)容瘦锹,將其編譯為二進制格式籍嘹,并 將內(nèi)容歸檔。此內(nèi)容包括語言字符串和樣式弯院,以及直接包含在 r esour ces. ar sc 文件中的內(nèi)容路徑 噩峦,例如布局文件和圖像。 6.cl asses. dex:包含以 Dal v i k/ART虛擬機可理解的 DEX文件格式編譯的 類抽兆。 7.Andr oi dMani f est . xml :包含核心 Andr oi d清單文件识补。該文件列出應(yīng)用程序 的名稱,版本辫红,訪問權(quán)限和引用的庫文件凭涂。該文件使用 Andr oi d的二進制 XML 格式祝辣。
對 l i b目錄下的文件進行瘦身處理
1.修改 l i b配置:
so文件的優(yōu)化:通常我們在使用 NDK開發(fā)的時候,我們經(jīng)常會有如下這么一段代碼:
ndk{
//設(shè) 置 支 持 的 so庫 架 構(gòu)
abi Fi l t er s" ar meabi v 7a" , " x86" , " ar m64v 8a" , " x86_ 64" , " ar meabi "
}
![3Q)O0N]VFHEBL04[)J}WLQ.png
看上面圖分析切油,ar meabi v 7主要不支持 ARMv 5( 1998年誕生) 和 ARMv 6( 2001年誕生) . 目前 這兩款處理器的手機設(shè)備基本不在我公司的適配范圍(市場占比太少) 蝙斜。 而許多基于 x86的設(shè)備也可運行 ar meabi v 7a和 ar meabi NDK二進制文件。對于這些設(shè) 備澎胡,主要 ABI將是 x86孕荠,輔助 ABI是 ar meabi v 7a
2.重新編譯 so文件,用更小的庫代替
優(yōu)化 r es, asset s文件大小
1.手動 l i nt檢查攻谁,手動刪除無用資源
在 Andr oi dSt udi o中打開“ Anal y ze”然后選擇” I nspectCode…” 稚伍,范圍選擇整個項目,然后點
擊” OK” 戚宦。配置如下:
![}]KT)BAS}KIH(JU8I.png
2.使用 t i ny png等圖片壓縮工具對圖片進行壓縮个曙。
打開網(wǎng)址,將大圖片導(dǎo)入到 t i ny png受楼,替換之前的圖片資源垦搬。
3.將圖片替換為 Webp格式。
4.盡量不要在項目中使用幀動畫
5.使用 gr adl e開啟 shr i nkResour ces
bui l dTy pes{ r el ease{ / / 混淆 mi ni f y Enabl edt r ue / /移除無用的 r esour ce文件 shr i nkResour cest r ue pr oguar dFi l es get Def aul t Pr oguar dFi l e( ' pr oguar dandr oi d. t xt ' ) , ' pr oguar dr ul es. pr o' si gni ngConf i gsi gni ngConf i gs. r el ease
}
}
減少 chasses. dex大小
cl asses. dex中包含了所有的 j av a代碼艳汽,當打包時猴贰,gr adl e會將所有模板力的. cl ass文
件轉(zhuǎn)換成 cl asses. dex文件,當然河狐,如果方法數(shù)超過 64K糟趾,將要新增其他文件進行存儲∩跎可
以通過 mul t i dexi ng分多個文件
可以通過下面幾個方法來實現(xiàn)減少代碼量 :
1.盡量減少第三方庫的引用,這個在上面我們已經(jīng)做過優(yōu)化了蝶柿。
2.避免使用枚舉丈钙,使用靜態(tài)常量替代枚舉。
3.如果你的 dex文件太大交汤,檢查是否引入了重復(fù)功能的第三方庫