Android Studio 3.0报错:未知元素<uses-permission>,请求技术协助
解决AAPT2报错:unknown element found
我之前开发扫描类App的时候也踩过一模一样的坑!这个报错本质是你把<uses-permission>标签放错了Manifest文件里的层级位置,AAPT2对Manifest的结构校验非常严格,不允许权限标签出现在非根层级的位置。
问题根源
<uses-permission>必须是<manifest>根标签的直接子元素,绝对不能嵌套在<application>、<activity>或者其他任何标签内部——很多开发者会不小心把权限声明写到<application>里面,这就会触发这个“未知元素”的报错。
正确的Manifest结构示例
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.scanner.app"> <!-- 权限声明必须放在这里:<manifest>的直接子节点 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- 如果需要其他关联权限,比如存储,也放在同一层级 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.ScannerApp"> <!-- 你的Activity、Service等组件声明都在这里面 --> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
快速修复步骤
- 打开你的
AndroidManifest.xml文件 - 找到报错的
<uses-permission android:name="android.permission.CAMERA" />行 - 把它拖拽到
<manifest>标签的直接子节点位置(也就是<application>标签的上方或下方,确保不在任何标签内部) - 点击Android Studio右上角的「Sync Project with Gradle Files」按钮同步项目
- 重新编译项目,这个报错应该就消失了
额外提示
如果你的App目标API是23及以上,除了Manifest声明,还需要在代码中动态申请相机权限,不然运行时会被拒绝访问相机。不过先解决当前的编译报错,再处理运行时权限的问题就好。
内容的提问来源于stack exchange,提问作者Ricardo F. Seikka
相关产品推荐
相关产品推荐

