如何在Gradle中排除/res/values目录下的.py文件编译?
解决res/values下Python脚本导致的资源合并报错
问题根源
Android的res/values是特定资源目录,AGP(Android Gradle插件)会强制扫描该目录下的所有文件,并要求它们必须是XML格式的资源文件(比如strings.xml、colors.xml这类)。你的.py脚本放在这里会被资源合并工具当作无效资源拦截,这就是你看到The file name must end with .xml报错的原因。
之前你配置的packagingOptions和sourceSets.resources排除规则无效,是因为这些配置针对的是最终APK打包阶段或Java/Kotlin的资源目录,而res目录的资源扫描是更早的阶段,不受这些规则影响。
解决方案
方案1:推荐 - 移出res目录(最稳妥)
把Python脚本放到项目根目录的自定义文件夹里,比如scripts/。这样既不会被AGP扫描到,终端运行脚本也更规范,比如:
python scripts/fetch_elevenlabs.py [参数]
方案2:留在res目录但避开values子目录
如果一定要放在res目录下,不要放在values、drawable这类AGP默认处理的资源子目录里,直接放在res/根目录或者自定义的子目录(比如res/scripts/),然后在Gradle里添加资源过滤规则:
android { // ...其他已有配置 aaptOptions { // 排除所有.py文件 ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~:*.py" } }
方案3:强制过滤res/values下的.py文件(不推荐)
如果非要留在res/values目录,可使用AGP的resourceFilter规则来拦截该目录下的.py文件:
android { // ...其他已有配置 resourceFilter { exclude { file -> file.parentFile.name == "values" && file.name.endsWith(".py") } } }
验证修改
修改Gradle配置后,点击Android Studio右上角的Sync Project with Gradle Files,然后重新运行项目,报错应该会消失。
内容的提问来源于stack exchange,提问作者Wavecycle




