旧Android项目迁移AndroidX后运行报Aapt2资源编译错误如何解决?
错误根因
这个报错是AAPT2(Android资源编译工具)的严格校验规则触发的,规则要求id类型的<item>标签内部只能是空内容或者合法的资源引用,不能填写自定义文本/数值。
旧版本AAPT允许<item>标签带自定义内容,你这个是旧项目升级AndroidX、升级AGP版本后,默认启用AAPT2,触发了更严格的资源校验规则。
解决步骤
- 第一步:定位错误的资源定义
不要修改build目录下临时生成的values.xml,直接全局搜索报错行对应的<item>的name属性值,找到你项目/src/main/res/values目录下的原始资源文件(通常是ids.xml、attrs.xml或者自定义的values配置文件)。 - 第二步:修正错误写法
错误写法示例:
改为符合AAPT2规则的写法,直接清空标签内容即可:<item name="custom_tag" type="id">自定义内容</item><item name="custom_tag" type="id" /> - 第三步:兼容配置(修正资源后仍报错可尝试)
- 你当前配置的
buildToolsVersion "27.0.3"和compileSdkVersion 29版本不匹配,可直接删除buildToolsVersion配置行,AGP会自动匹配和compileSdkVersion兼容的build tools版本。 - 清理缓存后重新构建:执行
./gradlew clean命令,删除项目根目录下的.gradle、.idea缓存文件夹,再重新编译项目。 - 如果错误来自第三方依赖库的资源,可检查升级对应依赖到适配AndroidX的版本,你当前引入的
com.specyci:residemenu:1.6、com.basgeekball:awesome-validation:2.0都是未适配AndroidX的旧版本,jetifier自动转换可能出现资源异常,可优先升级这两个依赖的版本。
- 你当前配置的
内容的提问来源于stack exchange,提问作者Cyrus the Great
相关产品推荐
相关产品推荐

