排除 Kotlin 2 导致的 Android 构建失败
在构建 Kotlin 版本低于 2.0.0 的原生 Android app 时,识别和修复由 LevelPlay 9.6.0 中引入的 Kotlin 2 依赖项引起的 Android 构建失败。
阅读时间4 分钟最后更新于 2 天前
如果使用低于 2.0.0 的 Kotlin 版本,可能会遇到 Android 构建失败。本指南介绍如何识别和解决这些问题。
症状
将 LevelPlay SDK 依赖项项升级到 9.6.0 后,Android 构建 Kotlin 编译期间会失败。Android Studio 中的构建输出面板将失败的任务显示为(例如),Gradle 日志包含类似于以下内容的节选:
:app:compile<Variant>Kotlin:app:compileDebugKotlin> 任务:app:compileDebugKotlin FAILED e:在依赖关系中找到不兼容的类。将它们从 类路径或使用“-Xskip-metadata-version-check”抑制错误 e: file:///.../transformed/jetified-kotlin-stdlib-2.1.21.jar!/META-INF/kotlin-stdlib.kotlin_module 模块是使用不兼容的 Kotlin 版本编译的。二进制文件 其元数据的版本为 2.1.0,预期版本为 1.8.0。 e:文件:///.../src/main/java/.../<YourFile>.kt:NN:NN 类“kotlin.Unit”为 使用不兼容的 Kotlin 版本进行编译。实际元数据 版本为 2.1.0,但编译器版本 1.8.0 可以读取版本 到 1.9.0。
要在应用修复之前进行确认,可以检查已解析的 Kotlin stdlib 版本:
./gradlew :app:dependencies | grep kotlin-stdlib
如果在项目的 Kotlin Gradle 插件处于 1.x 时在图表中看到,本指南适用于您。
kotlin-stdlib:2.x.x原因
Android 构建失败可能出于以下原因:
- LevelPlay SDK 9.6.0(及其某些网络适配器)对 Kotlin 2.x 标准库(目前为 )有依赖项。
kotlin-stdlib-2.1.21 - 为项目定义的 Kotlin 版本低于 2.0 将与使用 Kotlin 2.x 的 LevelPlay SDK 9.6.0 不兼容。
解决方案
要解决此问题,请将项目使用的 Kotlin Gradle Plugin (KGP) 版本升级到 2.0.0 或更高版本。建议目标为 2.1.21,即 LevelPlay 9.6.0 版本本身,因此项目的 stdlib 与 SDK 的 stdlib 匹配。
升级要求
升级到 Kotlin 2.0 或更高版本可能需要更新或配置相关的工具链版本,如下所示:
- 运行 Kotlin 2.0 或更高版本编译器需要 JDK 17。要在 Android Studio 中设置 JDK 17,请在项目中转到 设置 > 构建、执行、部署 > 构建工具 > Gradle > Gradle JDK。
- KSP(如果使用)与 Kotlin 版本绑定。将 升级到与您的 Kotlin 版本匹配的版本。
com.google.devtools.ksp - Jetpack Compose(如果使用)需要从 Kotlin 2.0 开始的 Compose 编译器 Gradle 插件。旧版设置不再适用。
composeOptions.kotlinCompilerExtensionVersion - 升级 Kotlin 也可能会在 K2 编译器下您自己的代码中显示弃用警告或更改。请参阅 Kotlin 2.0.0 新增发布说明以了解更多信息。
source-incompatible
验证分辨率
- 在 Android Studio 中,运行文件 > Sync Project with Gradle Files,构建 > 重新构建项目。
- 通过检查确认构建已修复:
a.Gradle 输出以消息结束,
BUILD SUCCESSFUL完成时没有错误。 b.在依赖关系消息中找到的不兼容类不再出现在构建日志中。:app:compile<Variant>Kotlin
如果报错仍然存在,请尝试以下操作:
- 使用更新的 Kotlin 版本确认中的 Kotlin 依赖关系。
build.gradle - 先运行 ,然后运行
./gradlew --stop,然后重新构建,从而清除 Gradle 缓存。或者,在 Android Studio 中,使用文件 > Invalidate Caches…,然后重新构建。rm -rf ~/.gradle/caches/transforms-3/