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

.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.Update 2.1.0.10依赖了Xamarin.AndroidX.Collection.Jvm 1.4.0.5,而项目中其他依赖(如Xamarin.Firebase.Messaging 123.0.8)引入了旧版本的Xamarin.AndroidX.Collection.Ktx 1.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>

操作步骤:

  1. 添加上述配置到项目的.csproj文件中;
  2. 右键项目 -> 选择清理;
  3. 右键项目 -> 选择还原NuGet包;
  4. 重新编译项目。

方法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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:09:50