JavaFX程序打包成Android、IOS应用详细教程(作者手把手教)
JavaFX程序打包成Android、IOS应用详细教程
序言
近年来,移动应用开发如火如荼,Java 开发者们是否也想将自己的 JavaFX 程序搬上手机屏幕,触达更广阔的用户群体?好消息是,借助强大的开源工具和框架,JavaFX 程序也能轻松打包成 Android 和 iOS 应用,实现真正的跨平台开发!
本教程将手把手带你踏上 JavaFX 移动应用开发之旅,从环境搭建到代码调试,从打包发布到性能优化,一步步揭开 JavaFX 跨平台开发的神秘面纱。无论你是 JavaFX 新手,还是经验丰富的开发者,都能从本教程中获益,将你的创意和代码转化为触手可及的移动应用,开启跨平台开发的新篇章!
你将学习到:
- 如何将 JavaFX 程序打包成 Android 和 iOS 应用
- 使用 Gluon 工具链简化跨平台开发流程
- 针对移动设备优化 JavaFX 程序的技巧
- 解决跨平台开发中常见问题的方案
准备好迎接挑战了吗? 让我们一起开启这段激动人心的旅程,将 JavaFX 的魅力延伸到移动端,用代码创造无限可能!
相关资源在文章最后获取
作者博客: www.lstar.icu
开源地址
Gitee 地址: https://gitee.com/lxwise
Github 地址: https://github.com/lxwise
1.前提条件
在开始打包 APK 之前,我们需要确保我们的开发环境已经准备好。你需要安装以下工具:
- JDK 8 或更高版本:。
- Maven : 版本大于3.6.0,小于3.9.0。
- Gluon Plugin - 用于将 JavaFX 应用连接到 Android 的插件。
- GraalVM
- Linux平台(CentOS7)
- Android SDK 和 NDK(可选,稍后将详细介绍)
重要提醒
所有软件版本请和作者保持一致!
所有软件版本请和作者保持一致!
所有软件版本请和作者保持一致!
2.环境准备
2.1 JDK安装
2.1.1 下载Java包
通过网页下载,上传到服务器
下载地址: https://jdk.java.net/archive/或者https://github.com/openjdk/jdk

2.1.2 上传服务器并解压
cd /opt/
#解压
tar -zxvf jdk-17.0.8_linux-x64_bin.tar.gz
[root@VM-8-7-centos opt]# tar -zxvf jdk-17.0.8_linux-x64_bin.tar.gz
2.1.3 配置环境变量
打开profile文件
vi /etc/profile
在文件最后添加如下字段保存退出就ok了
export JAVA_HOME=/opt/jdk-17.0.8
export PATH=$PATH:$JAVA_HOME/bin
2.2 Maven安装
2.2.1 下载Maven
Apache Maven:https://maven.apache.org/download.cgi

2.2.2 上传服务器并解压
cd /opt/
#解压
tar -zxvf apache-maven-3.8.8-bin.tar.gz
#注意:apache-maven-3.8.8-bin.tar.gz 是我下载的安装包名称,请修改为你下载的安装包名称
2.2.3 配置环境变量
打开profile文件
vi /etc/profile
在文件最后添加如下字段保存退出就ok了
#你的maven路径
MAVEN_HOME=/opt/apache-maven-3.8.8
export PATH=${MAVEN_HOME}/bin:${PATH}
2.2.4 修改配置文件
打开settings.xml配置文件
cd /opt/apache-maven-3.8.8/conf/
vim settings.xml
修改仓库存放位置
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>/opt/maven</localRepository>
修改仓库镜像地址
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/
</url>
<mirrorOf>central</mirrorOf>
</mirror>
2.3 GraalVM安装
2.3.1 下载GraalVM

这里我们下java17的,高版本的有问题:
GraalVM

2.3.2 上传服务器并解压
cd /opt/
#解压
tar -zxvf graalvm-svm-java17-linux-gluon-22.1.0.1-Final
2.3.3 配置环境变量
打开profile文件
vi /etc/profile
把之前的JAVA_HOME指向你的graalvm文件夹,同时新加一个GRAALVM_HOME环境变量
export JAVA_HOME=/opt/graalvm-svm-java17-linux-gluon-22.1.0.1-Final
export PATH=$PATH:$JAVA_HOME/bin
export GRAALVM_HOME=/opt/graalvm-svm-java17-linux-gluon-22.1.0.1-Final
export PATH=$GRAALVM_HOME/bin:$PATH
完整的环境变量:
export JAVA_HOME=/opt/graalvm-svm-java17-linux-gluon-22.1.0.1-Final
export PATH=$PATH:$JAVA_HOME/bin
#你的maven路径
MAVEN_HOME=/opt/apache-maven-3.8.8
export PATH=${MAVEN_HOME}/bin:${PATH}
export GRAALVM_HOME=/opt/graalvm-svm-java17-linux-gluon-22.1.0.1-Final
export PATH=$GRAALVM_HOME/bin:$PATH
为方便起见,您可以将上述内容添加到您的 .bashrc 文件中。
vim ~/.bashrc
添加:
export GRAALVM_HOME=/opt/graalvm-svm-java17-linux-gluon-22.1.0.1-Final
刷新环境变量,并查看环境是否配置正确
source /etc/profile
source ~/.bashrc
echo $JAVA_HOME
echo $GRAALVM_HOME
java -version
mvn -v
gu --version
gu list
出现下列便是成功配置了环境
[root@localhost etc]# java -version
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment GraalVM 22.1.0.1 (build 17.0.3+7-jvmci-22.1-b06)
OpenJDK 64-Bit Server VM GraalVM 22.1.0.1 (build 17.0.3+7-jvmci-22.1-b06, mixed mode, sharing)
[root@localhost etc]# mvn -v
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /opt/apache-maven-3.8.8
Java version: 17.0.3, vendor: GraalVM Community, runtime: /opt/graalvm-svm-java17-linux-gluon-22.1.0.1-Final
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.119.1.el7.x86_64", arch: "amd64", family: "unix"
[root@localhost etc]# gu --version
GraalVM Updater 22.1.0.1
[root@localhost etc]# gu list
ComponentId Version Component name Stability Origin
---------------------------------------------------------------------------------------------------------------------------------
graalvm 22.1.0.1 GraalVM Core Supported
llvm-toolchain 22.1.0.1 LLVM.org toolchain Supported
native-image 22.1.0.1 Native Image Early adopter
2.4 安装开发者工具集
执行以下命令以安装所需的 yum 软件包:
sudo yum install pkgconfig gtk3-devel libXtst-devel
3.应用打包
3.1 项目获取
这里为了演示,作者直接用的是gluon提供的项目
项目地址
git clone https://github.com/gluonhq/gluon-samples.git
3.2 项目编译
运行mvn gluonfx:compile命令:
这里第一次运行会下载很多打包所需的文件例如JavaFX SDK 及其静态库等,可以在~/.gluon文件夹下找到
mvn gluonfx:compile
[INFO] --------------------< com.gluonhq.samples:hellofx >---------------------
[INFO] Building HelloFX 1.0.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> gluonfx-maven-plugin:1.0.18:compile (default-cli) > process-classes @ hellofx >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hellofx ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ hellofx ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] <<< gluonfx-maven-plugin:1.0.18:compile (default-cli) < process-classes @ hellofx <<<
[INFO]
[INFO]
[INFO] --- gluonfx-maven-plugin:1.0.18:compile (default-cli) @ hellofx ---
[周三 2月 19 16:46:44 CST 2025][信息] ==================== COMPILE TASK ====================
_______ ___ __ __ _______ __ _
| || | | | | || || | | |
| ___|| | | | | || _ || |_| |
| | __ | | | |_| || | | || |
| || || |___ | || |_| || _ |
| |_| || || || || | | |
|_______||_______||_______||_______||_| |__|
Access to the latest docs, tips and tricks and more info on
how to get support? Register your usage of Gluon Substrate now at
https://gluonhq.com/activate
[周三 2月 19 16:46:46 CST 2025][信息] We will now compile your code for aarch64-linux-android. This may take some time.
[周三 2月 19 16:46:47 CST 2025][信息] [SUB] Warning: Ignoring server-mode native-image argument --no-server.
[周三 2月 19 16:46:51 CST 2025][信息] [SUB] ========================================================================================================================
[周三 2月 19 16:46:51 CST 2025][信息] [SUB] GraalVM Native Image: Generating 'hellofx.hellofx' (shared library)...
[周三 2月 19 16:46:51 CST 2025][信息] [SUB] ========================================================================================================================
[周三 2月 19 16:46:52 CST 2025][信息] [SUB] [1/7] Initializing... (4.2s @ 0.14GB)
[周三 2月 19 16:46:52 CST 2025][信息] [SUB] Version info: 'GraalVM 22.1.0.1 Java 17 CE'
[周三 2月 19 16:46:52 CST 2025][信息] [SUB] Garbage collector: Serial GC
[周三 2月 19 16:47:49 CST 2025][信息] [SUB] [2/7] Performing analysis... [**********] (56.3s @ 1.47GB)
[周三 2月 19 16:47:49 CST 2025][信息] [SUB] 11,372 (90.18%) of 12,610 classes reachable
[周三 2月 19 16:47:49 CST 2025][信息] [SUB] 20,214 (66.22%) of 30,525 fields reachable
[周三 2月 19 16:47:49 CST 2025][信息] [SUB] 55,549 (63.23%) of 87,846 methods reachable
[周三 2月 19 16:47:49 CST 2025][信息] [SUB] 642 classes, 109 fields, and 1,951 methods registered for reflection
[周三 2月 19 16:47:49 CST 2025][信息] [SUB] 109 classes, 129 fields, and 183 methods registered for JNI access
[周三 2月 19 16:47:53 CST 2025][信息] [SUB] [3/7] Building universe... (3.8s @ 1.65GB)
[周三 2月 19 16:47:56 CST 2025][信息] [SUB] [4/7] Parsing methods... [**] (3.6s @ 2.18GB)
[周三 2月 19 16:48:05 CST 2025][信息] [SUB] [5/7] Inlining methods... [****] (8.4s @ 1.70GB)
[周三 2月 19 16:48:47 CST 2025][信息] [SUB] [6/7] Compiling methods... [******] (42.2s @ 2.17GB)
[周三 2月 19 16:48:56 CST 2025][信息] [SUB]
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] ------------------------------------------------------------------------------------------------------------------------
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] 19.5s (15.2% of total time) in 106 GCs | Peak RSS: 3.16GB | CPU load: 1.87
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] ------------------------------------------------------------------------------------------------------------------------
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] Produced artifacts:
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/hellofx.hellofx.h (header)
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/graal_isolate.h (header)
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/hellofx.hellofx_dynamic.h (header)
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/graal_isolate_dynamic.h (header)
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/hellofx.hellofx.build_artifacts.txt
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] ========================================================================================================================
[周三 2月 19 16:48:56 CST 2025][信息] [SUB] Finished generating 'hellofx.hellofx' in 2m 7s.
[INFO]
[INFO] --- gluonfx-maven-plugin:1.0.18:link (default-cli) @ hellofx ---
[周三 2月 19 16:48:56 CST 2025][信息] ==================== LINK TASK ====================
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:13 min
[INFO] Finished at: 2025-02-19T16:48:57+08:00
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:14 min
[INFO] Finished at: 2025-02-19T16:48:57+08:00
[INFO] ------------------------------------------------------------------------
结果,hellofx.hellofx.o 被创建出来,可以在 target/gluonfx/x86_64-linux/gvm/tmp/SVM-*****/hellofx.hellofx.o 下找到
3.3 项目运行
运行 mvn gluonfx:link 目标以生成本机映像。因此,将创建 target/gluonfx/x86_64-linux/hellofx。它可以直接执行,也可以使用 mvn gluonfx:nativerun 执行。

3.4 构建APK
目前,Android 只能在 Linux作系统上构建,除了适用于 Linux作系统的 GraalVM 之外,还需要 Android SDK/NDK 来为 Android 平台构建应用程序。
当然SDK/NDK 都将由“GluonFX 插件”自动下载,并配置所需的软件包。这里一定要保证网络良好,要不下载SDK时经常出错。
可以使用 mvn -Pandroid gluonfx:build 构建项目。这将运行编译阶段并将编译后的对象链接到 android 可执行文件中。
mvn -Pandroid gluonfx:build
这里可能会下载失败出现如下错误:
Failed to execute goal com.gluonhq:gluonfx-maven-plugin:1.0.7:compile (default-cli) on project gluon-multiviewproject: Error: Error downloading zips: Could not run the Android sdk manager -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
java.lang.RuntimeException: Error downloading zips: Could not run the Android sdk manager
解决办法,手动下载并自己安装Android SDK/NDK,GluonFX 需要较新的 NDK 版本,推荐使用 NDK r21 或更高版本,作者这里使用的是 NDK 25
手动下载并自己安装Android SDK/NDK,下载好SDK和NDK上传到如下文件夹:
安装SDK
wget https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip
unzip commandlinetools-linux-*.zip -d cmdline-tools
mv cmdline-tools/latest cmdline-tools/bin
Android SDK目录: /root/.gluon/substrate/Android
Android NDK目录: /root/.gluon/substrate/Android/ndk
配置环境变量
export ANDROID_SDK=/root/.gluon/substrate/Android
export PATH=$ANDROID_SDK/cmdline-tools/latest/bin:$PATH
export ANDROID_NDK=/root/.gluon/substrate/Android/ndk
export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
刷新环境
source /etc/profile
然后运行:
sdkmanager --version
如果输出版本号,则表示安装成功。
[root@localhost ndk]# sdkmanager --version
Warning: Observed package id 'ndk;25.2.9519653' in inconsistent location '/root/.gluon/substrate/Android/ndk' (Expected '/root/.gluon/substrate/Android/ndk/25.2.9519653')
9.0
[root@localhost ndk]# sdkmanager --list
Warning: Observed package id 'ndk;25.2.9519653' in inconsistent location '/root/.gluon/substrate/Android/ndk' (Expected '/root/.gluon/substrate/Android/ndk/25.2.9519653')
Warning: Observed package id 'ndk;25.2.9519653' in inconsistent location '/root/.gluon/substrate/Android/ndk' (Expected '/root/.gluon/substrate/Android/ndk/25.2.9519653')
Warning: Errors during XML parse:
Warning: Additionally, the fallback loader failed to parse the XML.
[=======================================] 100% Computing updates...
Installed packages:
Path | Version | Description | Location
------- | ------- | ------- | -------
build-tools;30.0.3 | 30.0.3 | Android SDK Build-Tools 30.0.3 | build-tools/30.0.3
build-tools;31.0.0 | 31.0.0 | Android SDK Build-Tools 31 | build-tools/31.0.0
build-tools;34.0.0 | 34.0.0 | Android SDK Build-Tools 34 | build-tools/34.0.0
extras;android;m2repository | 47.0.0 | Android Support Repository | extras/android/m2repository
extras;google;m2repository | 58 | Google Repository | extras/google/m2repository
ndk-bundle | 22.1.7171670 | NDK | ndk-bundle
ndk;25.2.9519653 | 25.2.9519653 | NDK (Side by side) 25.2.9519653 | ndk
platform-tools | 35.0.2 | Android SDK Platform-Tools | platform-tools
platforms;android-31 | 1 | Android SDK Platform 31 | platforms/android-31
platforms;android-34 | 3 | Android SDK Platform 34 | platforms/android-34
安装NDK
wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
unzip android-ndk-r25c-linux.zip
mv android-ndk-r25d ndk
使用sdkmanager安装必要软件包:
sdkmanager --install "platform-tools" "build-tools;34.0.0" "platforms;android-34" "ndk-bundle" "extras;android;m2repository" "extras;google;m2repository"
路径下文件:
[root@localhost Android]# pwd
/root/.gluon/substrate/Android
[root@localhost Android]# ll
总用量 8
drwxr-xr-x. 5 root root 48 2月 19 15:20 build-tools
drwxr-xr-x. 3 root root 43 2月 18 13:42 cmdline-tools
drwxr-xr-x. 4 root root 35 2月 18 13:57 extras
drwxr-xr-x. 2 root root 33 2月 18 13:42 licenses
drwxr-xr-x. 12 root root 4096 2月 18 16:32 ndk
drwxr-xr-x. 11 root root 4096 2月 18 14:41 ndk-bundle
drwxr-xr-x. 4 root root 42 2月 18 14:56 platforms
drwxr-xr-x. 3 root root 233 2月 18 14:18 platform-tools
[root@localhost Android]#
[root@localhost substrate]# pwd
/root/.gluon/substrate
[root@localhost substrate]# ll
总用量 180228
drwxr-xr-x. 11 root root 179 2月 18 14:41 Android
-rw-r--r--. 1 root root 133507477 2月 18 13:42 android-sdk.zip
drwxr-xr-x. 4 root root 38 2月 18 13:40 javafxStaticSdk
drwxr-xr-x. 4 root root 44 2月 18 13:39 javaStaticSdk
-rw-r--r--. 1 root root 568179 2月 18 11:08 labs-staticjdk-android-aarch64-gvm-11-ea+10.zip
-rw-r--r--. 1 root root 24776735 2月 18 11:08 openjfx-18-ea+2-android-aarch64-static.zip
-rw-r--r--. 1 root root 25010597 2月 18 13:40 openjfx-21-ea+9.1-android-aarch64-static.zip
-rw-r--r--. 1 root root 97598 2月 19 16:55 openjfx-21-ea+9.1-linux-x86_64-static.zip
-rw-r--r--. 1 root root 581307 2月 18 13:39 staticjdk-android-aarch64-gvm-18-ea+prep18-8.zip
3.5 项目打包分发
运行 mvn -Pandroid gluonfx:package 以生成可安装在任何 Android 设备上的 Android 应用程序包 (APK),以及可提交到 Google Play 的 Android 应用程序包 (AAB)。
这里会去下载gradle进行打包,要保证网络良好否则会打包失败
如果出现错误可以使用mvn -X -Pandroid gluonfx:package命令查看具体错日志
mvn -X -Pandroid gluonfx:package
也可以在你的路径/HelloFX/target/gluonfx/log下找到对应的错误日志文件
[root@localhost log]# pwd
/opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/log
[root@localhost log]# ll
总用量 12
-rw-r--r--. 1 root root 4228 2月 19 16:48 process-compile-1739954936449.log
-rw-r--r--. 1 root root 1673 2月 19 16:48 process-link-1739954937355.log
[root@localhost log]#
错误1:
Process
=======
package-task
Command Line
============
/opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/android_project/gradlew -p /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/android_project assembleDebug
Output
======
Unzipping /root/.gradle/wrapper/dists/gradle-7.5-bin/7u84gh846ok982rnccbf0jshgv/gradle-7.5-bin.zip to /root/.gradle/wrapper/dists/gradle-7.5-bin/7u84gh846ok982rnccbf0jshgv
Exception in thread "main" java.lang.RuntimeException: java.util.zip.ZipException: zip END header not found
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:78)
at org.gradle.wrapper.Install.createDist(Install.java:47)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: java.util.zip.ZipException: zip END header not found
at java.base/java.util.zip.ZipFile$Source.findEND(ZipFile.java:1469)
at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1477)
at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1315)
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1277)
at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:709)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:243)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:172)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:186)
at org.gradle.wrapper.Install.unzip(Install.java:160)
at org.gradle.wrapper.Install.access$400(Install.java:29)
at org.gradle.wrapper.Install$1.call(Install.java:70)
at org.gradle.wrapper.Install$1.call(Install.java:47)
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
... 3 more
Result
======
result: 1
这个错误提示 java.util.zip.ZipException: zip END header not found 通常是由于 Gradle Wrapper 下载的 zip 包损坏或不完整引起的。具体来说,Gradle 的 zip 包可能在下载过程中被破坏,导致无法解压。
解决办法
手动下载并安装 Gradle
解压到/root/.gradle/wrapper/dists/gradle-7.5-bin目录。
如果/root/.gradle/wrapper/dists/gradle-7.5-bin下有带编码的文件夹那么再把gradle-7.5-bin.zip复制一份到带编码的文件夹下,因为gluon插件会去检查这个文件夹下有无对应的压缩包,它会去解压到这个目录
/root/.gradle/wrapper/dists/gradle-7.5-bin/7u84gh846ok982rnccbf0jshgv
[root@localhost 7u84gh846ok982rnccbf0jshgv]# ll
总用量 162156
drwxr-xr-x. 7 root root 108 2月 19 14:15 gradle-7.5
-rw-rw-rw-. 1 root root 166044548 2月 18 16:53 gradle-7.5-bin.zip
-rw-r--r--. 1 root root 0 2月 19 14:15 gradle-7.5-bin.zip.lck
-rw-r--r--. 1 root root 0 2月 19 14:15 gradle-7.5-bin.zip.ok
[root@localhost 7u84gh846ok982rnccbf0jshgv]#
错误2:
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring root project 'android_project'.
> Could not resolve all files for configuration ':classpath'.
> Could not download kotlin-reflect-1.5.31.jar (org.jetbrains.kotlin:kotlin-reflect:1.5.31)
> Could not get resource 'https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.31/kotlin-reflect-1.5.31.jar'.
> Read timed out
根据错误日志,问题出在 gradle 在构建过程中无法下载 kotlin-reflect-1.5.31.jar 文件,错误提示为 Read timed out,表示网络请求超时。
解决办法
手动下载缺失的依赖:
你可以尝试手动下载缺失的 JAR 文件,并将其放到本地的 Gradle 缓存目录中。可以从 Maven 仓库下载 kotlin-reflect-1.5.31.jar,然后将它放到 ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.5.31/ 目录下。
相关错误,缺什么jar包就去下载对应的并放在对应的目录下就行
打包
[root@localhost HelloFX]# mvn -Pandroid gluonfx:package
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.gluonhq.samples:hellofx >---------------------
[INFO] Building HelloFX 1.0.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- gluonfx-maven-plugin:1.0.18:package (default-cli) @ hellofx ---
[周三 2月 19 17:41:08 CST 2025][信息] ==================== PACKAGE TASK ====================
[周三 2月 19 17:41:09 CST 2025][信息] Default Android manifest generated in /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gensrc/android/AndroidManifest.xml.
Consider copying it to /opt/MyApp/gluon-samples-master/HelloFX/src/android/AndroidManifest.xml before performing any modification
[周三 2月 19 17:41:09 CST 2025][信息] Default Android resources generated in /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gensrc/android/res.
Consider copying them to /opt/MyApp/gluon-samples-master/HelloFX/src/android/res before performing any modification
_______ ___ __ __ _______ __ _
| || | | | | || || | | |
| ___|| | | | | || _ || |_| |
| | __ | | | |_| || | | || |
| || || |___ | || |_| || _ |
| |_| || || || || | | |
|_______||_______||_______||_______||_| |__|
Access to the latest docs, tips and tricks and more info on
how to get support? Register your usage of Gluon Substrate now at
https://gluonhq.com/activate
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 29.830 s
[INFO] Finished at: 2025-02-19T17:41:37+08:00
[INFO] ------------------------------------------------------------------------
[root@localhost HelloFX]#
[root@localhost HelloFX]# cd target/gluonfx/aarch64-android/gvm/
[root@localhost gvm]# ll
总用量 52768
drwxr-xr-x. 6 root root 186 2月 19 17:41 android_project
drwxr-xr-x. 2 root root 4096 2月 19 16:46 capcache
drwxr-xr-x. 2 root root 4096 2月 19 16:48 HelloFX
-rw-r--r--. 1 root root 25949539 2月 19 17:41 HelloFX.aab
-rw-r--r--. 1 root root 27990707 2月 19 17:41 HelloFX.apk
-rw-r--r--. 1 root root 15818 2月 19 16:46 jniconfig-aarch64-android.json
drwxr-xr-x. 2 root root 6 2月 19 16:46 lib
drwxr-xr-x. 2 root root 58 2月 19 17:41 log
-rw-r--r--. 1 root root 60800 2月 19 16:46 reflectionconfig-aarch64-android.json
-rw-r--r--. 1 root root 601 2月 19 16:46 resourceconfig-aarch64-android.json
drwxr-xr-x. 4 root root 67 2月 19 16:46 tmp
[root@localhost gvm]#
覆盖默认的 Android 设置
如果您需要在 AndroidManifest.xml 中设置特定的 Android 设置,请将文件从 target/gluonfx/aarch64-android/gensrc/android/AndroidManifest.xml 复制到
src/android/AndroidManifest.xml
覆盖默认图标
默认情况下,图标在 target/gluonfx/aarch64-android/gensrc/android/rest/ 中生成。如果您正在分发您的应用程序,您肯定会希望使用自定义图标。
但是,如果您只想覆盖图标,也有不错的在线生成器(例如 https://appicon.co/)
要使用生成的图标,请执行以下步骤:
然后删除 src/android/res
然后将生成的 Android 图标文件(以 mipmap- 开头)复制到 src/android/res
到了这一步项目apk已经打包好了,会生成在target/gluonfx/aarch64-android/gvm文件下
此时如果不想继续下面的操作可以直接将apk发送到手机端安装看效果
4.安装测试
在设备上启动应用程序,这里要先用数据线连接手机和电脑会弹出窗口,让你选择连接的设备,按着我图中的选择

现在,我们已准备好在插入的 Android 设备上安装和运行应用程序。运行mvn -Pandroid gluonfx:install gluonfx:nativerun以在设备上安装并启动应用程序。
mvn -Pandroid gluonfx:install
mvn -Pandroid gluonfx:nativerun
在设备上启动应用程序。GluonFX 插件也将开始 adb logcat 从设备向控制台打印调试信息。
这里要配合手机中的提示,可能会让你选择是否同意Usb安装应用什么的,统一都同意
最后的效果图

5.写在最后
经过数天的努力与探索,踩了一个又一个的坑,终于完成了移动端应用的打包。本身国内JavaFX的相关资料就少,更不用说打包的资料了,为了找这些资源抠破了脑袋,经过这段时间的摸索,JavaFx移动端的发展还有很多的路要走。
6.资源下载
下载后会得到.gluon.tar.gz和.gradle.tar.gz两个压缩包,把这两个压缩包上传到/root目录下解压即可
[root@localhost ~]# ls -a
.bash_history .bash_profile .docker .gluon.tar.gz .gradle.tar.gz
.. .android .gluon .gradle logs
百度网盘:
通过网盘分享的文件:javafx打包android相关教程资料
链接: https://pan.baidu.com/s/1nXw6lozbS9VuCL9t9X0_Lw?pwd=73jv 提取码: 73jv
–来自百度网盘超级会员v7的分享
本文来自博客园,作者:虞泽,转载请注明原文链接:https://www.cnblogs.com/yuze-blog/p/19285732

浙公网安备 33010602011771号