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