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

Posted

技术标签:

【中文标题】在模块中发现问题重复类 androidx.lifecycle.viewmodel【英文标题】:Problem duplicate class androidx.lifecycle.viewmodel found in modules 【发布时间】:2021-12-17 10:10:25 【问题描述】:

我在尝试运行模拟器时遇到这些错误

在模块 jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) 和生命周期-viewmodel-2.4.0- 中发现重复的类 androidx.lifecycle.ViewModelLazy运行时(androidx.lifecycle:lifecycle-viewmodel:2.4.0)

在模块 jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) 和生命周期-viewmodel-2.4.0- 中发现重复的类 androidx.lifecycle.ViewModelProviderKt运行时(androidx.lifecycle:lifecycle-viewmodel:2.4.0)

在模块 jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) 和生命周期-viewmodel-2.4.0- 中发现重复的类 androidx.lifecycle.ViewTreeViewModelKt运行时(androidx.lifecycle:lifecycle-viewmodel:2.4.0)

【问题讨论】:

也许这个解决方案对你有用answer on *** 我也面临 gradle build 的这个问题。这不是特定于 android 模拟器 【参考方案1】:

很可能,您的一个依赖项使用 kotlin 版本的 viewmodel 库,而您的代码使用 java 版本。

同时指定以对所有依赖项强制执行最新版本:

def lifecycle_version = "2.4.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"

【讨论】:

谢谢,我没有使用 viewmodel-ktx,但看起来 viewmodel-savedstate 需要它。所以添加后 viewmodel-ktx:$lifecycle_version 解决了这个问题。 好一个,这将被标记为正确答案。我还有一个使用生命周期视图模型 2.4.0 和生命周期实时数据 2.4.0 的 java 模块,并且 jetifier 抵抗生成 2.3.1 并导致冲突。即使我在添加了生命周期视图模型-ktx:2.4.0 依赖项后没有在 java 模块中使用 ktx,我的错误也发生了。【参考方案2】:

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

configurations 
    all 
        exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel-ktx'
    

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

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

【讨论】:

你指的是什么“内存”?个人电脑还是安卓设备?据我所见,生成的 APK 中没有额外的膨胀(可能是 R8 的结果)。 我说的是生成的apk @l33t 正好 - 12 870 436 字节与 13 102 070 字节。正如我已经说过的 - 有点,但仍然 我进行了一些测试。通过所有优化(例如,使用 R8 发布 + 缩小),删除 lifecycle-viewmodel-ktx 会减少 小于 1 kB 的大小。 R8 很可能能够摆脱 99% 的臃肿,留下一两个额外的类(classes.dex 不同)。您的解决方案似乎有效,但为什么缩小器不摆脱那些最后的课程?可能是R8 中的一个小故障,或者可能存在真正的第三方依赖项,在某些时候需要这些 kotlin 类。您的数字表明存在其他问题。 @l33t 我没有完全正确地解释它。为了获得提到的数字,我排除了几个我明确使用的库,但也作为依赖项存在于其他库中(但例如具有较低版本)。排除组:'org.json',模块:'json' 排除组:'androidx.lifecycle',模块:'lifecycle-viewmodel-ktx' 排除组:'androidx.lifecycle',模块:'lifecycle-viewmodel:2.3。 1'排除组:'org.apache.commons',模块:'commons-lang3'等【参考方案3】:

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

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'

【讨论】:

以上是关于在模块中发现问题重复类 androidx.lifecycle.viewmodel的主要内容,如果未能解决你的问题,请参考以下文章

在模块 jetified-okhttp-3.12.0 和 jetified-okhttp-ws-3.4.1 中发现重复的类 okhttp3.internal.ws.RealWebSocket

在启用 R8 的模块中发现重复的类

如何解决gradle build中的重复类错误?

在模块中发现重复的类 com.mapbox.android.telemetry.AlarmReceiver。 Mapbox安卓工作室

Android Studio 抱怨重复类

Flutter 构建 apk:在模块 guava-26.0-android.jar 和 listenablefuture-1.0.jar 中发现了重复的类