在模块中发现问题重复类 androidx.lifecycle.viewmodel

Mar*_*GGR 189 dependencies android build.gradle

当我尝试运行模拟器时出现这些错误

在模块jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)和lifecycle-viewmodel-2.4.0-runtime (androidx)中发现重复的类androidx.lifecycle.ViewModelLazy .lifecycle:lifecycle-viewmodel:2.4.0)

在模块jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)和lifecycle-viewmodel-2.4.0-runtime (androidx)中发现重复的类androidx.lifecycle.ViewModelProviderKt .lifecycle:lifecycle-viewmodel:2.4.0)

在模块 jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) 和 Lifecycle-viewmodel-2.4.0-runtime (androidx) 中发现重复的类 androidx.lifecycle.ViewTreeViewModelKt .lifecycle:lifecycle-viewmodel:2.4.0)

注意:这不是 Android 模拟器特有的问题,而是 gradle 构建的问题。

l33*_*33t 220

最有可能的是,您的依赖项之一使用kotlinviewmodel库的版本,而您的代码使用该java版本。

指定两者以强制所有依赖项使用最新版本:

def lifecycle_version = "2.4.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我没有使用 viewmodel-ktx,但看起来 viewmodel-savedstate 需要它。因此,添加 viewmodel-ktx:$lifecycle_version 后解决了问题。 (5认同)
  • 好,这将被标记为正确答案。我还有一个使用lifecycle-viewmodel 2.4.0和lifecycle-livedata 2.4.0的java模块,并且jetifier抵抗生成2.3.1并导致冲突。即使我在添加生命周期-viewmodel-ktx:2.4.0依赖项后没有在java模块中使用ktx,我的错误也消失了。 (4认同)
  • 杰出的。使用最新 kotlin(2022 年 11 月 1.7.21)的用户请注意,您的“lifecycle_version”将为“2.5.1”。除此之外,这个解决方案仍然有效。 (4认同)
  • @Jackie是的,应用程序的“build.gradle”位于“dependencies”部分。 (3认同)
  • 我应该把它放在我的项目中的什么地方?构建.gradle? (2认同)

小智 148

我遇到了同样的问题,我只添加一行代码就解决了

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么人们会赞成这个模仿的答案。首先,这个解决方案是不正确的,并且会在第三方库更新时崩溃。您应该同时指定 kotlin 和 java 版本。这样,您就可以控制要使用的“lifecycle-viewmodel”库版本。 (5认同)

A D*_*oid 47

问题:当我将appcompat依赖项更新为1.5.1.

解决方案:我将appcompat依赖项更新为1.6.1.
*更高版本也应该可以工作。

// Pick one:
// Kotlin
implementation("androidx.appcompat:appcompat:1.6.1")
// Groovy
implementation "androidx.appcompat:appcompat:1.6.1" 
Run Code Online (Sandbox Code Playgroud)

原因:这之所以有效,是因为1.6.0-beta01.

1.6.0 -beta01 发行说明的“错误修复”部分说明了以下内容:

AppCompat现在明确取决于Lifecycle 2.5.1SavedState 1.2.0。( I7e3e2 )


Ale*_*mcf 27

我认为消除重复的类比添加新的类更好,所以我将在这里发布我对此问题的解决方案:

configurations {
    all {
        exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel-ktx'
    }
}
Run Code Online (Sandbox Code Playgroud)

这些代码行需要添加到项目级别的 build.gradle 文件中 - 并且构建错误将随着浪费的内存一起消失(有点,但仍然)。

奇怪且难以理解的行为。我在将 Kotlin 库添加到项目后得到了它,后来决定用 Java 版本替换它。如果您转到 .gradle 文件夹,您可以在那里找到它,但我不确定从那里删除它是否是一个好主意,因为它可能会在其他库中使用。奇怪的是,gradle 或 AndroidStudio 并没有自动解决这个问题,因为 build.gradle 文件中只指定了 Java 的依赖项。


小智 13

对于使用 compose 的任何人,您只需添加

implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1"
Run Code Online (Sandbox Code Playgroud)


小智 9

它帮助我按照此线程中的建议将 appcompat 从 1.5.0 恢复到 1.4.2:在模块生命周期-viewmodel-2.5.0-runtime 中发现重复的类 androidx.lifecycle.ViewModelLazy

  • 或者将 appcompat 升级到 1.6.0-rc1(或更高版本),在 1.5.1 中,它对我来说还没有修复,尽管发行说明如此说明。 (2认同)

小智 8

按照 l33t 的指示,我添加了

def lifecycle_version = "2.5.1"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
Run Code Online (Sandbox Code Playgroud)

但将这些行放入错误的文件中并得到

找不到参数的方法实现()...

解决方案:确保您在 android/app/build.gradle 中添加这些依赖项,而不是 android/build.gradle 中。看这里。


Zha*_*har 7

I get the same error, any answers solved my issue. The key point is here to solve the error (preferences 1.2.0 in my project -> add exclude group).

  def preference_version = "1.2.0"
    implementation ("androidx.preference:preference:$preference_version"){
        exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel'
        exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel-ktx'
    }
Run Code Online (Sandbox Code Playgroud)

Then use 2.5.1 version for lifecycle dependencies.

def lifecycle_version = "2.5.1"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
// Lifecycles only (without ViewModel or LiveData)
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

// https://developer.android.com/jetpack/androidx/releases/lifecycle
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"
Run Code Online (Sandbox Code Playgroud)

This is working fine, i hope that it will help some people !


Car*_*son 7

虽然其中许多答案都可行,但有一种更好的方法来设置传递依赖项版本,而不是将包包含为直接依赖项。

constraints {
   implementation('androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1') {
      because 'insert explanation here'
   }
}
Run Code Online (Sandbox Code Playgroud)

这是细分https://docs.gradle.org/current/userguide/dependency_constraints.html