20

AppCompat在我的 Android 项目中使用支持库。AppCompat有很多我没有在我的应用程序中使用的绘图和资源。那些不必要的文件将我的900K应用程序增加到2M以上,这是我不喜欢的。
创建APK文件时有什么方法可以排除这些文件吗?或者我应该在我的代码中混淆库而不是建立依赖关系?我在 Android Studio 中使用 Gradle。

谢谢

编辑 1我已经在使用 proguard 了。但是proguard不能知道我不想拥有drawable-xxxhdpivalues-it例如。

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

4

4 回答 4

8

从版本 24.2.0 开始,v4 支持库已拆分为几个较小的模块

因此,除了使用shrinkResourcesand之外proguardFiles,还要确保您只使用应用程序需要的特定模块。例如

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

compile 'com.android.support:support-compat:24.2.0'
于 2016-08-27T21:51:38.543 回答
6

从 Android Gradle 构建系统,从 0.7.0 版开始:

product Flavor (and defaultConfig) 的新选项允许通过 -c 选项过滤资源,您可以通过DSLaapt 传递单个值 ( resConfig) 或多个值 ( )。resConfigs默认配置和风味中的所有值都被组合并传递给aapt. 请参阅“基本”示例。在“基本”示例中:

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

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

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

请注意,您可能还想包括*dpi, port,land等。

答案来自:Android Studio 将字符串从支持库导出到 APK,感谢Primoz990

于 2014-11-06T22:44:24.713 回答
1

shrinkResources 也可以是您的选择。它从 0.14 开始可用 - 但要小心 - 它仍然有一些坑,例如在使用 shrinkResources 时保护资源

于 2014-11-07T00:13:02.717 回答
0

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

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
}
于 2015-10-09T16:16:45.717 回答