如何使用 JavaFX 和 Gluon 构建可成功导出的 Android 应用

javafx 本身不原生支持 android,但借助 gluon 提供的移动开发工具链(如 gluon mobile),开发者可用 javafx 编写跨平台应用,并打包为可在 android 设备上运行的 apk 或 aab。本文详解从环境配置到构建部署的完整流程。

JavaFX 是一个功能强大的桌面 GUI 框架,但它默认不支持 Android 或 iOS 平台——JVM 在移动端并不直接运行标准 Java SE 类库,且 Android 使用的是 ART 运行时与 Dalvik 字节码,而非传统 JVM。因此,单纯在 VS Code 中配置 JavaFX SDK 并编写 FXML/Controller 代码,无法直接导出为 Android 应用

要真正实现“用 JavaFX 开发 Android 应用”,必须借助 Gluon Mobile ——一个由 GluonHQ 维护的开源框架,它将 JavaFX 的 UI 能力桥接到原生移动平台。其核心原理是:

  • 使用 GraalVM 将 Java 字节码提前编译(AOT)为原生 ARM/x86 机器码;
  • 通过 Gluon’s Charm Down API 访问设备能力(如相机、位置、通知);
  • 利用 Gluon Substrate 工具链生成符合 Google Play 要求的 Android APK/AAB 包。

✅ 正确路径如下(适用于初学者):

  1. 环境准备(必需)

    • 安装 JDK 17(Gluon Mobile 当前推荐版本,不支持 JDK 21+
    • 安装 Android SDK(含 platform-tools、build-tools、platforms;android-34、ndk;25.1.8937393)
    • 配置环境变量:ANDROID_HOME、JAVA_HOME、PATH
    • 安装 Gluon Client Maven 插件(无需单独下载,通过 pom.xml 声明即可)
  2. 创建项目(推荐使用 Maven 模板)
    在终端执行(确保已安装 Maven):

    mvn archetype:generate \
      -DarchetypeGroupId=com.gluonhq \
      -DarchetypeArtifactId=client-maven-archetype \
      -DarchetypeVersion=0.1

    .19 \ -DgroupId=com.example \ -DartifactId=my-javafx-android-app \ -Dversion=1.0.0-SNAPSHOT

    该命令会生成包含 JavaFX + Gluon Mobile 结构的标准项目。

  3. 关键配置(pom.xml 片段)
    确保启用 Android 目标平台:

    
        com.gluonhq
        client-maven-plugin
        
            android
            com.example.MyApp
            ${env.ANDROID_HOME}
        
    
  4. 构建并部署

    mvn clean client:build client:package -Pandroid
    # 输出路径:target/client/aarch64-android/my-javafx-android-app.apk
    adb install target/client/aarch64-android/my-javafx-android-app.apk

⚠️ 重要注意事项:

  • VS Code 不是 Gluon 官方推荐 IDE(IntelliJ IDEA + Gluon Plugin 支持最佳),但可通过配置 Java/Maven 扩展链实现开发;建议初学者先用 IntelliJ 社区版验证流程。
  • Gluon Mobile 不兼容 JavaFX 18+ 的独立模块化构建方式,必须使用 Gluon 提供的 javafx-base, javafx-controls 等定制化依赖(由 client-maven-plugin 自动引入)。
  • 所有 UI 必须基于 View, Drawer, BottomNavigation 等 Gluon Mobile 组件构建,而非直接使用 Stage/Scene(移动端无窗口概念)。

? 总结:JavaFX for Android ≠ “把桌面程序移植过去”,而是采用 Gluon Mobile 的声明式 UI + 原生绑定模型进行全新开发。它不是“JavaFX 的 Android 版”,而是一个以 JavaFX 语法为表、以移动原生体验为里的跨端解决方案。对于初学者,强烈建议从 Gluon 官方文档 和 Foojay 教程系列 入手,循序渐进实践 Hello World → 生命周期管理 → 设备 API 调用。