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

Xamarin Plugin.MediaManager 1.2.2 Android项目出现NoClassDefFoundError问题

问题描述

我在iOS和Android项目中使用NuGet包Plugin.MediaManager 1.2.2版本,但该包并非在所有Android项目中都能正常运行。现有一个Android项目运行时抛出Java.Lang.NoClassDefFoundError: com.google.android.exoplayer2.source.ConcatenatingMediaSource异常,而使用相同模板在Visual Studio for Mac中新建的Android项目却无此异常,可正常播放音频。

环境信息

  • 两个项目的目标Android版本均为13.0
  • 仅使用Plugin.MediaManager 1.1.1版本时不会出现该异常
  • 已尝试删除bin和obj文件夹,但问题依旧

项目代码

Activity1.cs初始化代码

protected override void OnCreate(Bundle bundle)
{
      ...
      CrossMediaManager.Current.Init(this);
      ...
}

播放逻辑代码(两个项目均使用,仅现有项目执行第二行时抛出异常)

await CrossMediaManager.Current.Pause();
CrossMediaManager.Current.RepeatMode = MediaManager.Playback.RepeatMode.Off;
await CrossMediaManager.Current.Play("https://ia800806.us.archive.org/15/items/Mp3Playlist_555/AaronNeville-CrazyLove.mp3");

疑问

为何该异常仅出现在现有项目而非新项目中?是否需要移除所有NuGet包后重新安装?


解决方案与分析

异常核心原因

Java.Lang.NoClassDefFoundError本质是对应Java类未被正确打包进APK,或存在依赖冲突。结合你的场景,现有项目的问题大概率出在以下几点:

  1. 依赖版本冲突:现有项目中其他NuGet包可能引入了不同版本的ExoPlayer(Plugin.MediaManager 1.2.2依赖ExoPlayer 2.x),导致ConcatenatingMediaSource类版本不匹配或缺失
  2. NuGet缓存损坏:现有项目的本地NuGet依赖缓存已损坏,导致ExoPlayer相关组件未正确安装
  3. 打包配置差异:现有项目的Android打包规则(如ProGuard/R8混淆、MultiDex设置)与新项目不一致,误删了ExoPlayer的必要类

具体解决步骤

  1. 排查并统一ExoPlayer依赖版本

    • 打开现有项目的.csproj文件或Packages.config,查找所有ExoPlayer相关依赖(如Xamarin.AndroidX.Media3.ExoPlayer),确保版本与Plugin.MediaManager 1.2.2的要求一致
    • 若发现冲突,手动指定正确的ExoPlayer版本,避免不同包引入不一致的依赖
  2. 清理并重装目标NuGet包

    • 先卸载Plugin.MediaManager及所有关联的ExoPlayer依赖
    • 删除项目根目录下的packages文件夹(如果存在),再清理bin和obj文件夹,重启Visual Studio for Mac
    • 重新安装Plugin.MediaManager 1.2.2,让NuGet自动处理依赖链
  3. 检查Android打包配置

    • 检查现有项目的ProGuard规则,确保未混淆或移除ExoPlayer类,可添加以下规则到proguard.cfg:
      -keep class com.google.android.exoplayer2.** { *; }
      
    • 若项目方法数超过65536,确认已开启Enable MultiDex(在项目属性的Android选项中设置)
  4. 对比新项目与现有项目的配置差异

    • 导出新项目的.csproj和AndroidManifest.xml,与现有项目逐一对比,重点查看依赖引用、Android版本设置、打包选项等,修正不一致的配置

关于是否需要移除所有NuGet包

不需要全部移除,优先针对Plugin.MediaManager及其ExoPlayer相关依赖进行清理重装即可。如果问题依旧,再通过Visual Studio的NuGet包管理器清理本地缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:25:16