图书馆使我的Android APK太大了

时间:2015-09-10 02:19:16

标签: android android-studio gradle proguard android-library

我有自己的自定义库,用于维护我想在多个项目中使用的方法和类。它没有编译成.jar文件 - 它设置为com.android.library并位于自己的文件夹中。

我的一个应用程序非常小 - 不到500k。当我添加这个库时,它膨胀到1350k。虽然它仍然很小,但对于这个特定的应用程序来说这是一个问题,我承诺尽可能小。

应用程序本身的src文件夹是77k。库项目的src文件夹是112k。生成的apk的.dex文件正好是1mb。 这怎么可能?

图书馆项目确实参考了游戏服务愿景。但是在这个应用程序中没有引用它,我相信Proguard应该将其剥离。

在' Build Variants'窗口,应用程序和库都设置为"发布"。

我的应用的build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
       //**CONFIG STUFF**//
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            applicationIdSuffix '.debug'
            versionNameSuffix '.debug'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile project(':farmsoftlibs')
}

注意:appcompat引用也在我的应用程序的旧版本中是500k,所以我知道这不是主要的罪魁祸首。

我的图书馆build.gradle:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.gms:play-services-vision:7.8.0'
}

所以我认为可以解决难题的问题是:

  1. 我的apk怎么比我的完整java&应用程序和库的res文件夹组合在一起,特别是因为我使用的是Proguard?
  2. 我的图书馆项目中是否有一些gradle正在使我的apk更大?
  3. 如何确保只将我的应用实际使用的库方法和类加载到apk中?
  4. 如果有其他文件与回答此问题相关,请与我们联系。谢谢!

1 个答案:

答案 0 :(得分:0)

    在打包之前,
  1. java文件被编译到class文件中,该文件通常大于java源。我不确定您如何检查您的图书馆大小,但请参阅问题2的回答
  2. compile 'com.google.android.gms:play-services-vision:7.8.0',这样的依赖,可以包含多个jar,因为传递依赖,即你使用的库取决于1个或多个库,它们还可以进一步依赖于其他库
  3. 如果你有minifyEnabled=true,而且你没有将proguard-rules.pro更改为-keep不必要的类或方法,那么它应该可以胜任。
  4. 有关问题2的更多信息,我的测试compile 'com.google.android.gms:play-services-vision:7.8.0',至少添加了4个依赖项play-services-visionplay-services-basesupport-annotationssupport-v4

    此外,请注意,使用您的配置,proguard只会缩小(删除不必要的类)Release版本,而不是Debug版本。

    Peronsal opnion:实际上1.3MB应该被认为非常小