Unity应用上传Oculus商店遇Manifest报错 无对应权限配置如何修复
非主动声明的Android Manifest配置报错修复方案
问题核心逻辑
项目目录下手动编辑的自定义Manifest只是打包合并的源文件之一。Unity构建Android安装包时,会自动将引擎内置配置、XR插件自带配置、第三方SDK附带的Manifest内容全量合并,生成最终打包进APK的生效Manifest文件。Oculus商店校验的是这个最终合并后的文件,并非开发者手动编辑的单源Manifest,因此会出现报错项未在自定义文件中声明的情况。
排查流程
- 定位真实生效的Manifest文件
直接通过Android Studio的APK Analyzer打开构建完成的APK,提取全量AndroidManifest.xml内容核对,这就是Oculus审核工具实际校验的文件;也可直接查看Unity项目下Library/PlayerDataCache/Android/路径缓存的合并完成Manifest,找到报错提示中提到的冗余配置项。 - 溯源冗余配置的注入来源
- 排查Package Manager安装的所有第三方SDK/功能模块:应用内更新、数据统计、广告、社交分享类SDK往往会在自身Manifest中声明敏感权限,打包合并时自动注入到最终APK中
- 排查Unity引擎、Oculus XR插件的默认配置:旧版Oculus XR插件、开启了未实际使用的AR/手部追踪模块时,引擎会自动注入冗余的硬件特征声明、权限申请
- 排除Unity构建缓存异常导致的旧配置残留:清理
Library文件夹后重新构建,验证报错是否为历史缓存残留导致
修复操作
注意:当前项目使用的自定义Manifest未引入tools命名空间,直接添加移除标记无法生效,需要先完成命名空间的引入。
- 对确认不需要的注入配置,通过Manifest合并规则强制移除:
- 在自定义Manifest的根节点添加工具命名空间:
xmlns:tools="http://schemas.android.com/tools" - 对应要移除的权限/配置项,添加
tools:node="remove"标记,强制打包时删掉合并进来的冗余声明,参考示例:<!-- 移除自动注入的READ_PHONE_STATE权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" /> <!-- 移除自动注入的非必要硬件特征 --> <uses-feature android:name="android.hardware.location" tools:node="remove" />
- 在自定义Manifest的根节点添加工具命名空间:
- 从源头减少冗余配置注入:
- 卸载项目中未实际使用的第三方功能模块,切断配置注入渠道
- 将Oculus XR插件升级到适配目标设备的最新稳定版,避免旧版本插件自动申请冗余权限
- 修复后必须重新构建测试包,再次核对最终APK内的Manifest,确认报错提示的所有配置项都已被移除,再上传到Oculus审核后台,避免反复提交无效版本
注意事项
- 不要为了消除报错盲目主动申请应用本身用不到的权限,Oculus商店审核会对非必要权限申请提出更严格的合规要求
- 不要直接修改Unity安装目录下的默认Manifest模板,这类修改会在Unity版本更新后被覆盖,也会影响其他项目的构建
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

