如何从gradle构build口味排除res文件夹?

我有一个要求从味道中删除特定的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

Solutions Collecting From Web of "如何从gradle构build口味排除res文件夹?"

我终于解决了这个问题!

我find了这个链接 。

这样做:

  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/*" /> 
  2. 这个文件被放置在一个正确的目录结构中,称为lite“scr / lite / res / raw”

这样,res / hd文件夹的内容不包含在精简版构build中,有效地将我的精简版构buildapk文件大小减less了50%

UPD:从不同的风格中排除一些图像,你必须把图像放在assets文件夹中,并在gradle中声明:

  flavor { aaptOptions { ignoreAssetsPattern '/folder:*.jpg:*.png' //use : as delimiter } } 

我也了解到,你不能在/原始文件夹中的子文件夹。

你可以尝试使用拆分。

示例(从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之间发生的相同)。 然后,为您的口味创build至less两个特定的依赖configuration,一个用于应该使用MDPI的用户,另一个用于不应用的用户。

 configurations { mdpiCompile allCompile } dependencies { ... mdpiCompile project(':layoutMdpi') allCompile project(':layoutAll') } 

然后,由于MDPI资源不存在layoutAll,你很好走。