Type androidx.activity.ActivityViewModelLazyKt$viewModels$1 is defined multiple times

报错引入了多个版本的 androidx.activity:activity

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 JAVA0000 Error in obj\Debug\net8.0-android\lp\111\jl\classes.jar:androidx/activity/ActivityViewModelLazyKt$viewModels$1.class: Type androidx.activity.ActivityViewModelLazyKt$viewModels$1 is defined multiple times: obj\Debug\net8.0-android\lp\111\jl\classes.jar:androidx/activity/ActivityViewModelLazyKt$viewModels$1.class, obj\Debug\net8.0-android\lp\144\jl\classes.jar:androidx/activity/ActivityViewModelLazyKt$viewModels$1.class Compilation failed java.lang.RuntimeException: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj\Debug\net8.0-android\lp\111\jl\classes.jar androidx/activity/ActivityViewModelLazyKt$viewModels$1.class at com.android.tools.r8.utils.R0.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:126) at com.android.tools.r8.D8.main(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:5) Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj\Debug\net8.0-android\lp\111\jl\classes.jar:androidx/activity/ActivityViewModelLazyKt$viewModels$1.class at Version.fakeStackEntry(Version_8.1.56.java:0) at com.android.tools.r8.M.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:5) at com.android.tools.r8.utils.R0.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:81) at com.android.tools.r8.utils.R0.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:32) at com.android.tools.r8.utils.R0.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:31) at com.android.tools.r8.utils.R0.b(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:2) at com.android.tools.r8.D8.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:26) at com.android.tools.r8.D8.b(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:13) at com.android.tools.r8.D8.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:24) at com.android.tools.r8.utils.R0.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:113) ... 1 more Caused by: com.android.tools.r8.utils.b: Type androidx.activity.ActivityViewModelLazyKt$viewModels$1 is defined multiple times: obj\Debug\net8.0-android\lp\111\jl\classes.jar:androidx/activity/ActivityViewModelLazyKt$viewModels$1.class, obj\Debug\net8.0-android\lp\144\jl\classes.jar:androidx/activity/ActivityViewModelLazyKt$viewModels$1.class at com.android.tools.r8.utils.O2.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:21) at com.android.tools.r8.utils.O2.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:26) at com.android.tools.r8.utils.A2.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:44) at com.android.tools.r8.utils.A2.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:10) at java.base/java.util.concurrent.ConcurrentHashMap.merge(ConcurrentHashMap.java:2056) at com.android.tools.r8.utils.A2.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:6) at com.android.tools.r8.graph.b4$a.e(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:7) at com.android.tools.r8.dex.c.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:58) at com.android.tools.r8.dex.c.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:9) at com.android.tools.r8.dex.c.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:8) at com.android.tools.r8.D8.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:29) at com.android.tools.r8.D8.d(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:17) at com.android.tools.r8.D8.c(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:1) at com.android.tools.r8.utils.R0.a(R8_8.1.56_756d1f50f618dd1c39c000f11defb367a21e9e866e3401b884be16c0950f6f79:28) ... 6 more Directory 'obj\Debug\net8.0-android\lp\111' is from 'androidx.activity.activity.aar'. TodoReminderApp 1

这个错误的核心是:

Type androidx.activity.ActivityViewModelLazyKt$viewModels$1 is defined multiple times

也就是说,同一个类被多个不同的 .aar.jar 文件重复定义了,具体是:

  • obj\Debug\net8.0-android\lp\111\jl\classes.jar
  • obj\Debug\net8.0-android\lp\144\jl\classes.jar

而且你提到:

Directory 'obj\Debug\net8.0-android\lp\111' is from 'androidx.activity.activity.aar'

这说明你项目中 引入了多个版本的 androidx.activity:activity,或者某个库间接引入了不同版本,导致冲突。


✅ 解决方案

✅ 方法一:强制统一版本(推荐)

在你的 .csproj 文件中,强制指定 androidx.activity:activity 的版本,排除重复引用:

<ItemGroup>
  <PackageReference Include="Xamarin.AndroidX.Activity" Version="1.8.0.1" />
  <PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.8.0.1" />
</ItemGroup>

⚠️ 注意:版本号要根据你项目实际使用的版本调整。你可以用 1.8.0.1 是目前 .NET MAUI 推荐的稳定版本之一。


✅ 方法二:手动删除重复引用

  1. 打开 .csproj 文件,检查是否有多个 androidx.activity 的引用。
  2. 删除或注释掉多余的引用。
  3. 清理并重新生成项目:
dotnet clean
dotnet build

✅ 方法三:使用 PackageReference ExcludeAssetsPrivateAssets

如果某个第三方库引入了旧版本的 androidx.activity,你可以用如下方式排除:

<PackageReference Include="Some.ThirdParty.Library" Version="1.0.0">
  <PrivateAssets>all</PrivateAssets>
  <ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>

✅ 方法四:检查 objbin 缓存

有时候是缓存问题:

dotnet clean
rmdir /s obj
rmdir /s bin
dotnet restore
dotnet build

🔍 如何确认是哪个包引入了重复版本?

你可以运行:

dotnet list package --include-transitive

或者查看 obj\project.assets.json,搜索 androidx.activity,看是哪个包引入了不同版本。


✅ 总结

步骤 操作
1 检查 .csproj 中是否重复引用了 androidx.activity
2 强制指定统一版本(推荐)
3 清理缓存并重新构建
4 检查是否有第三方库引入旧版本并排除

如果你能贴出 .csproj 文件或运行 dotnet list package --include-transitive 的输出,我可以帮你更精确地定位是哪个包引入了冲突。

出现 "Xamarin.AndroidX.Activity.Ktx/1.7.2.1": 和 "Xamarin.AndroidX.Activity/1.9.0.3":

Xamarin.AndroidX.Activity.Ktx 升级到与 Xamarin.AndroidX.Activity 相同的 1.9.0.3,即可解决类重复定义问题。

你贴出的依赖信息非常清楚地揭示了问题:

  • Xamarin.AndroidX.Activity 版本是 1.9.0.3
  • Xamarin.AndroidX.Activity.Ktx 版本是 1.7.2.1

这两个版本不兼容,Activity.Ktx 依赖的是旧版本的 Activity,导致类重复定义(ActivityViewModelLazyKt$viewModels$1 被两边都打包了)。


✅ 解决方案(一步到位)

统一版本:将 Activity.Ktx 也升级到 1.9.0.3

在你的 .csproj 中,确保这两个包版本一致:

<ItemGroup>
  <PackageReference Include="Xamarin.AndroidX.Activity" Version="1.9.0.3" />
  <PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.9.0.3" />
</ItemGroup>

⚠️ 如果你不能升级 Activity.Ktx 到 1.9.0.3

说明你可能有某个第三方库 强制依赖旧版本 Activity.Ktx。这时你可以:

✅ 强制统一版本(使用 PackageVersionOverride

在项目根目录运行:

dotnet add package Xamarin.AndroidX.Activity.Ktx --version 1.9.0.3

或者在 .csproj 中强制覆盖:

<ItemGroup>
  <PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.9.0.3" />
</ItemGroup>