最全面的Android中apk的壓縮和瘦身

 

1. 結構分析

首先上傳一張瘦身前通過Analyze app分析出來的圖片(打開方式:Android Studio下 ——> Build——> Analyze app):

APK包結構如下:

  1. lib/:包含特定於處理器軟件層的編譯代碼。該目錄包含了每種平臺的子目錄,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips。大多數情況下我們可以只用一種armeabi-v7a,後面會講到原因。
  2. assets/:包含應用可以使用AssetManager對象檢索的應用資源。
  3. res/:包含未編譯到的資源 resources.arsc,主要有圖片資源文件。
  4. META-INF/:包含CERT.SF和 CERT.RSA簽名文件以及MANIFEST.MF 清單文件。
  5. resources.arsc:包含已編譯的資源。該文件包含res/values/ 文件夾所有配置中的XML內容。打包工具提取此XML內容,將其編譯爲二進制格式,並將內容歸檔。此內容包括語言字符串和樣式,以及直接包含在resources.arsc文件中的內容路徑 ,例如佈局文件和圖像。
  6. classes.dex:包含以Dalvik / ART虛擬機可理解的DEX文件格式編譯的類。
  7. 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. 在項目中設置一套語言

  1. 刪除翻譯資源,只保留中英文  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 等多種圖片緩存框架或者網絡請求框架等等 這個估計改動很大(看項目的封裝和規範性我接觸的項目都很亂)

基本下來項目就能壓縮百分之五十這是我分享的有用的壓縮方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章