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.jarobj\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 推荐的稳定版本之一。
✅ 方法二:手动删除重复引用
- 打开
.csproj文件,检查是否有多个androidx.activity的引用。 - 删除或注释掉多余的引用。
- 清理并重新生成项目:
dotnet clean
dotnet build
✅ 方法三:使用 PackageReference ExcludeAssets 或 PrivateAssets
如果某个第三方库引入了旧版本的 androidx.activity,你可以用如下方式排除:
<PackageReference Include="Some.ThirdParty.Library" Version="1.0.0">
<PrivateAssets>all</PrivateAssets>
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
✅ 方法四:检查 obj 和 bin 缓存
有时候是缓存问题:
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.3Xamarin.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>