原生插件自带的 read_media_images 权限删不掉,因其自身 androidmanifest.xml 会合并进最终包并覆盖 manifest.json 配置;需逐层处理:先删插件内 nativeplugins/xxx/android/androidmanifest.xml 中对应权限行,再在 manifest.json 的 android 节点配置 excludepermissions 字段排除,最后用 nativeresources/android/androidmanifest.xml 补充 tools:node="remove" 移除,且必须清理 unpackage、platforms、plugins 后重新云打包。

原生插件自带的 READ_MEDIA_IMAGES 权限怎么删不掉?
不是 manifest.json 改了就生效——插件自身的 AndroidManifest.xml 会直接合并进最终包,覆盖你的配置。常见于相机、相册、文件选择类插件(比如 uni-file-picker 或某些定制 camera 插件),它们在 nativeplugins/xxx/android/ 下自带 AndroidManifest.xml,里面明文声明了媒体权限。
实操建议:
- 进入
nativeplugins/插件名/android/目录,检查是否存在AndroidManifest.xml - 若存在,打开它,找到类似
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"></uses-permission>的行,直接删除 - 若该文件里用了
tools:node="replace"或未声明xmlns:tools,会导致移除失效;稳妥做法是删掉整行,而非加tools:node="remove" - 改完后务必清理:删掉
unpackage/、platforms/、plugins/目录,再重新云打包
manifest.json 里删了权限,但云打包还是带上了?
因为云打包流程是「模板 + 模块 + 插件」三者合并清单,你删的是“你声明的部分”,但插件或模块可能在底层强制注入。尤其当插件用了旧版 SDK(如 AndroidX 1.6+ 的 camera2 或 media3 库),会自动拉入媒体权限。
实操建议:
- 在
manifest.json的app-plus → distribute → android节点下,显式添加excludePermissions字段(HBuilderX 3.9+ 支持):"excludePermissions": [ "<uses-permission android:name='\"android.permission.READ_MEDIA_IMAGES\"/'>", "<uses-permission android:name='\"android.permission.READ_MEDIA_VIDEO\"/'>" ]</uses-permission></uses-permission>
- 注意:这个字段只对云打包生效,本地自定义基座不识别
- 如果插件同时声明了
READ_EXTERNAL_STORAGE,也一并加到excludePermissions,避免系统降级兼容时自动补回
删完权限后运行时报错“Permission denied”?
说明代码里还在调用依赖这些权限的 API,比如 uni.chooseImage、uni.getProvider(media)、或插件内部的 MediaStore 查询逻辑。权限被移除 ≠ 功能还能用,系统会在运行时直接拒绝。
实操建议:
- 全局搜索项目中所有
uni.chooseImage、uni.chooseVideo、uni.openMediaPicker调用,确认是否真不需要 —— 如果需要,就不能删权限 - 检查插件文档,看是否有“无权限模式”开关(少数插件提供
useSystemPicker: false等降级选项) - 若插件源码可控,在其 Android 实现里把
MediaStore.Images.Media.EXTERNAL_CONTENT_URI替换为应用私有目录路径(getExternalFilesDir),绕过媒体库访问
为什么 nativeResources/Android/AndroidManifest.xml 有时也不起作用?
因为它的合并优先级低于插件自带的 AndroidManifest.xml。只有当插件没提供自己的清单时,nativeResources 才生效。而且必须确保该文件顶部已声明命名空间:
xmlns:tools="http://schemas.android.com/tools"
实操建议:
- 不要只靠
nativeResources单点防守,要三层拦截:插件内清单 →excludePermissions→nativeResources -
nativeResources/Android/AndroidManifest.xml中写移除语句时,必须用完整标签格式,不能省略斜杠:<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" tools:node="remove"></uses-permission>
- 如果插件用了 AAR 包且未暴露清单,只能反编译 AAR 查
AndroidManifest.xml,或联系插件作者提供无权限版本











