我在Android项目中使用AppCompat
支持库。 AppCompat
有大量的drawables和资源,我在我的应用程序中没有使用。那些不必要的文件会将我的 900K 应用增加到 2M 以上,这是我不喜欢的。
有没有办法在创建APK文件时排除这些文件?或者我应该在我的代码中混淆库而不是依赖?
我在Android Studio中使用Gradle。
由于
编辑1 我已经使用了proguard。但是proguard不知道我不想让drawable-xxxhdpi
或values-it
为例。
编辑2 我也在使用Android Lint,这对我无法帮助,因为我没有直接访问lib的代码,而android在构建APK文件时会添加它们。
答案 0 :(得分:8)
从版本24.2.0开始,v4支持库has been split into several smaller modules。
因此,除了使用shrinkResources
和proguardFiles
之外,还要确保您仅使用应用所需的特定模块。 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"
}
...
}
请注意,您可能还想包含*dpi
,port
,land
等。
答案来自: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'
}
}