簡體   English   中英

如何減少Android APK大小

[英]How to reduce Android Apk size

我正在開發包含以下依賴項的應用程序

模塊級別

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.google.android.gms:play-services:9.0.0' **// for GCM**
compile 'com.android.support:cardview-v7:23.3.0'
compile 'com.squareup.picasso:picasso:2.5.2' **//Rounding and displaying image from URL**
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.github.lecho:hellocharts-library:1.5.8@aar' **// For bar graph** 
compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
    transitive = true;
}
compile 'com.google.firebase:firebase-core:9.0.0' **// Analytics**

}

項目層面

dependencies {
    classpath 'com.android.tools.build:gradle:2.1.2'
    classpath 'com.google.gms:google-services:3.0.0'
    classpath 'io.realm:realm-gradle-plugin:1.0.1' // Database
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

我的

/ assets / 150kb使用令人敬畏的字體文件。

/ java-644 KB

/ res-740 KB(使用的高分辨率圖片1920 * 1280大小220kb,使用tinypng壓縮)

已應用ProGuard。 刪除未使用的文件和代碼。

我的應用程序大小仍然是7.03MB

如何縮小應用程式大小? 我不知道為什么是7.03MB

是否有任何計算可以得出apk中依賴項所使用的大小?

就像Google Play服務在apk中占據了大約200kb。

除了編譯完整的Google Services程序包外,您還可以調用編譯所需的程序包。 下面有一個鏈接,請檢查相同的https://developers.google.com/android/guides/setup

在使用GCM之前,我建議您使用Firebase Cloud Messaging,因為google正在將其基礎從gcm轉移到firebase。

Firebase Cloud消息傳遞的鏈接:-

https://firebase.google.com/docs/cloud-messaging/android/client

可以幫助您的要點:-

您可以在設計中使用FontAwesome Icons而不是圖像,這對應用程序大小有很大的影響。 為每次重新布置在dimen.xml中為每個布局提供一個特定的大小。

如果使用的是圖像,則必須確保沒有為不同的屏幕插入相同的圖像。 嘗試盡可能使用android的內置圖標

在6.5之前的Google Play服務版本中,您必須將整個API包編譯到您的應用中。 在某些情況下,這樣做會使將應用程序中的方法數量(包括框架API,庫方法和您自己的代碼)保持在65,536個限制以下變得更加困難。

從6.5版開始,您可以選擇將Google Play服務API編譯到您的應用中。 例如,要僅包含Google Fit和Android Wear API,請在build.gradle文件中替換以下行:

更換

compile 'com.google.android.gms:play-services:9.6.1' //or the version you are using

使用特定的api,您需要:

com.google.android.gms:play-services-gcm:9.6.1
// and other if you need

特定GMS api的依賴項列表可以在此處找到。

您可能會缺少兩種有用的技術

  1. 與Proguard一起優化Dex和資源

    這會導致代碼更小,因此應僅在發行版中使用。 否則會導致調試困難。 可以通過以下方式實現:

    android {

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

您還需要集中精力從相關的SDK中刪除未使用的字符串。

  1. 使用ResConfigs刪除未使用的配置

諸如支持/ Google Play服務之類的許多庫都帶有可翻譯成多種語言的字符串資源。 您可能不打算全力支持。 使用以下方式,您可以控制大小:

android {

    defaultConfig {
    ...
        resConfigs "en"
    }
}

這將刪除所有非英語資源。

暫無
暫無

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

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