【问题标题】:Kotlin class NoClassDefFoundError crashKotlin 类 NoClassDefFoundError 崩溃
【发布时间】:2017-02-01 14:04:47
【问题描述】:

我有一个使用以下库的现有 Android 项目:

  1. 自动值
  2. 匕首2
  3. RxJava
  4. Retrolambda

我正在尝试添加 Kotlin 支持,以便我可以将项目慢慢迁移到 Kotlin。 这是我所做的。

  1. 添加了 Kotlin 依赖项。
  2. 将其中一个类转换为 Kt 类并移至 src/main/kotlin/..package..

  3. 在源代码集中添加了 kotlin。 源集{ main.java.srcDirs += 'src/main/kotlin' }

  4. 当我进行干净的构建和部署应用程序时,我得到 NoClassDefFoundError 异常。但是,如果我再次部署它就可以了。 有什么建议?我转换的类中没有任何注释,所以我没有应用kapt 插件。

注意:我使用的是最新的 kotlin 1.0.4。我也禁用了即时运行。

【问题讨论】:

  • 您可能希望将此报告给the Kotlin issue tracker,因为它看起来更像是需要分类并可能报告为错误的东西。
  • 您是否在新的 .kt 文件中使用任何生成的类?可能在 kotlin 编译的时候这个类不存在。

标签: android kotlin kotlin-extension


【解决方案1】:

转到Files > Settings 并完全关闭Instant Run,我的意思是应该取消选中所有复选框。

清理并重建项目。

那么它应该可以工作

编辑:正如您所说,Instant 已禁用 - 如果您未使用最新版本,请使用 protip 检查您的配置并更新 Gradle 和 Android Studio。

根据issue,将 Gradle 插件版本从 2.10 更改为 2.14.1 可能会有所帮助。

提示: 使用组合 Ctrl+Shift+A 查找类似

的命令
  • Configure Kotlin in Project

  • Configure Kotlin Updates

  • Convert Java File to Kotlin

【讨论】:

  • 是的,我已经完全禁用了即时运行,并且正在使用带有 gradle 2.14.1 的构建工具版本 2.2.0 运行 AS 2.2。
  • 将构建工具更改为 24.0.3
  • 在使用更新插件后,此问题已得到解决。此外,当这种情况发生时,我只需要清理工作区。
【解决方案2】:

首先你需要用kotlin配置你的android studio,为此需要在android studio中添加kotlin插件,然后需要添加依赖然后将java类转换为kotlin请看这个视频。

https://www.youtube.com/watch?v=DN2EDdycZ3c

【讨论】:

    【解决方案3】:

    当从 Java 调用 Kotlin 类时,使用 kt 后缀。

    否则,如果您必须在 Java 中使用您希望使用的任何自定义名称调用它,则在 Kotlin 类中的包之前添加 @file:JvmName("Utils"),例如在这种情况下为 Utils

    more details can be found here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      相关资源
      最近更新 更多