You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Gradle构建JavaFX和Android双平台应用?

双平台Gradle构建解决方案

方案1:单个build.gradle统一配置(推荐)

该方案无需切换构建文件,通过传入参数区分构建目标,适合小型跨平台项目。
注意替换示例中的插件版本、包名、启动类等配置为你项目的实际值

  1. 配置插件(按需加载不立即应用)
plugins {
    id 'java' apply false
    id 'com.android.application' version '你的Android插件版本号' apply false
    id 'org.openjfx.javafxplugin' version '你的JavaFX插件版本号' apply false
}
  1. 增加构建目标判断逻辑,根据参数加载对应配置
// 不传参数默认构建JavaFX版本
ext.buildTarget = project.hasProperty('buildTarget') ? buildTarget : 'fx'

if (buildTarget == 'android') {
    apply plugin: 'com.android.application'
    android {
        namespace "你的应用包名"
        compileSdk 34
        defaultConfig {
            applicationId "你的应用包名"
            minSdk 21
            targetSdk 34
            versionCode 1
            versionName "1.0"
        }
        sourceSets {
            main {
                // 合并通用代码和Android专属代码
                java.srcDirs += 'common/src/main/java'
                java.srcDirs += 'android/src/main/java'
                res.srcDirs += 'android/src/main/res'
                manifest.srcFile 'android/src/main/AndroidManifest.xml'
            }
        }
    }
    // 依赖配置
    dependencies {
        // 通用依赖
        implementation fileTree(dir: 'common/libs', include: ['*.jar'])
        // Android专属依赖
        implementation 'androidx.appcompat:appcompat:1.6.1'
    }
} else if (buildTarget == 'fx') {
    apply plugin: 'java'
    apply plugin: 'org.openjfx.javafxplugin'
    javafx {
        version = '17'
        modules = ['javafx.controls', 'javafx.fxml']
    }
    sourceSets {
        main {
            // 合并通用代码和JavaFX专属代码
            java.srcDirs += 'common/src/main/java'
            java.srcDirs += 'fx/src/main/java'
            resources.srcDirs += 'fx/src/main/resources'
        }
    }
    // 依赖配置
    dependencies {
        // 通用依赖
        implementation fileTree(dir: 'common/libs', include: ['*.jar'])
        // JavaFX专属依赖
    }
    // 配置可执行JAR打包逻辑
    jar {
        manifest {
            attributes 'Main-Class': '你的JavaFX启动类全限定名'
        }
        from {
            configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
        }
        duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    }
}
  1. 构建命令
  • 构建Android APK:执行./gradlew assembleDebug -PbuildTarget=android,生成的APK存放在build/outputs/apk/debug目录
  • 构建JavaFX JAR:执行./gradlew jar -PbuildTarget=fx,生成的JAR存放在build/libs目录

方案2:多模块独立配置build.gradle

该方案将不同平台的配置完全隔离,适合中大型项目,后期维护更清晰。

  1. 调整项目结构为标准多模块结构
项目根目录
|---settings.gradle
|---common/ // 通用Java模块,独立build.gradle存放通用配置
|---android/ // Android模块,独立build.gradle存放Android专属配置
|---fx/ // JavaFX模块,独立build.gradle存放JavaFX专属配置
  1. 配置根目录settings.gradle
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
rootProject.name = "你的项目名称"
include ':common'
include ':android'
include ':fx'
  1. 子模块配置
  • common模块配置为普通Java库,所有通用代码、通用依赖都放在该模块
  • android模块配置为常规Android应用,依赖:common模块即可,无需重复引入通用代码
  • fx模块配置为常规JavaFX应用,依赖:common模块即可,无需重复引入通用代码
  1. 构建命令
  • 构建Android APK:执行./gradlew :android:assembleDebug
  • 构建JavaFX JAR:执行./gradlew :fx:jar

内容的提问来源于stack exchange,提问作者Barmaley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:57:03