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.MediaManager1.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,或存在依赖冲突。结合你的场景,现有项目的问题大概率出在以下几点:
- 依赖版本冲突:现有项目中其他NuGet包可能引入了不同版本的ExoPlayer(
Plugin.MediaManager1.2.2依赖ExoPlayer 2.x),导致ConcatenatingMediaSource类版本不匹配或缺失 - NuGet缓存损坏:现有项目的本地NuGet依赖缓存已损坏,导致ExoPlayer相关组件未正确安装
- 打包配置差异:现有项目的Android打包规则(如ProGuard/R8混淆、MultiDex设置)与新项目不一致,误删了ExoPlayer的必要类
具体解决步骤
排查并统一ExoPlayer依赖版本
- 打开现有项目的
.csproj文件或Packages.config,查找所有ExoPlayer相关依赖(如Xamarin.AndroidX.Media3.ExoPlayer),确保版本与Plugin.MediaManager1.2.2的要求一致 - 若发现冲突,手动指定正确的ExoPlayer版本,避免不同包引入不一致的依赖
- 打开现有项目的
清理并重装目标NuGet包
- 先卸载
Plugin.MediaManager及所有关联的ExoPlayer依赖 - 删除项目根目录下的
packages文件夹(如果存在),再清理bin和obj文件夹,重启Visual Studio for Mac - 重新安装
Plugin.MediaManager1.2.2,让NuGet自动处理依赖链
- 先卸载
检查Android打包配置
- 检查现有项目的ProGuard规则,确保未混淆或移除ExoPlayer类,可添加以下规则到
proguard.cfg:-keep class com.google.android.exoplayer2.** { *; } - 若项目方法数超过65536,确认已开启
Enable MultiDex(在项目属性的Android选项中设置)
- 检查现有项目的ProGuard规则,确保未混淆或移除ExoPlayer类,可添加以下规则到
对比新项目与现有项目的配置差异
- 导出新项目的
.csproj和AndroidManifest.xml,与现有项目逐一对比,重点查看依赖引用、Android版本设置、打包选项等,修正不一致的配置
- 导出新项目的
关于是否需要移除所有NuGet包
不需要全部移除,优先针对Plugin.MediaManager及其ExoPlayer相关依赖进行清理重装即可。如果问题依旧,再通过Visual Studio的NuGet包管理器清理本地缓存。
内容的提问来源于stack exchange,提问作者John_Kub
相关产品推荐
相关产品推荐

