6***@qq.com
6***@qq.com
  • 发布:2026-04-01 09:42
  • 更新:2026-04-01 09:43
  • 阅读:52

uniApp 打包 APK 后音频无法播放,浏览器打开正常,真机调试和打包都没声音

分类:HBuilderX

问题描述:
项目用 HBuilderX 开发,音频文件放在 static/sounds/ 目录下。

  • 在电脑浏览器中打开 index.html 可以正常播放
  • 但真机调试时没声音
  • 打包成 APK 安装到手机后也没声音

已尝试过的方案:

  1. 路径改成 /static/sounds/xxx.mp3 → 无效
  2. 路径改成 static/sounds/xxx.mp3(去掉斜杠)→ 无效
  3. 路径改成 _www/static/sounds/xxx.mp3 → 无效
  4. 用 plus.io.convertLocalFileSystemURL('_www') 动态获取根目录拼接 → 仍然无效
  5. 音频文件确认已在 APK 的 assets/apps/xxx/www/static/sounds/ 目录下

代码片段(playVoiceWithFallback 函数):
playVoiceWithFallback(voicePath) {
const audio = uni.createInnerAudioContext();
// 尝试过多种路径写法,都不行
audio.src = '_www/static/' + voicePath;
audio.play();
audio.onError((err) => {
console.log('播放失败', err);
});
}

控制台报错:

  • ERR_FILE_NOT_FOUND
  • 或者播放失败,没有具体错误码

环境信息:

  • HBuilderX 版本:最新版
  • 打包方式:传统云打包(也试过安心打包,都不行)
  • 设备:Android 平板
  • 音频格式:MP3

请问问题出在哪里?如何解决?

2026-04-01 09:42 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

根据知识库中的信息,这是 App-Android 平台已知的历史问题,在 HBuilderX 4.36 版本 中已修复"云打包后应用 static 目录下视频无法播放"的问题(该修复同样适用于音频资源)。

解决方案

1. 升级 HBuilderX

请将 HBuilderX 升级到 最新正式版 5.04Alpha 版 5.03 以上。旧版本存在 static 目录下资源文件打包后无法访问的 Bug。版本更新日志

2. 正确的路径处理方式

在 App 端(Android),static 目录下的资源需要使用 plus.io.convertLocalFileSystemURL 将相对路径转换为本地文件系统绝对路径:

playVoiceWithFallback(voicePath) {  
  const audio = uni.createInnerAudioContext();  

  // 基础路径(以/开头表示应用根目录)  
  let srcPath = '/static/sounds/' + voicePath;  

  // #ifdef APP-PLUS  
  // 在App端必须转换为本地文件系统路径  
  srcPath = plus.io.convertLocalFileSystemURL(srcPath);  
  // #endif  

  audio.src = srcPath;  

  // 建议等待可以播放状态再执行播放  
  audio.onCanplay(() => {  
    audio.play();  
  });  

  audio.onError((err) => {  
    console.log('播放失败', err);  
  });  

  // 如果上面方式不行,尝试直接播放(某些版本需要)  
  // audio.play();  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

3. 替代方案:使用网络路径

如果本地路径仍有问题,可先将音频文件上传到服务器,使用网络地址(http/https)播放,这是兼容性最好的方式。

4. 检查音频模块

如果在真机调试时提示"未集成 audio 模块",需要在 manifest.json -> App 模块配置 中勾选 Audio(音频) 模块(尽管 uni.createInnerAudioContext 通常不需要额外配置)。

5. 权限检查(Android 6.0+)

虽然播放本地静态资源通常不需要运行时权限,但如果音频文件需要缓存或写入,请确保已申请存储权限。

关键代码说明

根据知识库中 原生音频播放插件 的示例,App 端播放本地音频的标准写法是:

// 将本地文件系统的绝对路径转换  
const filePath = plus.io.convertLocalFileSystemURL('/static/mhwt.mp3');  
// 然后赋值给音频对象  
audio.src = filePath;

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

注意:直接使用 _www/static/xxx.mp3static/xxx.mp3 在浏览器中可以工作,但在 Android App 中必须通过 convertLocalFileSystemURL 转换才能正确访问打包后的 assets 资源。

内容为 AI 生成,仅供参考

要回复问题请先登录注册