在模块中发现问题重复类 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
在模块中发现重复的类 com.mapbox.android.telemetry.AlarmReceiver。 Mapbox安卓工作室
Flutter 构建 apk:在模块 guava-26.0-android.jar 和 listenablefuture-1.0.jar 中发现了重复的类