Android Kotlin:java.lang.NoClassDefFoundError:<KotlinObject>的解析失败

我们的Android应用程序的每一秒运行,我们得到一个崩溃说

java.lang.NoClassDefFoundError: Failed resolution of: Lin/blahapp/xxx/BlahUtil 

BlahUtil是一个带有@JvmStatic标注的kotlin对象。 我从Android应用程序的其余部分(All in java)调用这些静态方法。

我们使用multidex 1.0.1。

我在android studio 2.1.2上,使用JDK 7。

相关的gradle配置:

 compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { minSdkVersion 16 targetSdkVersion 23 } dexOptions { incremental true dexInProcess true javaMaxHeapSize "10g" preDexLibraries true } buildscript { ext.kotlin_version = '1.0.3' dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'kotlin-android' dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" } 

跟踪:

 at in.blahapp.xxx.OurActivity at android.app.Activity.performCreate(Activity.java:6251) at ndroid.app.Instrumentation.callActivityOnCreate at android.app.ActivityThread.performLaunchActivity at android.app.ActivityThread.handleLaunchActivity at android.app.ActivityThread.-wrap11 at android.app.ActivityThread$H.handleMessage at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.ClassNotFoundException: Didn't find class "in.blahapp.xxx.BlahUtil" on path: DexPathList[[dex file .... 

logcat输出

您应该关闭“即时运行”。 Android Studio – >首选项 – >生成,执行,部署 – >即时运行。 关掉一切。

java.lang.ClassNotFoundException是一个有趣的例外调试。 值得注意的是,因为它可以出于任何原因。 在这种情况下,由于其他的发射行为,最有可能是由于无法初始化类而发生。 如果您具有静态加载的资源,在本质上是单例加载的,则在JVM中创建类时打开文件或任何“独占”资源,当它第二次初始化时,因为该类已加载到JVM中 ,无论您是否重新启动应用程序。 当加载类的第二个实例发生时,它与现有的冲突,并从JVM中删除这两个实例 ,使第三次执行运行得很好。

我不得不看你的代码是积极的,但它是最有可能的(尤其是与@JvmStatic注释),你失败的第二个静态加载类。 失败时,所有实例都将从JVM中删除,并重复该过程。

我发现唯一的解决方法是设置android.compileOptions.incremental = false

详情请参阅此问题 。