Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android Kotlin: java.lang.NoClassDefFoundError: Resolución fallida de: <KotlinObject>

Cada segundo recorrido de nuestra aplicación android, tenemos un accidente que dice

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

BlahUtil es un objeto kotlin con anotaciones @JvmStatic. Llamo a estos métodos estáticos del resto de la aplicación android (Todo en java).

Utilizamos multidex 1.0.1.

Estoy en android studio 2.1.2, usando JDK 7.

Configuraciones relevantes de 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" } 

Rastro:

 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 .... 

Salida logcat

  • Edición de Kotlin Gradle
  • Prueba de unidad en la función de extensión de Kotlin en las clases de SDK de Android
  • Extensiones y fragmentos de Android de Kotlin
  • Advertencia de tiempo de ejecución de Kotlin desactualizada (plugin Kotlin 1.1.2-release-Studio2.3-3)
  • Extensiones de Kotlin Android y fragmento retenido
  • Varargs Kotlin interoperabilidad Java no funciona correctamente
  • Error: Error en la ejecución de la tarea ': app: clean'. No se puede eliminar el archivo
  • 3 Solutions collect form web for “Android Kotlin: java.lang.NoClassDefFoundError: Resolución fallida de: <KotlinObject>”

    Debe desactivar la función 'Instant Run'. Android Studio -> Preferencias -> Creación, ejecución, implementación -> Ejecución instantánea. Apaga todo.

    java.lang.ClassNotFoundException es una divertida excepción para depurar. Notablemente porque puede ocurrir de cualquier número de razones. En este caso, debido a la cada otro comportamiento de lanzamiento, lo más probable es que ocurra debido a ser incapaz de inicializar la clase. Si tiene recursos que carga de forma estática que son singleton en la naturaleza, abrir archivos o cualquier recurso "exclusivo" en la creación de clase en la JVM, cuando se va a inicializar la segunda vez, ya que la clase ya está cargada en la JVM , Independientemente de si ha reiniciado o no la aplicación. Cuando se produce la segunda instancia de carga de la clase, se produce un choque con la existente y ambas instancias se eliminan de la JVM, lo que hace que la tercera ejecución se ejecute correctamente.

    Tl; dr Yo tendría que ver su código para ser positivo, pero es más probable (especialmente con anotaciones @JvmStatic ), que está fallando en la segunda carga estática de la clase. Cuando falla, todas las instancias se eliminan de la JVM y el proceso se repite.

    La única solución que he encontrado es establecer android.compileOptions.incremental = false

    Vea este número para más detalles.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.