【问题标题】:Kotlin compatibility with JavaFXPortsKotlin 与 JavaFXPorts 的兼容性
【发布时间】:2020-05-26 14:56:45
【问题描述】:

我想用JavaFXPorts 和 Kotlin 代码构建一个 JavaFX And​​roid 应用程序。是否可以在 JavaFXPorts 项目中使用 Kotlin?这是我的示例 Gradle(版本 5.6.4)项目:

注意:此代码的问题在于 Kotlin 运行时...有没有办法将所有内容捆绑在可执行 Jar 和 Apk 中?

.
├── app
│   ├── src
│   │   ├── android
│   │   │   └── AndroidManifest.xml
│   │   └── main
│   │       └── kotlin
│   │           └── com.example
│   │               └── App.kt
│   └── build.gradle.kts
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── build.gradle.kts
├── gradlew
├── gradlew.bat
└── settings.gradle.kts

./settings.gradle.kts

pluginManagement {
    repositories {
        gradlePluginPortal()
        jcenter()
    }
    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == "org.javafxports.jfxmobile") {
                useModule("org.javafxports:jfxmobile-plugin:${requested.version}")
            }
        }
    }
}

rootProject.name = "app"
include(":app")

./build.gradle.kts

plugins {
    kotlin("jvm") version "1.3.61" apply false
    id("org.javafxports.jfxmobile") version "1.3.18" apply false
}

allprojects {
    repositories {
        jcenter()
    }
}

./app/build.gradle.kts

plugins {
    kotlin("jvm")
    id("org.javafxports.jfxmobile")
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
}

application {
    mainClassName = "com.example.App"
}

jfxmobile {
    android {
        manifest = "src/android/AndroidManifest.xml"
        applicationPackage = application.mainClassName
        buildToolsVersion = "29.0.2"
        compileSdkVersion = "28"
        targetSdkVersion = "28"
        minSdkVersion = "19"
    }
}

./app/src/android/AndroidManifest.xml

<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example" android:versionCode="1" android:versionName="1.0">
    <supports-screens android:xlargeScreens="true"/>
    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="28" android:maxSdkVersion="28"/>
    <application android:label="App" android:name="android.support.multidex.MultiDexApplication">
        <activity android:label="App" android:name="javafxports.android.FXActivity" android:configChanges="orientation|screenSize">
            <meta-data android:name="main.class" android:value="com.example.App"/>
            <meta-data android:name="debug.port" android:value="0"/>
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

./app/src/main/kotlin/com/example/App.kt

@file:JvmName("App")
package com.example

import javafx.application.Application
import javafx.geometry.Rectangle2D
import javafx.scene.Scene
import javafx.scene.control.Label
import javafx.scene.layout.StackPane
import javafx.stage.Screen
import javafx.stage.Stage

class App : Application() {
    override fun start(primaryStage: Stage?) {
        val content = Label("Hello")
        val root = StackPane(content)
        val bounds: Rectangle2D = Screen.getPrimary().visualBounds
        val scene = Scene(root, bounds.width, bounds.height)
        primaryStage?.scene = scene
        primaryStage?.show()
    }
}

【问题讨论】:

  • 什么有效,什么无效?如果您可以添加项目的压缩包,我可以看看。
  • 供参考:JavaFXPorts.

标签: android gradle kotlin javafx-8 javafxports


【解决方案1】:

你可以,但你可能会在此过程中遇到一些痛苦,我的建议是使用 TornadoFx,它是基于 JavaFx 构建的 Kotlin UI 框架。而且真的很不错

这里是integration guide

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2013-01-22
    • 2018-11-09
    • 2016-11-03
    • 2012-10-12
    • 2018-03-17
    相关资源
    最近更新 更多