java.lang.ClassNotFoundException: no encontró la class "com.my.app.example.Main" en la ruta: DexPathList

Estoy teniendo un momento difícil exactamente qué está causando este error en adb porque estoy usando Kotlin , TornadoFX ( una biblioteca JavaFX Kotlin ) y Gluon con JFXMobile . Cuando uso androidInstall 's androidInstall para build mi proyecto encuentro este error, junto con una pantalla negra:

java.lang.ClassNotFoundException: Didn't find class "com.my.app.example.Main" on path: DexPathList

Intento usar JavaFX 3D en esta aplicación, pero no creo que esté causando el error.

Revisé mi Manifiesto de Android, y el nombre del package es el mismo que mi proyecto.

Mi jerarquía de proyectos es así:

 root libs src android ios main kotlin com.my.app.example Main.kt 

¿Qué podría estar causando que Android no pueda encontrar el file? Dado que no hay una carpeta Java.

Tengo todo lo siguiente en mi file gradle, comstackdo con éxito:

 apply plugin: 'kotlin' apply plugin: 'idea' apply plugin: 'java' apply plugin: 'javafx-gradle-plugin' apply plugin: 'org.javafxports.jfxmobile' apply plugin: 'org.jetbrains.kotlin.android.extensions' dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" compile 'no.tornado:tornadofx:1.7.12' compile 'no.tornado:tornadofx-android-compat:1.0.1' compile 'com.gluonhq:charm:4.3.7' compile fileTree(dir: 'libs', include: '*.jar') } 

El fileTree(dir: 'libs', include: '*.jar') es para una biblioteca externa que estoy usando para importar ObjModels for JavaFX, ubicado en la carpeta libs de mi proyecto.

Cosas de las que sospecho que estoy causando este error:

  1. Yo no tengo las cosas correctas en mi file Gradle porque soy terrible con Gradle.
  2. El .jar en mi carpeta libs no está incluido correctamente en la aplicación Android y lo estropea todo de alguna manera
  3. La jerarquía de files Kotlin de alguna manera hace que Android no pueda encontrar la class Principal, o el hecho de que es Main.kt en lugar de Main.java

Tenga en count que este proyecto funciona bien en mi escritorio, por lo que no es un problema con mi código fuente, solo algo en el extremo específico de Android.

¿Alguna idea de lo que está causando esto? ¡Gracias por cualquier ayuda!

Esta es una muestra muy simple de un proyecto de Gluon Mobile que trabaja con Kotlin y que puede implementarse en Android / iOS.

Usando el plugin Gluon para IntelliJ, creé un proyecto (Vista única) y modifiqué el file build.gradle:

build.gradle

 buildscript { ext.kotlin_version = '1.1.51' repositories { mavenCentral() jcenter() } dependencies { classpath 'org.javafxports:jfxmobile-plugin:1.3.9' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'kotlin' apply plugin: 'idea' apply plugin: 'java' apply plugin: 'org.javafxports.jfxmobile' apply plugin: 'org.jetbrains.kotlin.android.extensions' repositories { jcenter() mavenCentral() maven { url 'http://nexus.gluonhq.com/nexus/content/repositories/releases' } } mainClassName = 'com.gluon.kotlin.Main' dependencies { compile 'com.gluonhq:charm:4.4.1' compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" compile 'no.tornado:tornadofx:1.7.12' compile 'no.tornado:tornadofx-android-compat:1.0.1' } jfxmobile { downConfig { version = '3.6.0' plugins 'display', 'lifecycle', 'statusbar', 'storage' } android { manifest = 'src/android/AndroidManifest.xml' } ios { infoPList = file('src/ios/Default-Info.plist') forceLinkClasses = [ 'com.gluonhq.**.*', 'javax.annotations.**.*', 'javax.inject.**.*', 'javax.json.**.*', 'org.glassfish.json.**.*' ] } } 

Elimine el package /src/main/java y agregue el /src/main/kotlin uno.

La class Main.kt está en /src/main/kotlin/com/gluon/kotlin/Main.kt :

Main.kt

 package com.gluon.kotlin import com.gluonhq.charm.glisten.application.MobileApplication import com.gluonhq.charm.glisten.mvc.View import com.gluonhq.charm.glisten.visual.MaterialDesignIcon import javafx.geometry.Pos import javafx.scene.control.Button import javafx.scene.control.Label import javafx.scene.layout.VBox import tornadofx.plusAssign class Main: MobileApplication() { override fun init() { addViewFactory(MobileApplication.HOME_VIEW, { val view = View("home") val vBox = VBox() with (vBox) { alignment = Pos.CENTER spacing = 30.0 this += Button("Kotlin", MaterialDesignIcon.CODE.graphic()).apply { println("Click") } this += Label("Gluon Mobile - Kotlin") } with(view) { this.center = vBox this.setOnShown { with(MobileApplication.getInstance().appBar) { this.navIcon = MaterialDesignIcon.MENU.button().apply { println("Click") } this.titleText = "Gluon Mobile - Kotlin" } } } view }) } } 

Puede ejecutar el proyecto en el escritorio y, sin modificar el file AndroidManifest, implementar en un dispositivo Android utilizando la tarea androidInstall .

  • TornadoFX ¿Cómo crear MDI con una list de models de windows hijas?
  • Tornadofx - controlando el object de la fila de la vista de tabla mientras construye
  • En TornadoFX, ¿cómo puedo separar layouts en diferentes classs y luego usarlos en el generador?
  • Tornadofx tableview sincroniza dos tablas
  • TornadoFX: permite copyr un elemento de una vista de list al portapapeles
  • Context de reinicio de JavaFX
  • ¿Cómo llenar el ancho de la tabla disponible con columnas?
  • TornadoFX: el text de la label no se actualiza
  • Cómo crear una pantalla de inicio en tornadofx
  • Enlace de un model de dominio con campos anulables en ItemViewModel
  • Tornadofx - Cómo pasar el parámetro a Fragment en cada instancia