Kotlin 类 NoClassDefFoundError 崩溃

Posted

技术标签:

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

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

    自动值 匕首2 RxJava Retrolambda

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

    添加了 Kotlin 依赖项。

    将其中一个类转换为 Kt 类并移至 src/main/kotlin/..package..

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于Kotlin 类 NoClassDefFoundError 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin常用的 Kotlin 类 ② ( 枚举类 | 枚举类定义函数 | 密封类 )

Kotlin常用的 Kotlin 类 ② ( 枚举类 | 枚举类定义函数 | 密封类 )

Kotlin中级- - - Kotlin类之数据类密封类内部类.md

Kotlin中级- - - Kotlin类之数据类密封类内部类.md

[Kotlin] 内部类

kotlin内部类与嵌套类