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

时间:2016-08-01 04:39:36

标签: android kotlin kotlin-android-extensions

我们的Android应用程序的第二次运行,我们得到一个说

的崩溃
class="frame frameHide"

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

我们使用multidex 1.0.1。

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

相关的gradle配置:

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

跟踪:

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"
}

logcat output

4 个答案:

答案 0 :(得分:3)

你应该关闭&#39; Instant Run&#39;。 Android Studio - &gt;偏好 - &gt;构建,执行,部署 - &gt;即时运行。关掉一切。

答案 1 :(得分:1)

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

tl; dr 我必须看到您的代码是正面的,但最有可能(特别是@JvmStatic注释),您在第二次静态加载时失败了班上的。当它失败时,所有实例都将从JVM中删除,并重复该过程。

答案 2 :(得分:1)

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

有关详细信息,请参阅this issue

答案 3 :(得分:0)

尝试清理构建。可能有一些从另一个分支缓存的更改。 当我遇到同样的错误时解决了这个问题