You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

just_audio应用发布版播放列表加载失败求助(附代码)

排查方案

针对调试正常、发布构建报错的情况,按以下步骤排查:

1. 修复混淆规则

发布构建默认开启R8混淆,会破坏just_audio依赖的ExoPlayer及自身类结构,需在android/app/proguard-rules.pro中添加:

-keep class com.ryanheise.** { *; }
-keep class com.google.android.exoplayer2.** { *; }

添加后重新打包测试。

2. 确认权限配置完整性

检查AndroidManifest.xml中是否包含所有必要权限:

<!-- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 后台播放唤醒权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- 前台服务权限(just_audio_background需要) -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

同时确保没有遗漏just_audio_background要求的服务声明等其他配置。

3. 调整静态变量初始化逻辑

代码中_nextMediaId是静态变量,发布模式下编译优化可能导致其初始化异常,进而影响MediaItem的ID生成。建议将playlist的初始化移到_init方法内,避免静态初始化:

Future<void> _init() async {
  _player.errorStream.listen((e) {
    print('A stream error occurred: $e');
  });
  try {
    // 移到方法内初始化playlist
    final playlist = [
      ClippingAudioSource(
        start: const Duration(seconds: 60),
        end: const Duration(seconds: 90),
        child: AudioSource.uri(
          Uri.parse("https://s3.amazonaws.com/scifri-episodes/scifri20181123-episode.mp3"),
        ),
        tag: MediaItem(
          id: '${_nextMediaId++}',
          album: "Science Friday",
          title: "A Salute To Head-Scratching Science (30 seconds)",
          artUri: Uri.parse("https://media.wnyc.org/i/1400/1400/l/80/1/ScienceFriday_WNYCStudios_1400.jpg"),
        ),
      ),
    ];
    await _player.setAudioSources(playlist);
    setState(() {
      isLoading = false;
    });
  } on PlayerException catch (e) {
    print("Error loading playlist: $e");
  }
}

同时可将_nextMediaId改为非静态变量,避免跨实例的异常。

4. 验证依赖版本兼容性

当前使用的just_audio 0.10.2和just_audio_background 0.0.1-beta.16版本可能存在兼容性问题,建议升级到更稳定的匹配版本:

  • just_audio可升级至0.10.18
  • just_audio_background可升级至0.0.1-beta.20
    升级后重新测试发布构建。

5. 临时关闭编译优化排查

如果以上步骤无效,可临时关闭R8混淆和资源压缩,确认是否是编译优化导致:
修改android/app/build.gradle的release构建配置:

buildTypes {
    release {
        // 临时使用debug签名,方便测试
        signingConfig signingConfigs.debug
        minifyEnabled false
        shrinkResources false
    }
}

重新打包后如果正常,说明问题出在混淆或资源压缩规则上,再针对性调整。

内容的提问来源于stack exchange,提问作者sigjak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:12:39