【问题标题】:Add folder to srcDir except for one file in gradle将文件夹添加到 srcDir 除了 gradle 中的一个文件
【发布时间】:2018-03-15 14:57:25
【问题描述】:

我正在开发一个具有多种风格的 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'
}

但无济于事。

这可能吗?

【问题讨论】:

    标签: gradle android-gradle-plugin


    【解决方案1】:

    查看多个答案like this 后,您的代码对我来说是正确的。但是,this bug 声明没有实现排除路径仍然是开放的。

    这个引用these docsalternate approach 可能对您有用。我建议在你的 flavor2 目录/模块中添加一个资源目录,并使用它来包含一个废弃文件。

    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" />
    

    【讨论】:

    • 这不是丢弃module2/specific_file吗?因为我需要的是丢弃module1/specific_file,同时添加一个新的module2/specific_file
    • 啊,好吧,所以您还包括了来自 module2 的一些文件,这些文件是覆盖的?您能否更新您的问题代码以显示您在那里的内容,以便我可以看到路径
    • 我已经有了这些信息:“在 flavor2 中,我需要替换 res 文件夹中的一些文件,这会导致构建失败并出现重复资源。”你认为它可以更清楚吗?
    • 您上面的所有代码仅包含来自 module1 的 res ...没有第二个来源
    【解决方案2】:

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

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

    【讨论】:

    • 正如我的问题中所解释的,我已经尝试过了,但它不起作用
    • 关注exclude 路径。你有这个exclude 'src/module1/res/drawable/specific_file.xml',你可以试试这个exclude 'drawable/specific_file.xml'
    猜你喜欢
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2011-05-27
    • 2012-09-06
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多