添加文件夹到srcDir除了gradle中的一个文件

时间:2018-03-15 14:57:26

标签: gradle android-gradle

我正在开发一个具有多种风格的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中已经存在的资源的替换,但是使用我当前的方法,它会导致构建因重复资源而失败。

所以我需要的是一种将“src / module1 / res”添加到flavor2但不包含一个特定文件的方法。

我试过

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

但无济于事。

这有可能吗?

2 个答案:

答案 0 :(得分:1)

在查看多个答案like this后,您所拥有的代码对我来说是正确的。但是,this bug表示未实现排除路径仍处于打开状态。

引用alternate approachthese docs可能会对您有用。我建议在flavour2目录/模块中添加一个资源目录,并使用它来包含丢弃文件。

sourceSets {
    flavor2 {
        res {
            srcDirs += ["src/module1/res"]
            srcDirs += ["src/module2/res"]
        }
    }
 }

然后使用以下内容将resources_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" />

答案 1 :(得分:0)

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

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