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

Flutter just_audio调用setAudioSource设置播放列表时应用崩溃求助

解决just_audio调用setAudioSource时崩溃的问题

问题场景

调用await _player.setAudioSource(_playlist);时应用崩溃,注释该代码则正常启动。使用版本:

just_audio: ^0.9.29
audio_service: ^0.18.7

此前功能正常,突然出现故障。三星设备抛出错误:

E/AndroidRuntime(29193): FATAL EXCEPTION: main
E/AndroidRuntime(29193): Process: com.myapp.music, PID: 29193
E/AndroidRuntime(29193): java.lang.NoSuchMethodError: No virtual
method buildOrThrow()Lcom/google/common/collect/ImmutableMap; in class
Lcom/google/common/collect/ImmutableMap$Builder; or its super classes
(declaration of 'com.google.common.collect.ImmutableMap$Builder'
appears in
/data/app/~~w8o-YhL68Tea9ikpfdER9g==/com.myapp.music-Tng-aVz190Pc8uM2piHH8g==/base.apk!classes21.dex)
E/AndroidRuntime(29193): at
com.google.android.exoplayer2.audio.AudioCapabilities.(AudioCapabilities.java:75)
...(省略后续栈信息)

问题原因

这是Guava依赖版本冲突导致的:just_audio底层依赖的ExoPlayer需要调用Guava新版本中的buildOrThrow()方法,但项目中其他依赖引入了旧版Guava,该方法在旧版中不存在,初始化ExoPlayer时就会抛出NoSuchMethodError。而调用setAudioSource才会触发ExoPlayer初始化,所以注释该代码不会崩溃。

解决步骤

  1. 强制指定兼容的Guava版本
    在android/build.gradle的allprojects块中添加依赖强制策略:

    allprojects {
        repositories {
            // 保留原有仓库配置
        }
        configurations.all {
            // 强制使用ExoPlayer兼容的Guava版本
            resolutionStrategy.force 'com.google.guava:guava:31.0.1-android'
        }
    }
    
  2. 清理缓存并重新构建
    执行以下命令确保依赖生效:

    flutter clean
    rm -rf android/.gradle
    flutter pub get
    flutter run
    
  3. 可选:升级插件版本
    尝试升级just_audio和audio_service到最新稳定版,新版本通常会修复依赖兼容问题:

    just_audio: ^0.9.36  # 或更高稳定版
    audio_service: ^0.18.12 # 或更高稳定版
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:01:16