java.lang.ClassNotFoundException:未在路径中找到类“com.my.app.example.Main”:DexPathList
我很难在adb上导致这个错误,因为我正在使用Kotlin , TornadoFX ( 一个JavaFX Kotlin库 )和Gluon与JFXMobile 。 当我使用胶子的androidInstall
来建立我的项目,我遇到了这个错误,以及一个黑屏:
java.lang.ClassNotFoundException: Didn't find class "com.my.app.example.Main" on path: DexPathList
我试图在这个应用程序中使用JavaFX 3D,但我不认为这是导致错误。
我检查了我的Android Manifest,包名与我的项目相同。
我的项目层次结构如下所示:
root libs src android ios main kotlin com.my.app.example Main.kt
这可能是导致Android无法找到该文件? 由于没有Java文件夹。
我在我的gradle文件中有以下所有内容,已成功编译:
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') }
fileTree(dir: 'libs', include: '*.jar')
是用于一个外部库,我正在使用它来导入ObjModels for JavaFX,位于我的项目的libs
文件夹中。
我怀疑造成这个错误的事情:
- 我的Gradle文件中没有正确的东西,因为我对Gradle很糟糕。
- 我的
libs
文件夹中的.jar文件没有被正确地包含在Android apk中,并以某种方式搞砸了它 - Kotlin文件层次结构让Android无法找到Main类,或者是Main.ct而不是Main.java
请注意 ,这个项目在我的桌面上运行良好,所以这不是我的源代码的问题,只是在Android特定的一端。
任何想法是什么造成这个? 感谢您的帮助!
这是一个非常简单的使用Kotlin的Gluon Mobile项目示例,可以部署到Android / iOS。
使用IntelliJ的Gluon插件,创建一个项目(Single View),并修改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.**.*' ] } }
删除/src/main/java
包,并添加/src/main/kotlin
之一。
Main.kt
类位于/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 }) } }
您可以在桌面上运行该项目,而无需修改AndroidManifest文件,使用androidInstall
任务将其部署到Android设备。