Android中android.enableAapt2弃用警告与AAPT2报错及Manifest修改咨询
解决AAPT2启用后的Manifest文件错误问题
我之前也碰到过一模一样的情况——为了躲警告开了android.enableAapt2=false,结果现在这个选项要被移除,不得不启用AAPT2,结果直接在Manifest上炸锅了。其实核心原因是AAPT2比旧版的AAPT对XML语法和资源引用的检查严格太多,之前能蒙混过关的小问题现在都会触发错误。
从你给出的Manifest开头来看,先重点排查这几个方向:
XML基础语法检查
- 确保所有标签都正确闭合:比如自闭合标签(像
<uses-feature/>)不能漏写末尾的/,成对标签(比如<activity>)必须有对应的</activity>结尾 - 所有属性值必须用双引号包裹:AAPT2完全不接受单引号或者无引号的写法,比如
<uses-permission android:name=android.permission.CAMERA>这种写法直接报错,改成<uses-permission android:name="android.permission.CAMERA">就好 - 确认文件编码和xml声明一致:你的开头写了
encoding="utf-8",要保证Manifest文件确实是用UTF-8编码保存的,别出现中文或者特殊字符乱码的情况
- 确保所有标签都正确闭合:比如自闭合标签(像
Manifest根标签与命名空间
- 检查
<manifest>标签的package属性是否正确填写:这个属性是必填项,拼写错误或者空着都会触发AAPT2错误 - 如果用到了自定义命名空间(比如
xmlns:tools),要确认命名空间的URL是正确的,比如xmlns:tools="http://schemas.android.com/tools"不能写错
- 检查
资源引用的准确性
- 检查Manifest里所有
@xxx/xxx格式的资源引用:比如@string/app_name要确保res/values/strings.xml里确实有app_name这个字符串,而且大小写要完全匹配(AAPT2对大小写敏感) - 系统资源要加
android:前缀:比如引用系统样式要写@android:style/Theme.Material.Light,不能漏了android:
- 检查Manifest里所有
另外,最直接的方法是看详细错误日志:在Android Studio的Build窗口切换到Build Output,里面会明确告诉你错误出在Manifest的第几行、具体是什么问题,比如“未闭合的标签”“无效的属性值”之类的,跟着改就行。
内容的提问来源于stack exchange,提问作者Non Sensei
相关产品推荐
相关产品推荐

