你说得完全对,这个点非常专业 👍
在CSDN 博客里如果还写“自定义 App 基座”,会误导大量读者。
👉正式说法必须是:正式 App(云打包 / 发布包)
下面我已经帮你整体改写了一版【术语完全正确】的博客,
这是可以直接发布、不容易被杠、不容易被误解的版本。
uni-app Android 正式 App 无法录音?系统没有麦克风权限的终极解决方案
关键词:uni-app、Android、正式 App、RecorderManager、麦克风权限、Audio 模块、manifest.json
一、问题背景
在使用uni-app开发 Android App 时,我遇到了一个非常“反直觉”的问题:
- ✅ 在HBuilderX 内置调试环境中
👉 录音功能完全正常 - ❌ 在正式 App(云打包 / 发布包)中
👉系统设置里没有“麦克风 / 录音”权限
👉uni.getRecorderManager()无法正常工作
👉 即使代码中主动申请权限,也依然无效
代码逻辑没有问题,权限申请也写了,但正式 App 就是录不了音。
二、问题现象
1️⃣ Android 系统层面
设置 → 应用 → 正式 App → 权限- ❌ 找不到「麦克风 / 录音」
2️⃣ JS 层面表现
constrecorder=uni.getRecorderManager();recorder.start();// 不报错,但没有生成录音文件3️⃣ 手动申请权限也无效
plus.android.requestPermissions(['android.permission.RECORD_AUDIO']);- 回调显示“授权成功”
- 但系统权限列表依然没有麦克风
三、常见误区(很多人会踩)
很多开发者会认为:
只要在
manifest.json里声明android.permission.RECORD_AUDIO
再在 JS 层申请权限
👉 正式 App 就一定能录音
❌这是错误的
四、问题根因(核心结论)
uni-app 正式 App 中,是否具备原生能力,不只取决于 Android 权限
在正式 App(云打包)场景下:
👉原生能力是否存在,取决于manifest.json → modules
❗ 录音功能的真正依赖是:
Audio原生模块
如果正式 App没有集成Audio模块:
- AndroidManifest.xml不会注入录音能力
- 系统设置中不会出现麦克风权限
- RecorderManager表面可用,实际无效
五、唯一正确的修复方式(重点)
✅ manifest.json 中必须包含 Audio 模块
"modules":{"Payment":{},"Bluetooth":{},"Barcode":{},"Camera":{},"Share":{},"Geolocation":{},"Audio":{}}📌"Audio": {}是整个问题的根本解决点
没有它:
- 就算声明了
RECORD_AUDIO - 就算 JS 层权限申请成功
👉正式 App 依然无法录音
六、Android 权限声明(必要但不充分)
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/><uses-permissionandroid:name="android.permission.MODIFY_AUDIO_SETTINGS"/>⚠️ 注意:
- 权限 ≠ 原生能力
- 必须是:Audio 模块 + 权限声明
七、最容易忽略的关键步骤(90% 的坑在这里)
❌ 以下操作都是无效的
- 只修改
manifest.json - 直接运行项目
- 热更新
- 覆盖安装旧 App
✅ 正确流程(必须完整)
1️⃣ 修改manifest.json,加入"Audio": {}
2️⃣重新云打包生成正式 App
3️⃣卸载手机中旧的正式 App
4️⃣ 安装新生成的 App
5️⃣ 重新测试录音功能
👉 少一步,都会导致问题“看起来没解决”
八、如何快速验证是否修复成功?
在 Android 手机上打开:
设置 → 应用 → 正式 App → 权限如果能看到:
- 🎤 麦克风 / 录音
说明Audio 模块已经被正确集成
九、RecorderManager 示例代码
constrecorder=uni.getRecorderManager();recorder.start({sampleRate:16000,numberOfChannels:1,encodeBitRate:96000,format:'wav'});recorder.onStop(res=>{console.log('录音文件路径:',res.tempFilePath);});十、最终总结(一句话)
uni-app 正式 App 中:
❌ 只有 Android 权限 ≠ 可以录音
✅ 必须同时具备:
modules.AudioRECORD_AUDIO权限- 重新云打包并安装正式 App
十一、踩坑总结(送给后来人)
- 不要只盯 JS 代码
- 不要只看权限是否申请成功
- 一定要检查manifest.json → modules
- Audio / Camera / Bluetooth 都是模块级原生能力