Xamarin.Android迁移MAUI遇XA4215错误:Java类型重复生成
疑问解答
1. MAUI项目为啥还出现Xamarin相关内容?Xamarin.Android.Common.targets是什么?
.NET MAUI Android是从Xamarin.Android演进过来的,构建过程里还复用了旧的Xamarin.Android.Common.targets构建脚本,这个文件属于微软Android SDK的一部分,默认存在C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\<版本号>\tools\目录下,不在你的项目/解决方案文件夹里是正常的。
出现Xamarin相关引用,是因为项目间接依赖了旧的Xamarin.Android支持库(比如Xamarin.Android.Support.Media.Compat)和AndroidX库(Xamarin.AndroidX.Media),这俩库生成了同名的Java桥接类型,直接触发了冲突。
2. 怎么解决XA4215错误?
根据报错信息,冲突来自两个不同库的MediaSessionCompat+IOnActiveChangeListenerImplementor,按以下步骤处理:
清理重复依赖:
打开项目的.csproj文件,删掉所有Xamarin.Android.Support.*开头的NuGet包引用,换成对应的AndroidX包。比如把Xamarin.Android.Support.Media.Compat换成Xamarin.AndroidX.Media,确保只留AndroidX版本的库。统一依赖版本:
在.csproj里添加统一的包版本配置,避免不同依赖引入版本不一致的库:<ItemGroup> <PackageReference Include="Xamarin.AndroidX.Media" Version="1.6.0.0" /> <!-- 其他AndroidX包也统一版本,确保无冲突 --> </ItemGroup>彻底清理缓存后重建:
执行以下命令清空缓存并重新构建:dotnet clean rd /s /q bin obj # Windows系统用这个,Mac/Linux用rm -rf bin obj dotnet restore dotnet build检查间接依赖:
运行dotnet list package --include-transitive命令查看所有间接依赖,找出还在引用旧Xamarin支持库的第三方包,要么把这个第三方包更到支持MAUI/AndroidX的版本,要么换成其他替代包。
内容的提问来源于stack exchange,提问作者angleUr

