将文件夹添加到srcDir,但gradle中的一个文件除外

将文件夹添加到srcDir,但gradle中的一个文件除外,gradle,android-gradle-plugin,Gradle,Android Gradle Plugin,我正在开发一款android应用程序,具有多种风格,如: sourceSets { main { res.srcDirs += ["headend/ott/res"] } flavor1 { res.srcDirs += ["src/module1/res-splash"] } flavor2 { java.srcDirs += ["src/module1/java"] res.srcDi

我正在开发一款android应用程序,具有多种风格,如:

sourceSets {
    main {
        res.srcDirs += ["headend/ott/res"]
    }

    flavor1 {
        res.srcDirs += ["src/module1/res-splash"]
    }

    flavor2 {
        java.srcDirs += ["src/module1/java"]
        res.srcDirs += ["src/module1/res"]
        res.srcDirs += ["src/module2/res"]
        assets.srcDirs += ["src/module1/assets"]
    }

    test {
        res.srcDirs += ["src/test/resources"]
    }
    ...
我的问题是,在flavor2中,一些module2资源被认为是module1中已经存在的资源的替代品,但在我当前的方法中,它会导致构建失败,并产生重复的资源

因此,我需要的是一种向flavor2添加“src/module1/res”的方法,但不包括一个特定的文件

我试过了

res{
    srcDirs += ["src/module1/res"]
    res.srcDirs += ["src/module1/res"]        
    exclude 'src/module1/res/drawable/specific_file.xml'
}
但是没有用


这可能吗?

在查看了多个答案后,我认为您的代码是正确的。但是,声明未实现排除路径仍然是开放的

这可能对你有用。我建议在flavour2目录/模块中添加一个资源目录,并使用它包含一个丢弃文件

sourceSets {
    flavor2 {
        res {
            srcDirs += ["src/module1/res"]
            srcDirs += ["src/module2/res"]
        }
    }
 }
然后将
resources\u discard.xml
添加到
module2/res/raw
,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" 
         tools:discard="@drawable/specific_file.xml" />

尝试这样做。在我的一个项目中,我能够通过不使用
exclude
路径中的
srcDir
路径从编译中排除java文件
exclude
通常在不附加
srcDir
路径的情况下工作

res{
    srcDirs += ["src/module1/res"]
    res.srcDirs += ["src/module1/res"]        
    exclude 'drawable/specific_file.xml'
}

这不是丢弃了
模块2/specific_文件吗?因为我需要的是在添加新的
module2/specific_文件时丢弃
module1/specific_文件
,所以您还包括module2中的一些文件,这些文件是覆盖的?你能更新你的问题代码来显示你的答案吗?这样我就可以看到pathsI已经有了这些信息:“在flavor2中,我需要替换res文件夹中的一些文件,这会导致生成失败,并产生重复的资源。”你认为可以更清楚吗?你上面的所有代码都只包括module1中的res。。。没有第二个来源正如我在问题中所解释的,我已经尝试过了,但是它不适用于
exclude
路径。您有此
排除'src/module1/res/drawable/specific_file.xml'
,您可以尝试此
排除'drawable/specific_file.xml'