You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在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报错的原因。

之前你配置的packagingOptionssourceSets.resources排除规则无效,是因为这些配置针对的是最终APK打包阶段Java/Kotlin的资源目录,而res目录的资源扫描是更早的阶段,不受这些规则影响。

解决方案

方案1:推荐 - 移出res目录(最稳妥)

把Python脚本放到项目根目录的自定义文件夹里,比如scripts/。这样既不会被AGP扫描到,终端运行脚本也更规范,比如:

python scripts/fetch_elevenlabs.py [参数]

方案2:留在res目录但避开values子目录

如果一定要放在res目录下,不要放在valuesdrawable这类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

火山引擎 最新活动