使用 gradlew 将 JavaFX 转换为 Android
Posted
技术标签:
【中文标题】使用 gradlew 将 JavaFX 转换为 Android【英文标题】:Converting JavaFX to Android using gradlew 【发布时间】:2015-10-28 06:10:36 【问题描述】:我是 JavaFX 新手,我正在尝试使用 javafxmobile 插件转换为 android apk。
在使用 gradlew 转换为 Android 时,我收到类似 Execution failed for task ':dex'
的错误。
我的系统安装了 JDK 1.8u40 并配置了 gradle。
我也尝试使用 Dalvik SDK,但它仍然没有转换。
这是完整的错误:
C:\Users\Vss\Documents\NetBeansProjects\andyTest>gradlew android
:compileJava UP-TO-DATE
:compileRetrolambdaMain UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileAndroidJava UP-TO-DATE
:compileRetrolambdaAndroid SKIPPED
:compileTestJava UP-TO-DATE
:compileRetrolambdaTest SKIPPED
:compileRetrolambda UP-TO-DATE
:mergeClassesIntoJar
:validateManifest
:collectMultiDexComponents
:shrinkMultiDexComponents
:createMainDexList
:dex
[ant:java] Java Result: 1
:dex FAILED
FAILURE: Build failed with an exception.
出了什么问题:
任务 ':dex' 执行失败。
org.gradle.api.GradleException(没有错误信息)
试过了:
使用 --stacktrace 选项运行以获取堆栈跟踪。 使用 --info 或 --debug 选项运行以获得更多注销 放。
构建失败
总时间:1 分 9.768 秒
当我使用 --stacktrace 运行时,我收到以下错误详细信息:
C:\Users\Vss\Documents\NetBeansProjects\andyTest>gradlew -stacktrace android
:compileJava UP-TO-DATE
:compileRetrolambdaMain UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileAndroidJava UP-TO-DATE
:compileRetrolambdaAndroid SKIPPED
:compileTestJava UP-TO-DATE
:compileRetrolambdaTest SKIPPED
:compileRetrolambda UP-TO-DATE
:mergeClassesIntoJar
:validateManifest
:collectMultiDexComponents
:shrinkMultiDexComponents
:createMainDexList
:dex
[ant:java] Java Result: 1
:dex FAILED
FAILURE: Build failed with an exception.
出了什么问题:
任务 ':dex' 执行失败。
org.gradle.api.GradleException(没有错误信息)
试过了: 使用 --info 或 --debug 选项运行以获得更多日志输出。
我的例外是:
org.gradle.api.tasks.TaskExecutionException:任务“:dex”执行失败。 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteAction sTaskExecuter.java:69) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskEx ecuter.java:46) 在 org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecution 分析任务执行器.java:35) 在 org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecut er.java:64) 在 org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.j 艾娃:58) 在 org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourc eFilesTaskExecuter.java:42) 在 org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoAct ionsExecuter.java:52) 在 org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.j 艾娃:53) 在 org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnce 任务执行器.java:43) 在 org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:306) 在 org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(抽象 TaskPlanExecutor.java:79) 在 org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(抽象 TaskPlanExecutor.java:63) 在 org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlan Executor.java:51) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:8
8) 在 org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29) 在 org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) 在 org.gradle.execution.DefaultBuildExecuter.access $200(DefaultBuildExecuter.java:23) 在 org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68) 在 org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) 在 org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) 在 org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55) 在 org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149) 在 org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106) 在 org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86) 在 org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuild ActionExecuter.java:80) 在 org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33) 在 org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24) 在 org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java :36) 在 org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java :26) 在 org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51) 在 org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:169) 在 org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionF 演员.java:237) 在 org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionF 演员.java:210) 在 org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35 ) 在 org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24 ) 在 org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.j 艾娃:206) 在 org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.j 艾娃:169) 在 org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) 在 org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) 在 org.gradle.launcher.Main.doAction(Main.java:33) 在 org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) 在 org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54) 在 org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35) 在 org.gradle.launcher.GradleMain.main(GradleMain.java:23) 在 org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30) 在 org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127) 在 org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) 引起:org.gradle.api.GradleException: 在 org.javafxports.jfxmobile.plugin.android.task.Dex.dex(Dex.groovy:57) 在 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63) 在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction。 doExecute(AnnotationProcessingTaskFactory.java:218) 在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction。 执行(AnnotationProcessingTaskFactory.java:211) 在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction。 执行(AnnotationProcessingTaskFactory.java:200) 在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585) 在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActions 任务执行器.java:80) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteAction sTaskExecuter.java:61) ... 47 更多
构建失败
总时间:1 分 33.13 秒
我的build.gradle文件如下:
task wrapper(type: Wrapper)
gradleVersion = '2.3'
buildscript
repositories
jcenter()
dependencies
classpath 'org.javafxports:jfxmobile-plugin:1.0.0-b9'
classpath 'org.codehaus.groovy:groovy-backports-compat23:2.3.5'
apply plugin: 'org.javafxports.jfxmobile'
mainClassName = 'andytest.andyTest'
version = '8u40'
repositories
jcenter()
jfxmobile
android
applicationPackage = 'andytest.andyhere'
【问题讨论】:
您的包裹信息与您提供的主类名称不匹配。第一个不是必须的,但主类名应该是完整的包和类名。 groovy 依赖的任何原因?编译或运行时依赖项添加到根级存储库块中。 先生,我没有告诉你哪一个是不需要的。你能详细说明一下吗?我的包名是“andytest”,主类是“AndyTest.java”。 【参考方案1】:我遇到了同样的问题,您的 android studio 中缺少此目录:
..\Android\sdk\extras\android\support\multidex
这是我自己制作的一个例子: https://github.com/viktorcitaku/JavaFXAndroid
【讨论】:
【参考方案2】:如果您做过类似的事情,请向我提供您如何做到这一点的详细信息。您使用哪个 IDE 创建 JAVA FX 项目以及如何转换为 Android App。
我正在使用 Netbeans 创建项目。并尝试将其转换为 Android 项目
【讨论】:
【参考方案3】:我遇到了同样的问题,现在已经解决了。现在我可以编译并制作我的 android apk 了。
所以这些是我遵循的步骤
-
确保您已更新您的 sdk 管理器 -> 支持库
到最新版本(23.1.1),当我发布这个时,这对我来说是最新的
回答。这将更新
H:\sdk\extras\android\support\multidex 文件
-
设置环境变量名_JAVA_OPTIONS,值为-Xmx1024M
确保在 build.gradle 中添加您的 android sdk 位置
androidSdk='H:/ADT BUNDLE/sdk'
喜欢这个
buildscript
repositories
jcenter()
dependencies
classpath 'org.javafxports:jfxmobile-plugin:1.0.0-b9'
apply plugin: 'org.javafxports.jfxmobile'
repositories
jcenter()
mainClassName = 'com.fff.Fff'
jfxmobile
android
manifest = 'src/android/AndroidManifest.xml'
androidSdk='H:/ADT BUNDLE/sdk'
【讨论】:
以上是关于使用 gradlew 将 JavaFX 转换为 Android的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX,将 ArrayList 转换为 ObservableList