我需要从风格中删除特定的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
答案 0 :(得分:7)
我终于解决了这个问题!
我找到了this link。
这样做了:
将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(&#34; src / lite / res / raw&#34;)
这样,res / hd文件夹的内容不包含在lite版本中,有效地将我的精简构建apk大小减少了50%
更新:要从不同的风格中排除一些图像,您必须将图像放入&#34; assets&#34;文件夹,并在gradle声明:
flavor {
aaptOptions {
ignoreAssetsPattern '/folder:*.jpg:*.png' //use : as delimiter
}
}
我还了解到你在/ res / raw文件夹中没有子文件夹。
答案 1 :(得分:0)
您可以尝试使用拆分。
示例(来自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资源,所以你很高兴。