我很难完全 在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
文件夹中。
我怀疑导致此错误:
libs
文件夹中的.jar未正确包含在Android apk中并且以某种方式搞乱了所有内容请注意这个项目在我的桌面上运行正常,所以我的源代码不是问题,只是Android特定端的问题。
任何想法导致了什么?谢谢你的帮助!
答案 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设备。