.NET MAUI集成Xamarin.Google.Android.Play.App.Update编译报错求助
.NET MAUI中使用Xamarin.Google.Android.Play.App.Update 2.1.0.10编译时出现重复类定义错误
问题背景
我在.NET MAUI中使用Xamarin.Google.Android.Play.App.Update(版本2.1.0.10)实现安卓应用内更新,项目依赖配置如下:
<ItemGroup> <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="CommunityToolkit.Maui" Version="9.0.2" /> <PackageReference Include="Microsoft.AppCenter" Version="5.0.3" /> <PackageReference Include="Microsoft.AppCenter.Crashes" Version="5.0.3" /> <PackageReference Include="Microsoft.AppCenter.Analytics" Version="5.0.3" /> <PackageReference Include="Microsoft.Identity.Client" Version="4.61.0" /> <PackageReference Include="Microsoft.Maui.Controls" Version="8.0.70" /> <PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="8.0.70" /> </ItemGroup> <ItemGroup Condition="'$(TargetFramework)' == 'net8.0-android'"> <PackageReference Include="Xamarin.Firebase.Messaging" Version="123.0.8" /> <PackageReference Include="Xamarin.Google.Android.Play.App.Update" Version="2.1.0.10" /> </ItemGroup>
编译项目时出现如下错误:
Error JAVA0000: Error in /.nuget/packages/xamarin.androidx.collection.jvm/1.4.0.5/buildTransitive/net8.0-android34.0/../../jar/androidx.collection.collection-jvm.jar:androidx/collection/ArrayMapKt.class: Type androidx.collection.ArrayMapKt is defined multiple times: /.nuget/packages/xamarin.androidx.collection.jvm/1.4.0.5/buildTransitive/net8.0-android34.0/../../jar/androidx.collection.collection-jvm.jar:androidx/collection/ArrayMapKt.class, /.nuget/packages/xamarin.androidx.collection.ktx/1.2.0.9/buildTransitive/net6.0-android31.0/../../jar/androidx.collection.collection-ktx.jar:androidx/collection/ArrayMapKt.class Compilation failed java.lang.RuntimeException: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: /.nuget/packages/xamarin.androidx.collection.jvm/1.4.0.5/buildTransitive/net8.0-android34.0/../../jar/androidx.collection.collection-jvm.jar androidx/collection/ArrayMapKt.class at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:135) at com.android.tools.r8.D8.main(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:5) Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: /.nuget/packages/xamarin.androidx.collection.jvm/1.4.0.5/buildTransitive/net8.0-android34.0/../../jar/androidx.collection.collection-jvm.jar:androidx/collection/ArrayMapKt.class at Version.fakeStackEntry(Version_8.2.33.java:0) at com.android.tools.r8.T.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:5) at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:82) at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:32) at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:31) at com.android.tools.r8.utils.S0.b(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:2) at com.android.tools.r8.D8.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:42) at com.android.tools.r8.D8.b(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:13) at com.android.tools.r8.D8.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:40) at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:122) ... 1 more Caused by: com.android.tools.r8.utils.b: Type androidx.collection.ArrayMapKt is defined multiple times: /.nuget/packages/xamarin.androidx.collection.jvm/1.4.0.5/buildTransitive/net8.0-android34.0/../../jar/androidx.collection.collection-jvm.jar:androidx/collection/ArrayMapKt.class, /.nuget/packages/xamarin.androidx.collection.ktx/1.2.0.9/buildTransitive/net6.0-android31.0/../../jar/androidx.collection.collection-ktx.jar:androidx/collection/ArrayMapKt.class at com.android.tools.r8.utils.Q2.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:21) at com.android.tools.r8.utils.D2.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:54) at com.android.tools.r8.utils.D2.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:10) at java.base/java.util.concurrent.ConcurrentHashMap.merge(ConcurrentHashMap.java:2048) at com.android.tools.r8.utils.D2.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:6) at com.android.tools.r8.graph.m4$a.d(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:6) at com.android.tools.r8.dex.c.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:61) at com.android.tools.r8.dex.c.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:12) at com.android.tools.r8.dex.c.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:9) at com.android.tools.r8.D8.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:45) at com.android.tools.r8.D8.d(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:17) at com.android.tools.r8.D8.c(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:69) at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:28) ... 6 more (JAVA0000)
注:使用低版本的Xamarin.Google.Android.Play.App.Update包不会出现此错误,但无法使用IInstallStateUpdatedListener接口。
问题原因
- 核心原因是AndroidX包版本冲突导致重复类定义:
Xamarin.Google.Android.Play.App.Update2.1.0.10依赖了Xamarin.AndroidX.Collection.Jvm1.4.0.5,而项目中其他依赖(如Xamarin.Firebase.Messaging123.0.8)引入了旧版本的Xamarin.AndroidX.Collection.Ktx1.2.0.9。这两个包都包含了androidx.collection.ArrayMapKt类,R8编译器在合并Dex文件时检测到重复类,导致编译失败。 - 低版本的
Xamarin.Google.Android.Play.App.Update依赖的AndroidX包版本较低,与项目中现有旧版本AndroidX包无冲突,因此能正常编译,但缺少所需的IInstallStateUpdatedListener接口。
解决办法
方法1:强制统一AndroidX Collection相关包版本
在项目的.csproj文件中添加强制版本的PackageReference,让所有依赖都使用同一版本的AndroidX Collection包(建议使用Xamarin.Google.Android.Play.App.Update依赖的1.4.0.5版本):
<ItemGroup> <!-- 强制统一AndroidX Collection系列包版本 --> <PackageReference Include="Xamarin.AndroidX.Collection" Version="1.4.0.5" /> <PackageReference Include="Xamarin.AndroidX.Collection.Ktx" Version="1.4.0.5" /> <PackageReference Include="Xamarin.AndroidX.Collection.Jvm" Version="1.4.0.5" /> </ItemGroup>
操作步骤:
- 添加上述配置到项目的
.csproj文件中; - 右键项目 -> 选择清理;
- 右键项目 -> 选择还原NuGet包;
- 重新编译项目。
方法2:排除冲突的子依赖
找到引入旧版本Xamarin.AndroidX.Collection.Ktx的根源依赖(如Xamarin.Firebase.Messaging),在其PackageReference中排除冲突的子依赖:
<PackageReference Include="Xamarin.Firebase.Messaging" Version="123.0.8"> <ExcludePackageReferences> <ExcludePackageReference Include="Xamarin.AndroidX.Collection.Ktx" /> </ExcludePackageReferences> </ItemGroup>
注意:这种方法可能引发其他依赖兼容性问题,需测试验证相关功能(如Firebase消息推送)是否正常工作。
方法3:更新其他依赖到兼容版本
检查项目中Android相关依赖(如Xamarin.Firebase.Messaging)的最新版本,更新到与Xamarin.Google.Android.Play.App.Update 2.1.0.10兼容的版本,让它们依赖的AndroidX包版本自然统一,从根源避免冲突。
内容的提问来源于stack exchange,提问作者Meghna Singh
相关产品推荐
相关产品推荐

