如何使用Gradle构建JavaFX和Android双平台应用?
双平台Gradle构建解决方案
方案1:单个build.gradle统一配置(推荐)
该方案无需切换构建文件,通过传入参数区分构建目标,适合小型跨平台项目。
注意替换示例中的插件版本、包名、启动类等配置为你项目的实际值
- 配置插件(按需加载不立即应用)
plugins { id 'java' apply false id 'com.android.application' version '你的Android插件版本号' apply false id 'org.openjfx.javafxplugin' version '你的JavaFX插件版本号' apply false }
- 增加构建目标判断逻辑,根据参数加载对应配置
// 不传参数默认构建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 } }
- 构建命令
- 构建Android APK:执行
./gradlew assembleDebug -PbuildTarget=android,生成的APK存放在build/outputs/apk/debug目录 - 构建JavaFX JAR:执行
./gradlew jar -PbuildTarget=fx,生成的JAR存放在build/libs目录
方案2:多模块独立配置build.gradle
该方案将不同平台的配置完全隔离,适合中大型项目,后期维护更清晰。
- 调整项目结构为标准多模块结构
项目根目录 |---settings.gradle |---common/ // 通用Java模块,独立build.gradle存放通用配置 |---android/ // Android模块,独立build.gradle存放Android专属配置 |---fx/ // JavaFX模块,独立build.gradle存放JavaFX专属配置
- 配置根目录
settings.gradle
pluginManagement { repositories { google() mavenCentral() gradlePluginPortal() } } rootProject.name = "你的项目名称" include ':common' include ':android' include ':fx'
- 子模块配置
common模块配置为普通Java库,所有通用代码、通用依赖都放在该模块android模块配置为常规Android应用,依赖:common模块即可,无需重复引入通用代码fx模块配置为常规JavaFX应用,依赖:common模块即可,无需重复引入通用代码
- 构建命令
- 构建Android APK:执行
./gradlew :android:assembleDebug - 构建JavaFX JAR:执行
./gradlew :fx:jar
内容的提问来源于stack exchange,提问作者Barmaley
相关产品推荐
相关产品推荐

