結(jié)構(gòu)分析
查看apk包的占用大小 :
打開方式:Android Studio下 ——> Build——> Analyze app)
APK包結(jié)構(gòu)如下:
1. lib/:包含特定于處理器軟件層的編譯代碼训唱。該目錄包含了每種平臺的子目錄便斥,像armeabi米愿,armeabi-v7a, arm64-v8a短绸,x86车吹,x86_64,和mips醋闭。大多數(shù)情況下我們可以只用一種armeabi-v7a窄驹,后面會講到原因。
2. assets/:包含應(yīng)用可以使用AssetManager對象檢索的應(yīng)用資源证逻。
3. res/:包含未編譯到的資源 resources.arsc,主要有圖片資源文件乐埠。 (lint)
4. META-INF/:包含CERT.SF和 CERT.RSA簽名文件以及MANIFEST.MF 清單文件。
5. resources.arsc:包含已編譯的資源。該文件包含res/values/ 文件夾所有配置中的XML內(nèi)容饮戳。打包工具提取此XML內(nèi)容,將其編譯為二進制格式洞拨,并將內(nèi)容歸檔扯罐。此內(nèi)容包括語言字符串和樣式,以及直接包含在resources.arsc文件中的內(nèi)容路徑 烦衣,例如布局文件和圖像歹河。
6. classes.dex:包含以Dalvik / ART虛擬機可理解的DEX文件格式編譯的類。
7. AndroidManifest.xml:包含核心Android清單文件花吟。該文件列出應(yīng)用程序的名稱秸歧,版本,訪問權(quán)限和引用的庫文件衅澈。該文件使用Android的二進制XML格式键菱。
對lib目錄下的文件進行瘦身處理
1. 修改lib配置:
so文件的優(yōu)化:通常我們在使用NDK開發(fā)的時候,我們經(jīng)常會有如下這么一段代碼:
ndk {
*//設(shè)置支持的so庫架構(gòu)*
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64", "armeabi"
}
看上面圖分析今布,armeabi-v7主要不支持ARMv5(1998年誕生)和ARMv6(2001年誕生).目前這兩款處理器的手機設(shè)備基本不在我公司的適配范圍(市場占比太少)经备。
而許多基于 x86 的設(shè)備也可運行 armeabi-v7a 和 armeabi NDK 二進制文件。對于這些設(shè)備部默,主要 ABI 將是 x86侵蒙,輔助 ABI 是 armeabi-v7a
2. 重新編譯so文件,用更小的庫代替
** 優(yōu)化res,assets文件大小**
1. 手動lint檢查傅蹂,手動刪除無用資源
在Android Studio中打開“Analyze” 然后選擇”Run inspection by name”纷闺,范圍選擇整個項目,然后點擊”O(jiān)K”份蝴。配置如下:
2. 使用tinypng(https://tinypng.com/)等圖片壓縮工具對圖片進行壓縮犁功。
[https://tinypng.com/]
打開網(wǎng)址,將大圖片導(dǎo)入到tinypng搞乏,替換之前的圖片資源波桩。
3. 將圖片替換為Webp格式。
https://blog.csdn.net/lmj623565791/article/details/53240600
4. 盡量不要在項目中使用幀動畫
5. 使用gradle開啟shrinkResources
buildTypes {
release {
//混淆
minifyEnabled true
// 移除無用的resource文件
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
減少chasses.dex大小
classes.dex中包含了所有的java代碼请敦,當打包時镐躲,gradle會將所有模板力的.class文件轉(zhuǎn)換成classes.dex文件,當然侍筛,如果方法數(shù)超過64K(方法樹爆棚萤皂,即為方法超過65535),將要新增其他文件進行存儲匣椰●晌酰可以通過multidexing分多個文件
可以通過下面幾個方法來實現(xiàn)減少代碼量 :
1. 盡量減少第三方庫的引用,這個在上面我們已經(jīng)做過優(yōu)化了。
2. 避免使用枚舉入录,使用靜態(tài)常量替代枚舉蛤奥。https://blog.csdn.net/anhenzhufeng/article/details/80179832
3. 如果你的dex文件太大,檢查是否引入了重復(fù)功能的第三方庫