为什么我的Apk大小太大,即使我使用了shrinkResources?

时间:2017-11-23 05:51:05

标签: android android-gradle

我对使用所有谷歌指南减少apk大小的问题感到震惊。我还查看了StackOverflow上发布的许多答案,但没有人帮我减小apk的大小。我不知道是什么问题?我使用了shrinkResource,改编,但这些并没有缩短我的问题 我的Gradle文件是:

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }

}
apply plugin: 'com.android.application'

repositories {
    maven { url 'https://maven.fabric.io/public' }
    google()
}

apply plugin: 'io.fabric'


android {
    /*  signingConfigs {
          config {
              keyAlias 'mykey'
              keyPassword 'mykeyPassword'
              storeFile file('D:/Brijesh/Project/All Project Keystore/MySkoda/mykey.jks')
              storePassword 'mykeyPassword'
          }
      }*/
    signingConfigs {
        config {
            keyAlias 'mykey'
            keyPassword 'mykeyPassword'
            storeFile file('D:/ajit/other/ex/Skoda/mykey.jks')
            storePassword 'mykeyPassword'
        }
    }
    compileSdkVersion 25
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.skodaautoindia.myskoda"
        minSdkVersion 17
        targetSdkVersion 25
        versionCode 8
        versionName "1.1.0.5"
        multiDexEnabled true
        /*  signingConfig signingConfigs.config*/
        signingConfig signingConfigs.config
    }
    repositories {
        mavenCentral()
    }
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }


        /*  release {
              minifyEnabled false
              signingConfig signingConfigs.config
          }*/
    }
    aaptOptions {
        cruncherEnabled = false
    }
    useLibrary 'org.apache.http.legacy'
    productFlavors {
    }
}


dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile('com.crashlytics.sdk.android:crashlytics:2.6.2@aar') {
        transitive = true;
    }
    compile project(':photo-crop-library')
    compile 'com.facebook.android:facebook-android-sdk:4.11.0'
    compile 'com.android.support:design:25.4.0'
    compile 'com.android.support:customtabs:25.4.0'
    compile 'com.android.support:support-v4:25.4.0'
    compile 'com.android.support:appcompat-v7:25.4.0'
    compile 'com.google.code.gson:gson:2.5'
    compile 'com.mcxiaoke.volley:library:1.0.19'
    compile 'com.android.support:cardview-v7:25.4.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'cz.msebera.android:httpclient:4.4.1.1'
    compile 'com.google.android.gms:play-services-plus:11.0.2'
    compile 'com.google.android.gms:play-services-auth:11.0.2'
    compile 'com.google.android.gms:play-services-maps:11.0.2'
    compile 'com.google.android.gms:play-services-location:11.0.2'
    compile 'com.google.firebase:firebase-core:11.0.2'
    compile 'com.google.firebase:firebase-messaging:11.0.2'
    compile 'com.weiwangcn.betterspinner:library-material:1.1.0'
    compile 'com.github.bumptech.glide:glide:3.5.2'
    compile 'com.intuit.sdp:sdp-android:1.0.3'
    compile 'com.android.support:support-vector-drawable:25.4.0'

    compile 'com.albinmathew:photo-crop-library:1.0.3'
    compile 'com.android.support:multidex:1.0.1'
    compile 'de.hdodenhof:circleimageview:2.2.0'
    compile 'com.android.support.constraint:constraint-layout:1.1.0-beta1'


}
apply plugin: 'com.google.gms.google-services'

非常感谢您在这件事上的时间和帮助。

4 个答案:

答案 0 :(得分:1)

这对你来说很有用。

  1. 使用ProGaurd

    try
    
    buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }}
    
    • shrinkResources true将不包含您在最终apk中使用的资源中的图像
  2. 删除应用程序中的所有调试信息(Log.i()等语句)。它们可以包装在仅在测试应用程序时启用的条件。

  3. 使用推荐的媒体格式 图片:PNG或JPG 音频:AAC 视频:H264 AVC

  4. 使用OptiPNG或PNGCrush压缩图像

  5. 使用此工具查找未使用的资源并将其删除。

  6. 避免使用多个资源来实现相同的功能。资源不仅限于图像,还可以扩展到API。有时,使用提供多个结果的单一API比使用两个或三个不同的API更有效。重复的字符串和资产也是对mermory的浪费。

  7. 另请参阅此链接:this

答案 1 :(得分:0)

APK文件包含一个ZIP存档,其中包含构成应用的所有文件。这些文件包括Java类文件,资源文件和包含已编译资源的文件。

请重新检查您的资产和资源文件。 虽然您不需要将栅格化资源导出到每个密度。

link

答案 2 :(得分:0)

  1. 为应用级build.gradle文件
  2. 中包含的依赖项生成依赖关系树
  3. 对每个重复依赖项
  4. 使用exclude {}

    示例:

    compile ("com.xxx:xxx-commons:1.+") {
        exclude group: 'junit', module: 'junit'
    }
    

答案 3 :(得分:0)

现在,您可以在Android Studio 3.0+中分析您的APK文件了解"构建 - >分析APK ..."

在那里,您将看到有关APK的详细信息。