簡體   English   中英

如何減少APK文件大小

[英]How to reduce APK file size

有人在采訪中問我如何減少APK文件大小,我的答案是管理資源,管理我正在使用的庫並刪除任何未使用的庫,但他告訴我還有其他方法可以減少APK文件大小

誰能告訴我這些方法是什么?

您可以使用以下方式減少APk大小。

  1. 刪除未使用的資源
  2. 最大限度地減少庫中的資源使用
  3. 僅支持特定密度
  4. 使用可繪制對象
  5. 重用資源
  6. 從代碼渲染
  7. 緊縮PNG文件
  8. 壓縮PNG和JPEG文件
  9. 使用WebP文件格式
  10. 使用矢量圖形
  11. 將矢量圖形用於動畫圖像
  12. 刪除不必要的生成代碼
  13. 減少本機二進制文件的大小
  14. 維護多個精益APK
  15. 混淆代碼

請按照以下步驟減少APK文件大小。

第一步

請確保您已在啟用縮小 release在buildType build.gradle文件:

buildTypes {

    release {
        minifyEnabled true
    }

}

通過這樣做,您還可以啟用proguard ,因此您需要添加proguard規則以在項目中使用庫。 例如,這是retrofit2的proguard規則:

-dontwarn okio.**
-dontwarn javax.annotation.**

您可以在proguard-rules.pro文件中添加這兩個規則。

第二步

確保在build.gradle文件中的release buildType中啟用了資源收縮:

buildTypes {

    release {
        shrinkResources true
    }

}

所以build.gradle文件中的最終release范圍應如下所示:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

第3步

您可能在項目中使用的某些庫為不同的國家/地區和語言提供了一些額外的資源。 例如,一個庫可以有兩個string.xml文件,一個用於英語,一個用於日語。 但是你只在你的應用程序中支持英語,所以你不需要那些日語字符串。

要執行此操作,請打開build.gradle文件並添加以下行:

resConfigs "en"

到android范圍下的defaultConfig范圍:

android {

    ...

    defaultConfig {

        ...
        resConfigs "en"

    }

}

第四步

  • 使用vectorDrawables而不是png文件
  • 使用webp圖像而不是png文件

請按照以下步驟操作,

1.使用.svg格式圖標集

是時候再見巴布亞新幾內亞和歡迎矢量繪畫 使用它們有幾個好處。 我們不必擔心不同的設備DPI,它也有助於減少apk大小。 使用Support Library 23.2,我們現在可以使用ImageView的srcCompat屬性而不是android:src來使其向后兼容。 當您從Google的Material Design圖標庫下載系統應用程序圖標集時,請下載.svg格式而不是.pngs。 這有助於我們將應用程序大小減少1 Mb。

在此輸入圖像描述

2.壓縮PNG

我們使用PNG作為所有屏幕密度的演練屏幕。 PNG的質量和尺寸非常高,只是增加了我們的應用程序大小! Weather Stream v1.2中,當我們開始優化我們的應用程序大小時,我們壓縮了我們的演練屏幕和繁榮! 演練屏幕大小是以前的1/10! (是的!1/10)。 太瘋狂了! 我們快速創建了一個構建並檢查了各種屏幕密度的圖像質量,看起來一樣。 快速谷歌搜索將為您提供許多工具,幫助您壓縮您的PNG。 在看到Google Design團隊共享的設備指標后,我們還擺脫了ldpi資源。

3.僅使用特定的Google Play服務庫。

在Google Play Services 6.5之前,我們必須編譯整個軟件包。 但現在我們可以有選擇地將它編譯到我們的應用程 我們現在只使用Google Cloud Messaging,Google Maps和Google Location API。

4.使用Proguard

Proguard用於代碼混淆,它還從依賴項中刪除未使用的Java代碼。 使用Proguard后的結果是較小的apk文件大小,很難進行逆向工程。 要啟用proguard:

的build.gradle

android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

5.收縮資源

Android Gradle插件支持使用shrinkResources gradle屬性在構建過程中自動排除未使用的資源。 僅此一項就將apk尺寸縮小了約0.5 Mb。 要在發布版本中利用這一點,只需將shrinkResources true添加到您的發布配置中即可。

的build.gradle

android {
    ...
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            ...
           //Other parameters
           debuggable false
           jniDebuggable false
           renderscriptDebuggable false
        }
    }
}

6. res Confing

“resConfigs”屬性將在構建應用程序時刪除所有其他本地化資源。 在我們的例子中,“防盜鎖屏”僅支持英語。 雖然所有支持庫都可能具有其他語言的本地化文件夾。 我們不需要。 因此,添加以下行以僅允許在APK文件中添加英語資源。

defaultConfig {
    //...
    //...
    //...

    //strip other than english resources
    resConfigs "en"
}

我只有這些方法! 我希望它可以幫到你

  1. lint你的代碼或res
  2. png圖像到webp
  3. minfyEnabled true

還有3種我能想到的方法:

  1. 通過定義minifyEnabled true ,代碼的混淆也會縮小你的apk大小
  2. 在運行時下載庫 - 不推薦,非常黑客,但有效。
  3. 使用lint刪除未使用的代碼:分析 - >檢查代碼

在gradle文件中添加它

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM