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 之前,我们需要确保我们的开发环境已经准备好。你需要安装以下工具:

  1. JDK 8 或更高版本:。
  2. Maven : 版本大于3.6.0,小于3.9.0
  3. Gluon Plugin - 用于将 JavaFX 应用连接到 Android 的插件。
  4. GraalVM
  5. Linux平台(CentOS7)
  6. 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 ---
[周三 219 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



[周三 219 16:46:46 CST 2025][信息] We will now compile your code for aarch64-linux-android. This may take some time.
[周三 219 16:46:47 CST 2025][信息] [SUB] Warning: Ignoring server-mode native-image argument --no-server.
[周三 219 16:46:51 CST 2025][信息] [SUB] ========================================================================================================================
[周三 219 16:46:51 CST 2025][信息] [SUB] GraalVM Native Image: Generating 'hellofx.hellofx' (shared library)...
[周三 219 16:46:51 CST 2025][信息] [SUB] ========================================================================================================================
[周三 219 16:46:52 CST 2025][信息] [SUB] [1/7] Initializing...                                                                                    (4.2s @ 0.14GB)
[周三 219 16:46:52 CST 2025][信息] [SUB]  Version info: 'GraalVM 22.1.0.1 Java 17 CE'
[周三 219 16:46:52 CST 2025][信息] [SUB]  Garbage collector: Serial GC
[周三 219 16:47:49 CST 2025][信息] [SUB] [2/7] Performing analysis...  [**********]                                                              (56.3s @ 1.47GB)
[周三 219 16:47:49 CST 2025][信息] [SUB]   11,372 (90.18%) of 12,610 classes reachable
[周三 219 16:47:49 CST 2025][信息] [SUB]   20,214 (66.22%) of 30,525 fields reachable
[周三 219 16:47:49 CST 2025][信息] [SUB]   55,549 (63.23%) of 87,846 methods reachable
[周三 219 16:47:49 CST 2025][信息] [SUB]      642 classes,   109 fields, and 1,951 methods registered for reflection
[周三 219 16:47:49 CST 2025][信息] [SUB]      109 classes,   129 fields, and   183 methods registered for JNI access
[周三 219 16:47:53 CST 2025][信息] [SUB] [3/7] Building universe...                                                                               (3.8s @ 1.65GB)
[周三 219 16:47:56 CST 2025][信息] [SUB] [4/7] Parsing methods...      [**]                                                                       (3.6s @ 2.18GB)
[周三 219 16:48:05 CST 2025][信息] [SUB] [5/7] Inlining methods...     [****]                                                                     (8.4s @ 1.70GB)
[周三 219 16:48:47 CST 2025][信息] [SUB] [6/7] Compiling methods...    [******]                                                                  (42.2s @ 2.17GB)
[周三 219 16:48:56 CST 2025][信息] [SUB] 
[周三 219 16:48:56 CST 2025][信息] [SUB] ------------------------------------------------------------------------------------------------------------------------
[周三 219 16:48:56 CST 2025][信息] [SUB]                        19.5s (15.2% of total time) in 106 GCs | Peak RSS: 3.16GB | CPU load: 1.87
[周三 219 16:48:56 CST 2025][信息] [SUB] ------------------------------------------------------------------------------------------------------------------------
[周三 219 16:48:56 CST 2025][信息] [SUB] Produced artifacts:
[周三 219 16:48:56 CST 2025][信息] [SUB]  /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/hellofx.hellofx.h (header)
[周三 219 16:48:56 CST 2025][信息] [SUB]  /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/graal_isolate.h (header)
[周三 219 16:48:56 CST 2025][信息] [SUB]  /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/hellofx.hellofx_dynamic.h (header)
[周三 219 16:48:56 CST 2025][信息] [SUB]  /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/graal_isolate_dynamic.h (header)
[周三 219 16:48:56 CST 2025][信息] [SUB]  /opt/MyApp/gluon-samples-master/HelloFX/target/gluonfx/aarch64-android/gvm/HelloFX/hellofx.hellofx.build_artifacts.txt
[周三 219 16:48:56 CST 2025][信息] [SUB] ========================================================================================================================
[周三 219 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 ---
[周三 219 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 219 15:20 build-tools
drwxr-xr-x.  3 root root   43 218 13:42 cmdline-tools
drwxr-xr-x.  4 root root   35 218 13:57 extras
drwxr-xr-x.  2 root root   33 218 13:42 licenses
drwxr-xr-x. 12 root root 4096 218 16:32 ndk
drwxr-xr-x. 11 root root 4096 218 14:41 ndk-bundle
drwxr-xr-x.  4 root root   42 218 14:56 platforms
drwxr-xr-x.  3 root root  233 218 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 218 14:41 Android
-rw-r--r--.  1 root root 133507477 218 13:42 android-sdk.zip
drwxr-xr-x.  4 root root        38 218 13:40 javafxStaticSdk
drwxr-xr-x.  4 root root        44 218 13:39 javaStaticSdk
-rw-r--r--.  1 root root    568179 218 11:08 labs-staticjdk-android-aarch64-gvm-11-ea+10.zip
-rw-r--r--.  1 root root  24776735 218 11:08 openjfx-18-ea+2-android-aarch64-static.zip
-rw-r--r--.  1 root root  25010597 218 13:40 openjfx-21-ea+9.1-android-aarch64-static.zip
-rw-r--r--.  1 root root     97598 219 16:55 openjfx-21-ea+9.1-linux-x86_64-static.zip
-rw-r--r--.  1 root root    581307 218 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 219 16:48 process-compile-1739954936449.log
-rw-r--r--. 1 root root 1673 219 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

下载 Gradle 7.5

解压到/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 219 14:15 gradle-7.5
-rw-rw-rw-. 1 root root 166044548 218 16:53 gradle-7.5-bin.zip
-rw-r--r--. 1 root root         0 219 14:15 gradle-7.5-bin.zip.lck
-rw-r--r--. 1 root root         0 219 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 ---
[周三 219 17:41:08 CST 2025][信息] ==================== PACKAGE TASK ====================
[周三 219 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
[周三 219 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 219 17:41 android_project
drwxr-xr-x. 2 root root     4096 219 16:46 capcache
drwxr-xr-x. 2 root root     4096 219 16:48 HelloFX
-rw-r--r--. 1 root root 25949539 219 17:41 HelloFX.aab
-rw-r--r--. 1 root root 27990707 219 17:41 HelloFX.apk
-rw-r--r--. 1 root root    15818 219 16:46 jniconfig-aarch64-android.json
drwxr-xr-x. 2 root root        6 219 16:46 lib
drwxr-xr-x. 2 root root       58 219 17:41 log
-rw-r--r--. 1 root root    60800 219 16:46 reflectionconfig-aarch64-android.json
-rw-r--r--. 1 root root      601 219 16:46 resourceconfig-aarch64-android.json
drwxr-xr-x. 4 root root       67 219 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的分享

posted @ 2025-04-15 17:03  虞泽  阅读(2)  评论(0)    收藏  举报  来源