如何从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

  • 如何在Android Studio上看到Gradle警告?
  • Android Gradle DexException:多个dex文件定义Lorg / hamcrest / Description
  • Android Studio“当前NDK支持已被弃用”
  • 使用aar和source jar将Android库发布到Maven
  • Gradle构build不工作:执行失败的任务':MyApp:compileDebug'
  • 无法更新build.gradle使用支持库23.0.1
  • 通过Android Studio菜单运行lint和gradlew命令行之间的区别
  • Android Studio:如何创建第二个调试版本types
  • 我终于解决了这个问题!

    我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,你很好走。