java.lang.ClassNotFoundException:没找到类" com.my.app.example.Main"在路径上:DexPathList

时间:2017-11-01 04:34:56

标签: android javafx kotlin gluon-mobile tornadofx

我很难完全 在adb上导致此错误,因为我正在使用 Kotlin TornadoFX (< em>一个JavaFX Kotlin库)和 Gluon JFXMobile 。当我使用Gluon的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文件夹中。

我怀疑导致此错误:

  1. 我的Gradle文件中没有正确的内容,因为我对Gradle很糟糕。
  2. 我的libs文件夹中的.jar未正确包含在Android apk中并且以某种方式搞乱了所有内容
  3. Kotlin文件层次结构以某种方式使Android无法找到Main类,或者它的Main.kt而不是Main.java
  4. 请注意这个项目在我的桌面上运行正常,所以我的源代码不是问题,只是Android特定端的问题。

    任何想法导致了什么?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这是与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设备。