2016-08-01 66 views
11

我們的Android應用程序的每一個第二輪,我們得到了說的Android科特林:java.lang.NoClassDefFoundError:失敗的分辨率:<KotlinObject>

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

BlahUtil崩潰是在@JvmStatic註釋的科特林對象它。我從Android應用程序的其餘部分調用這些靜態方法(All in java)。

我們使用multidex 1.0.1。

我在Android 2.1.2工作室使用JDK 7

相關gradle這個CONFIGS:

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 output

+0

這是否始終發生,或者僅在每一次構建中(或者在另一種變體中,僅在第一次構建時)? – AndroidEx

+0

通常在第一次運行之後就不會發生乾淨的構建。當我進行一些更改並再次運行時,在第二次運行時崩潰。第三次運行。如果我再次進行更改,則會在下一次運行時崩潰。然後在運行之後運行......等等。 – letronje

+3

這聽起來很像[這個bug](https://youtrack.jetbrains.com/issue/KT-10733)。我在第一次清理編譯時沒有找到(=刪除)Kotlin類,但在第二個增量構建中出現了另一個此bug的變體。它也在google tracker上討論過,結果是我們必須等待android gradle插件2.3的發佈。這個問題阻止了我將Kotlin介紹給我的團隊,不幸的是,我沒有任何建議與您分享。 – AndroidEx

回答

1

java.lang.ClassNotFoundException樂趣例外d ebug。值得注意的是,因爲它可能出於任何原因。在這種情況下,由於所有其他發射行爲,這很可能是由於無法初始化該類而發生的。如果您具有靜態加載的單身資源,在JVM中創建類時打開文件或任何「獨佔」資源,當它第二次初始化時,因爲已將類加載到JVM中,該類爲無論您是否重新啓動應用程序,都可以使用該功能。當加載類的第二個實例發生時,它會與現有類衝突,並且的兩個實例都從JVM中移除,從而使第三次執行運行得很好。

TL;博士我得看看你的代碼是積極的,但它是最有可能(尤其是@JvmStatic註釋),那你就失敗了全班第二靜載荷。當它失敗時,所有實例都將從JVM中移除並重復該過程。

4

您應該關閉「即時運行」。 Android Studio - >首選項 - >生成,執行,部署 - >即時運行。關掉一切。

+5

似乎不適合我。我沒有選中所有的複選框,我仍然得到這些錯誤。 – letronje

+1

即使從命令行運行,也會發生此錯誤。不一定與即時運行相關... –

0

我發現的唯一的解決方法是設置android.compileOptions.incremental = false

詳見this issue