我们的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"
}
答案 0 :(得分:3)
你应该关闭' Instant Run'。 Android Studio - >偏好 - >构建,执行,部署 - >即时运行。关掉一切。
答案 1 :(得分:1)
java.lang.ClassNotFoundException
是调试的有趣例外。值得注意的是,它可能由于多种原因而发生。在这种情况下,由于每个其他的启动行为,它很可能由于无法初始化类而发生。如果您有静态加载的资源,本质上是单例加载,打开文件,或者在JVM中创建类时的任何“独占”资源,当它第二次初始化时,因为类已经加载到JVM ,无论您是否重新启动了应用程序。当第二个加载类的实例发生时,它与现有的实例冲突,两个实例从JVM中删除,使第三次执行运行正常。
tl; dr 我必须看到您的代码是正面的,但最有可能(特别是@JvmStatic
注释),您在第二次静态加载时失败了班上的。当它失败时,所有实例都将从JVM中删除,并重复该过程。
答案 2 :(得分:1)
我找到的唯一解决方法是设置android.compileOptions.incremental = false
有关详细信息,请参阅this issue。
答案 3 :(得分:0)
尝试清理构建。可能有一些从另一个分支缓存的更改。 当我遇到同样的错误时解决了这个问题