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).
- Prueba de unidad en la función de extensión de Kotlin en las clases de SDK de Android
- Advertencia de tiempo de ejecución de Kotlin desactualizada (plugin Kotlin 1.1.2-release-Studio2.3-3)
- Varargs Kotlin interoperabilidad Java no funciona correctamente
- Extensiones y fragmentos de Android de Kotlin
- Problemas al intentar generar aplicaciones de Kotlin con Android Studio
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
- Error: Error en la ejecución de la tarea ': app: clean'. No se puede eliminar el archivo
- Extensiones de Kotlin Android y fragmento retenido
- Diseño sintético y personalizado de Kotlin en DialogFragment
- No se pueden resolver los métodos de registro de Anko
- ¿Kotlin Android Extensions pone en caché las propiedades sintéticas o cada vez que llama a findViewById ()?
- Este tipo tiene un constructor y debe ser inicializado aquí - Kotlin
- Edición de Kotlin Gradle
- Cómo utilizar fragmentos con kotlin
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.
- ¿Cómo crear dinámicamente columnas en un tablelayout?
- Ver el almacenamiento en caché de encabezados y pies de página en una vista de lista