1. 結構分析
首先上傳一張瘦身前通過Analyze app分析出來的圖片(打開方式:Android Studio下 ——> Build——> Analyze app):
APK包結構如下:
- lib/:包含特定於處理器軟件層的編譯代碼。該目錄包含了每種平臺的子目錄,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips。大多數情況下我們可以只用一種armeabi-v7a,後面會講到原因。
- assets/:包含應用可以使用AssetManager對象檢索的應用資源。
- res/:包含未編譯到的資源 resources.arsc,主要有圖片資源文件。
- META-INF/:包含CERT.SF和 CERT.RSA簽名文件以及MANIFEST.MF 清單文件。
- resources.arsc:包含已編譯的資源。該文件包含res/values/ 文件夾所有配置中的XML內容。打包工具提取此XML內容,將其編譯爲二進制格式,並將內容歸檔。此內容包括語言字符串和樣式,以及直接包含在resources.arsc文件中的內容路徑 ,例如佈局文件和圖像。
- classes.dex:包含以Dalvik / ART虛擬機可理解的DEX文件格式編譯的類。
- AndroidManifest.xml:包含核心Android清單文件。該文件列出應用程序的名稱,版本,訪問權限和引用的庫文件。該文件使用Android的二進制XML格式。
2.具體實操
1. 對lib目錄下的文件進行瘦身處理
1. 修改lib配置:
參考資料
so文件的優化:通常我們在使用NDK開發的時候,我們經常會有如下這麼一段代碼:
ndk {
//設置支持的so庫架構
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64", "armeabi"
}
修改後的配置 減少一些cpu的配置會減少apk大小很多 但是在部分機型上會出現bug GooglePlay上配置必須64位
ndk {
//設置支持的so庫架構
abiFilters "armeabi-v7a"
}
2. 優化res,assets文件大小
1. 手動lint檢查,手動刪除無用資源
在Android Studio中打開“Analyze” 然後選擇"Inspect Code...",範圍選擇整個項目,然後點擊"OK"。
2. 使用圖片壓縮工具對圖片進行壓縮。
推薦用 https://zh.recompressor.com/ 沒有圖片限制
https://tinypng.com/ 圖片限制20張
3. 大部分圖片使用佔有小的來代替如webp
一般不太現實 因爲畢竟項目成型了 新項目可以考慮下 前提是UI得會
4. 儘量不要在項目中使用幀動畫
參考使用lottie-android。當然還得UI設計師會。
5. 使用gradle開啓shrinkResources 開啓混淆 移除無用資源
buildTypes {
release {
// 不顯示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
//混淆
minifyEnabled true
// 移除無用的resource文件
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
4. 在項目中設置一套語言
- 刪除翻譯資源,只保留中英文 resConfigs "zh"
defaultConfig {
applicationId ""
minSdkVersion 15
targetSdkVersion 28
versionCode 22
versionName "1.0.21"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
resConfigs "zh"
}
5. 然後刪除一下項目中無用的框架或者重複的框架
比如:fresco glide 等多種圖片緩存框架或者網絡請求框架等等 這個估計改動很大(看項目的封裝和規範性我接觸的項目都很亂)
基本下來項目就能壓縮百分之五十這是我分享的有用的壓縮方法