【问题标题】:Upgrade from Kotlin 1.3.31 -> 1.3.40 breaks Android build从 Kotlin 1.3.31 升级 -> 1.3.40 会破坏 Android 构建
【发布时间】:2019-06-22 18:34:08
【问题描述】:

如果我尝试在我的 Gradle 项目中升级到最新的 Kotlin 版本,我会在构建我的 Android 子项目时收到以下错误:

e: /(redacted)/AndroidLauncher.kt: (8, 15): Cannot access built-in declaration 'kotlin.Unit'. Ensure that you have a dependency on the Kotlin standard library

降级回 1.3.31 构建良好。我还尝试将我的 com.android.tools.build 版本从 3.4.0 -> 3.4.1 升级,但没有区别。

这个错误很清楚地表明在查找 Kotlin STL 时存在问题。我需要添加一些新的依赖项或需要应用的插件吗?

【问题讨论】:

  • 确保对所有内容使用相同的 Kotlin 版本,包括顶级 build.gradle 文件中的 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 条目和 dependencies 闭包中的 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 条目应用程序的模块。 org.jetbrains.kotlin 工件组中的任何其他内容可能也应该获得相同的版本。
  • 我在gradle.properties 中只定义了一次kotlinVersion,然后我在其他地方重复使用。
  • Hmmmm...我唯一的其他建议是执行标准的“在紧急情况下,打破玻璃”的 Android Studio 修复:清理项目(构建 > 清理项目)并使缓存无效(文件 > 使缓存无效并重新启动)。
  • 我没有使用 Android Studio,这是从终端直接构建的 gradle。我确实尝试了一个干净的构建,手动清除了我所有的构建目录,甚至破坏了我的本地 maven 存储库。同样的错误。
  • 您的所有模块实际上都依赖于 Kotlin 标准库吗?看起来此消息仅在不是这种情况时显示:github.com/JetBrains/kotlin/commit/… ./gradlew dependencies 说什么?也请向kotl.in/issue 提交一个问题,并附上一个示例项目来重现。谢谢。

标签: android gradle kotlin


【解决方案1】:

此行为是最近修复的问题https://youtrack.jetbrains.com/issue/KT-19227 的结果。以前,当编译的模块不依赖 Kotlin 标准库时,一些内置声明(如 kotlin.Unit)会从编译器内部加载。目前这种情况会导致构建失败,这是一种不太令人惊讶的行为。

要使您的项目再次编译,请在您的 android 子项目中添加 implementation(kotlin("stdlib")) 依赖项。

【讨论】:

    【解决方案2】:

    我不知道它是否对某人有帮助,我有类似的问题,但从 1.3.40 到 1.3.61(不是从 1.3.31 到 1.3.40);在我的情况下,使用 Android Studio 可以解决这个问题:

    • 在 Project build.gradle 中,我离开了 kotlin 版本 1.3.61 并将 gradle:3.5.0 而不是 3.6.1 不起作用。标题中有错误:

      
      buildscript {
          ext.kotlin_version = '1.3.61'
          ...
          dependencies {
               classpath 'com.android.tools.build:gradle:3.5.0'
               ...
          }
      
    • 在模块 build.gradle 我放了应用插件:'kotlin-android' 在应用插件之前:'kotlin-android-extensions'

    希望它也适用于其他人。

    【讨论】:

    • 不过,这与我的问题中的 Kotlin 版本不同。 (另外,我不想降级其他组件来修复这个,但感谢您的意见。)
    • 你是对的,现在我在回答中添加了更好的细节。我放在这里只是为了报告我的经验,以防它对某人有所帮助(......当它再次发生时,我也会作为我自己的备忘录,我会忘记我自己的解决方法!:D)
    猜你喜欢
    • 2021-10-13
    • 2012-04-01
    • 1970-01-01
    • 2021-10-23
    • 2020-10-04
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多