我尝试在 Android 上运行一个简单的 JavaFX 应用程序。因此,我使用 gradle 阅读了javafxports 入门指南来构建应用程序,但我被困在了某个地方。我可以使用installDebugEclipse 中的 gradle 任务在 Android 设备上构建和安装该应用程序,但是,当我启动该应用程序时出现黑屏。当我提取.apk文件时,它不包含 JavaFX 应用程序的 jar 文件。我假设 apk 应该包含 JavaFX 应用程序 jar 文件,但我不知道如何将它包含到.apk.
我还尝试使用 gradle 来构建 JavaFX 应用程序本身(jar 文件),效果很好。但是,我不知道将这个 jar 文件放在哪里,它可以包含在 apk 文件中。我读到我必须把它放到一个dist目录中,但我认为这只会在 Netbeans 中使用,对吧?我正在使用 Eclipse gradle 集成来构建项目。
这是我尝试过的。由于 JavaFX 应用程序与 HelloWorld 示例应用程序一样简单,并且工作起来很吸引人,因此我预计我的 gradle 构建文件中存在配置错误。
build.gradle - 构建 apk
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'android'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:2.5.0'
classpath 'com.android.tools.build:gradle:1.0.1'
}
}
repositories {
jcenter()
}
ext {
dalvikSdkHome = getProjectProperty('dalvikSDK')
dalvikSdkLib = dalvikSdkHome + '/rt/lib'
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
dexOptions {
preDexLibraries = false
}
sourceSets {
main {
jniLibs.srcDir file("${dalvikSdkLib}/")
assets.srcDirs = ['assets']
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile files ("${dalvikSdkLib}/ext/jfxrt.jar",
"${dalvikSdkLib}/ext/jfxdvk.jar",
"${dalvikSdkLib}/ext/compat-1.0.0.jar")
}
project.tasks.withType(com.android.build.gradle.tasks.Dex) {
additionalParameters=['--core-library']
}
String getProjectProperty(String propertyName) {
project.hasProperty(propertyName) ? project.property(propertyName) : null
}
build.gradle - 构建 jar
// Declares binary plugin and its required JavaFX classpath
apply from: "http://dl.bintray.com/content/shemnon/javafx-gradle/0.4.0/javafx.plugin"
// Configures plugin
javafx {
// Points to JDK and its JavaFX libraries, also declares target runtime JDK
javaRuntime = getProjectProperty('javaJDKPath')
// Application name and ID presented by target OS
appID 'HelloWorldApp'
appName 'Hello World Application'
// Main class of application
mainClass 'helloworld.HelloWorld'
// JVM arguments, system properties, application command line arguments
jvmArgs = ['-XX:+AggressiveOpts', '-XX:CompileThreshold=1']
systemProperties = ['prism.disableRegionCaching':'true']
arguments = ['-l', '--fast']
// Keystore credentials for signing JAR
// Generate key: keytool -genkey -alias release -keyalg RSA -keystore keystore.jks -keysize 2048
releaseKey {
alias = 'release'
keyStore = file(getProjectProperty('keystoreJKSFile')) // keyStore = file("${System.properties['user.home']}/keystore/keystore.jks")
keyPass = getProjectProperty('keyStorePassword')
storePass = getProjectProperty('storePassword')
}
signingMode 'release'
// ...
}
String getProjectProperty(String propertyName) {
project.hasProperty(propertyName) ? project.property(propertyName) : null
}
gradle.properties
javaJDKPath=D:/Java/jdk1.8.0_20
dalvikSDK=D:/Java/dalvik-sdk-8u20b3/dalvik-sdk
keystoreJKSFile=D:/Java/jre1.8.0_20/bin/keystore.jks
keyStorePassword=password
storePassword=password
本地属性
sdk.dir=D:/programme/Android/adt-bundle-windows-x86_64-20130917/sdk
这是我的项目结构
HelloWorld
-- src\main
-- java\helloworld\HelloWorld.java
-- res\
-- AndroidManifest.xml
-- assets\
-- javafx.platform.properties
-- javafx.properties
-- build.gradle
-- gradle.properties
-- local.properties
我需要使用dist目录吗?我会将我的 JavaFX 应用程序的 jar 文件放在哪里,它将包含在 apk 文件中?