Android支持库大大增加了APK的大小

时间:2014-01-09 10:22:53

标签: android apk android-support-library android-gradle android-appcompat

我在Android项目中使用AppCompat支持库。 AppCompat有大量的drawables和资源,我在我的应用程序中没有使用。那些不必要的文件会将我的 900K 应用增加到 2M 以上,这是我不喜欢的。
有没有办法在创建APK文件时排除这些文件?或者我应该在我的代码中混淆库而不是依赖? 我在Android Studio中使用Gradle。

由于

编辑1 我已经使用了proguard。但是proguard不知道我不想让drawable-xxxhdpivalues-it为例。

编辑2 我也在使用Android Lint,这对我无法帮助,因为我没有直接访问lib的代码,而android在构建APK文件时会添加它们。

4 个答案:

答案 0 :(得分:8)

从版本24.2.0开始,v4支持库has been split into several smaller modules

因此,除了使用shrinkResourcesproguardFiles之外,还要确保您仅使用应用所需的特定模块。 e.g。

如果您的应用仅使用Compat utils,如NotificationCompat,ContextCompat或ResourcesCompat等,请仅使用compat模块:

compile 'com.android.support:support-compat:24.2.0'

答案 1 :(得分:5)

从Android Gradle Build System开始,自0.7.0版本开始:

产品Flavor(和defaultConfig)的新选项允许通过aapt的-c选项过滤资源 您可以通过DSL传递单个值(resConfig)或多个值(resConfigs)。 默认配置和flavor中的所有值都会合并并传递给aapt。 请参阅“基本”示例。 在“基本”样本中:

defaultConfig {
    ...
    resConfig "en"
    resConfigs "nodpi", "hdpi"
}

因此,请尝试以下方法来实现您的要求:

productFlavors {
    ...
    frOnly {
        resConfig "fr"
    }
    ...
}

请注意,您可能还想包含*dpiportland等。

答案来自:Android Studio exports strings from support library to APK,感谢 Primoz990

答案 2 :(得分:1)

shrinkResources也可以作为您的选择。它从0.14开始可用 - 但要小心 - 它仍然有一些像protect resources when using shrinkResources

这样的坑

答案 3 :(得分:0)

虽然OP已经清理他正在使用proguard,但我想发布一些代码,如果它可以帮助某人,因为我能够使用接受的答案将我的应用程序从3.8 MB缩小到3.1 MB,并进一步仅通过1.8 MB ProGuard的。我在我的应用程序级build.gradle文件中使用了此配置:

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