我尝试在 Android 上运行一个简单的 JavaFX 应用程序。因此,我使用 gradle 阅读了javafxports 入门指南来构建应用程序,但我被困在了某个地方。我可以使用installDebug
Eclipse 中的 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 文件中?