You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin项目引入Assimp库遭遇重复类错误求助

问题描述

我正在用Kotlin开发一款Android应用,核心功能是读取PLY文件并通过OpenGL进行渲染。为解决模型文件读取问题,我尝试了Assimp库的多种集成方案:

  • 从源码构建时遇到JNI绑定相关问题,无法正常集成;
  • 使用MavenCentral上的Assimp相关包,要么功能不全,要么运行时出现随机异常;
  • 最终选择了kotlin-graphics/assimp仓库的JAR包尝试,将其放入项目libs目录后,在build.gradle.kts中添加了如下依赖:
implementation(files("libs/assimp.jar"))

使用的是该仓库v4.0版本的assimp-all.jar。

遇到的错误

集成后编译时出现大量重复类错误,示例如下:

Duplicate class kotlin.ArrayIntrinsicsKt found in modules assimp.jar -> assimp (assimp.jar) and kotlin-stdlib-1.9.0.jar -> kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0)
Duplicate class kotlin.Deprecated found in modules assimp.jar -> assimp (assimp.jar) and kotlin-stdlib-1.9.0.jar -> kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0)
Duplicate class kotlin.DeprecationLevel found in modules assimp.jar -> assimp (assimp.jar) and kotlin-stdlib-1.9.0.jar -> kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0)
Duplicate class kotlin.DslMarker found in modules assimp.jar -> assimp (assimp.jar) and kotlin-stdlib-1.9.0.jar -> kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0)
Duplicate class kotlin.ExceptionsKt found in modules assimp.jar -> assimp (assimp.jar) and kotlin-stdlib-1.9.0.jar -> kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0)
Duplicate class kotlin.ExceptionsKt__ExceptionsKt found in modules assimp.jar -> assimp (assimp.jar) and kotlin-stdlib-1.9.0.jar -> kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0)
Duplicate class kotlin.ExtensionFunctionType found in modules assimp.jar -> assimp (assimp.jar) and kotlin-stdlib-1.9.0.jar -> kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0)
Duplicate class kotlin.Function found in modules assimp.jar -> assimp (assimp.jar) and kotlin-stdlib-1.9.0.jar -> kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0)
Duplicate class kotlin.InitializedLazyImpl found in modules assimp.jar -> assimp (assimp.jar) and kotlin-stdlib-1.9.0.jar -> kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0)
解决方案

方法1:使用Gradle依赖并排除冲突的Kotlin标准库

如果可以通过Maven依赖引入该库,建议替换本地JAR依赖为如下配置,直接排除JAR中打包的Kotlin标准库:

implementation("com.github.kotlin-graphics:assimp:4.0") {
    exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")
}

这样既能引入Assimp功能,又不会和项目自带的kotlin-stdlib产生冲突。

方法2:通过ProGuard规则排除重复类

如果必须使用本地JAR包,可在proguard-rules.pro中添加以下规则,排除冲突的Kotlin标准库类,同时保留Assimp相关类:

# 忽略Kotlin标准库类的警告
-dontwarn kotlin.**
# 保留Assimp核心类
-keep class com.github.kotlin_graphics.assimp.** { *; }
-keep class ai.** { *; }
# 排除冲突的Kotlin标准库类(可根据错误信息补充更多类)
-dontkeep kotlin.ArrayIntrinsicsKt
-dontkeep kotlin.Deprecated
-dontkeep kotlin.DeprecationLevel
-dontkeep kotlin.DslMarker
-dontkeep kotlin.ExceptionsKt
-dontkeep kotlin.ExceptionsKt__ExceptionsKt
-dontkeep kotlin.ExtensionFunctionType
-dontkeep kotlin.Function
-dontkeep kotlin.InitializedLazyImpl

添加规则后,确保在build.gradle.kts中启用了ProGuard(通常在release构建中默认启用,debug构建可手动开启)。

内容的提问来源于stack exchange,提问作者juliano.net

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:47:35