由于 Kryonet 中有重复的 class 定义,无法编译项目

Unable to compile a project due to duplicate class definitions in Kryonet

Caused by: com.android.dex.DexException: Multiple dex files define Lcom/esotericsoftware/reflectasm/MethodAccess;

上述错误阻止了我的 Android 项目的构建,我正在使用 Kryonet 并将其作为下面的依赖项包含在我的 build.gradle 中。

dependancies{
    implementation group: 'kryonet', name: 'kryonet', version: '2.21'
    implementation group: 'com.esotericsoftware', name: 'kryo', version: '4.0.1'

Kryo 和 Kryonet 似乎都包含这个 class,但我不知道如何解决这个问题,我不能简单地删除 Kryo,因为那样我就无法访问序列化库。

如果你 运行 gradle app:dependencies 你会注意到依赖关系树是:

+--- kryonet:kryonet:2.21
|    +--- com.esotericsoftware.reflectasm:reflectasm:1.07
|    +--- com.esotericsoftware.minlog:minlog:1.2    
|    \--- org.objenesis:objenesis:2.1 -> 2.5.1
+--- com.esotericsoftware:kryo:4.0.1
|    +--- com.esotericsoftware:reflectasm:1.11.3
|    |    \--- org.ow2.asm:asm:5.0.4
|    +--- com.esotericsoftware:minlog:1.3.0
|    \--- org.objenesis:objenesis:2.5.1

它们具有完全相同的依赖关系,但 Kyro 依赖较新的版本。 所以我会简单地删除对 kyronet

的依赖
implementation group: 'kryonet', name: 'kryonet', version: '2.21'

编辑

这应该可以解决您的问题并让您保留两个库

implementation (group: 'kryonet', name: 'kryonet', version: '2.21') {
    exclude group: 'com.esotericsoftware.reflectasm', module: 'reflectasm'
    exclude group: 'com.esotericsoftware.minlog', module: 'minlog'
}
implementation group: 'com.esotericsoftware', name: 'kryo', version: '4.0.1'