问题描述
我需要从flavor中删除特定的res文件夹。
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
aidl.srcDirs = ['src']
assets.srcDirs = ['assets']
}
}
productFlavors {
flavor1 {
sourceSets {
flavor1 {
resources {
exclude 'res/drawable-mdpi/*'
}
}
}
}
flavorDimensions "flavor"
}
但仍然drawable-mdpi文件夹来到apk。
所以任何人都可以说明我犯了什么错误。
谢谢Vivek
1楼
我终于解决了这个问题!
我找到了 。
这样做了:
将一个xml文件添加到res / raw文件夹。 我把它命名为resources_discard.xml,这是它:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:discard="@raw/hd/*" />
我的味道名为lite(“src / lite / res / raw”),这个文件放在正确的目录结构中
这样,res / hd文件夹的内容不包含在lite版本中,有效地将我的lite build apk大小减少了50%
更新:要从不同的风格中排除一些图像,您必须将图像放在“assets”文件夹中,并以gradle声明:
flavor {
aaptOptions {
ignoreAssetsPattern '/folder:*.jpg:*.png' //use : as delimiter
}
}
我还了解到你不能在/ res / raw文件夹中有子文件夹。
2楼
您可以尝试使用拆分。
示例(右侧来自android SDK网页):
android {
...
splits {
// Configures multiple APKs based on screen density.
density {
// Configures multiple APKs based on screen density.
enable true
// Specifies a list of screen densities Gradle should not create multiple APKs for. Here you should add all the densities except MDPI.
exclude "ldpi", "xxhdpi", "xxxhdpi"
// Specifies a list of compatible screen size settings for the manifest.
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
}
}
如果这不起作用,您可以将res / MDPI和其余res / Density文件夹分成两个单独的模块(让我们称它们为layoutMdpi和layoutAll)。 两个模块都需要具有相同的包名称,因此它们的R类是相同且可互换的(基本上与android SDK的不同版本之间发生的相同)。 然后,为您的flavor创建至少两个特定的依赖项配置,一个用于应该使用MDPI的配置,另一个用于不应该使用MDPI的配置。
configurations {
mdpiCompile
allCompile
}
dependencies {
...
mdpiCompile project(':layoutMdpi')
allCompile project(':layoutAll')
}
然后,由于layoutAll中不存在MDPI资源,因此您可以继续使用。