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

Flutter just_audio在Android构建中无法加载音频资源求助

解决Flutter音频Asset在Android API33加载失败的问题

问题复现

代码中初始化音频:

void initState() { 
  _myAudioPlayer = AudioPlayer()..setAsset("electric.mp3");
  super.initState();
}

pubspec.yaml配置:

flutter:
  assets:
    - assets/electric.mp3

Web端正常加载,Android API33模拟器/真机报错:

E/ExoPlayerImplInternal( 8300): Playback error
E/ExoPlayerImplInternal( 8300):   com.google.android.exoplayer2.ExoPlaybackException: Source error
E/flutter ( 8260): 
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled 
Exception: Unable to load asset: "electric.mp3".
E/flutter ( 8260): The asset does not exist or has empty data.

解决步骤

  • 修正Asset路径
    代码中setAsset的路径需要和pubspec.yaml里的配置一致,必须带assets/前缀:

    void initState() { 
      _myAudioPlayer = AudioPlayer()..setAsset("assets/electric.mp3");
      super.initState();
    }
    
  • 清理项目缓存并重建
    执行以下命令清除缓存,重新打包asset资源:

    flutter clean
    flutter pub get
    flutter run
    
  • 验证文件存在与大小写
    Android系统严格区分文件名大小写,Web端不区分。确认项目根目录下assets/electric.mp3文件真实存在,且文件名大小写和代码、pubspec中的完全匹配。

  • 检查pubspec.yaml缩进
    确保assets条目缩进正确(使用2个空格,与上级flutter:对齐),错误缩进会导致Flutter无法识别asset配置。

  • 延迟异步初始化
    避免在initState同步调用异步方法,改为延迟初始化确保asset资源加载完成:

    void initState() {
      super.initState();
      Future.delayed(Duration.zero, () async {
        _myAudioPlayer = AudioPlayer();
        await _myAudioPlayer.setAsset("assets/electric.mp3");
      });
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:07:13