升级AGP至7.2.1后报AAPT invalid locale 'be-'编译错误如何解决
问题描述
在Android Studio中将Android Gradle插件升级到7.2.1版本后,项目出现编译报错,具体错误信息如下:
AAPT: error: failed to deserialize resource table: configuration has invalid locale 'be-'.
使用如下旧版本配置时项目可正常编译运行:
classpath 'com.android.tools.build:gradle:4.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10"
升级为如下版本配置后触发上述编译错误:
classpath 'com.android.tools.build:gradle:7.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
问题原因
Android Gradle插件从7.0版本开始升级了内置的AAPT2资源编译工具,对资源locale标识的校验规则比4.x版本严格很多:旧版本会自动忽略格式不符合规范的locale标识,不会阻断编译;新版本遇到不合法的locale标签会直接抛出编译错误。
报错里提到的be-属于无效locale标识,不符合BCP 47语言标签规范:合法的白俄罗斯语相关标签要么是不带后缀的be,要么是带完整地区码的标签比如be-BY,末尾带半截横杠的写法属于格式错误,一般来自三种情况:项目自身资源目录命名错误、build.gradle里的resConfigs配置写错、引入的第三方依赖中打包了带无效locale的资源。
解决方案
按优先级依次排查处理即可:
- 检查项目自身各模块的res资源目录,查找是否存在命名类似
values-be-的不合法文件夹。如果不需要配置地区维度,直接重命名为values-be;如果需要匹配特定地区,补全对应地区码改成合法命名,比如values-be-BY。 - 检查对应模块
build.gradle中defaultConfig块下的resConfigs配置,确认是否误填入了be-这类无效值,找到后直接删除或修正为合法的locale标识。 - 如果无效locale来自第三方依赖,无法直接修改资源内容,可以在模块的
android配置块中添加如下配置,关闭AAPT2的locale强校验:
android { // 原有其他配置保持不变 aaptOptions { additionalParameters "--locale-validation-mode", "ignore" } }
内容的提问来源于stack exchange,提问作者PhantomThief
相关产品推荐
相关产品推荐

