我试图使用Mako根据某些标志生成一些文件。
排除不必要的信息,我想在项目的src和res文件夹中都有一些* .tpl文件,并且需要在构建时将其忽略。

我正在使用Android Studio,所以我使用Gradle进行构建。我的build.gradle文件如下所示:

sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }

我试图从构建中删除这些文件,将文件更改为此:
sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java {
                srcDirs = ['src']
                exclude '*.tpl'
            }
            res {
                srcDirs = ['res']
                exclude '*.tpl'
            }
            assets.srcDirs = ['assets']
        }
    }

这适用于Java文件,但在构建时出现此错误:
:Presentation:generateReleaseResValues UP-TO-DATE
:Presentation:generateReleaseResources UP-TO-DATE
:Presentation:packageReleaseResources
D:\example\res\layout\stuff.xml.tpl
Error:Error: The file name must end with .xml
:Presentation:packageReleaseResources FAILED
Error:Execution failed for task ':Presentation:packageReleaseResources'.
> D:\example\res\layout\stuff.xml.tpl: Error: The file name must end with .xml
Information:BUILD FAILED

知道我在做什么错吗?

以后编辑:
我尝试过的其他方法:
按照@Stanislav的回答,我更改为exclude '**/*.xml.tpl',失败并出现相同的错误。

然后,我尝试更改为exclude '**/*.tpl.xml'以避免该错误,但我得到了以下提示:
Error:Execution failed for task ':Presentation:packageReleaseResources'.
> D:example\res\layout\stuff.tpl.xml: Error: '.' is not a valid file-based resource name character: File-based resource names must contain only lowercase a-z, 0-9, or underscore

因此,下一个测试是将文件stuff_tpl.xml和exclude命令命名为exclude '**/*_tpl.xml',但这会引发错误:
Error:(1) Error parsing XML: syntax error
D:example\res\layout\stuff_tpl.xml

我还尝试了以下几行:
excludes = ['**/*_tpl.xml']
excludes = ['layout/*_tpl.xml']
excludes = ['layout/stuff_tpl.xml']

但是他们都没有从构建中删除文件。

最佳答案

根据此question的答案,不可能从构建中删除Android资源,而只能从JAVA资源中删除。

现在,我将模板文件存储在项目外部的单独文件夹中,并使用Mako和其他python脚本在项目生成步骤中将其移动到drawable文件夹中。

08-05 20:37