有没有办法将Gluon Mobile(javafxports)与原生的Android代码混合在一起?

时间:2017-10-14 14:47:28

标签: java android javafx gluon gluon-mobile

例如:我想将我的javafx桌面应用程序的核心(使用Gluon Mobile)迁移到Android,但只是核心。我希望使用原生android代码实现的应用程序的其他部分(不包括核心)。

那么,有没有办法将Gluon Mobile和Android本机代码库保留在单个项目中?

1 个答案:

答案 0 :(得分:2)

根据经验,您不应该在Java项目中要求特定的平台代码。如果您只想提供基于平台的自定义Java代码或自定义样式,您可以使用Platform.getCurrent().name()然后根据它做出反应,例如使用不同的代码或根据平台和类型加载不同的css文件设备

尽管如此,包含平台代码有几个原因,并且由于您没有指定哪个是您的要求,我将假设以下之一:

  • 使用本机服务,即设备的摄像头
  • 使用原生API,即Android的日志
  • 使用原生小部件/图层,即Android的Toast或SurfaceView

对于第一种情况,访问本机服务,请查看Charm Down library以及不同服务的本机实现。

正如您将注意到的,每个服务都包含Java和特定平台代码。主要插件(即charm-down-plugin-storage-3.6.0.jar)包含可在以后从Java项目中使用的中性API,它将调用您正在运行的平台的实现(即charm-down-plugin-storage-desktop-3.6.0.jar for Desktop或(即适用于Android的charm-down-plugin-storage-android-3.6.0.jar

将从Java主程序包中调用该服务:

Services.get(StorageService.class).ifPresent(storage -> {
     storage.getPrivateStorage()
         .ifPresent(file -> System.out.println("Private storage " + file.getName()));
     });

通过这种方式,您可以在任何平台上运行它。

如果您需要尚未提供的服务,则可以创建新服务。可以找到有关如何操作的示例here。例如,AndroidLogService实现使用android.util.Log

即使您不需要服务,只需访问Android API,您也可以按照上面的示例一样遵循Charm Down的设计模式,并提供您的Android实施。

对于Android小部件,除非您创建本机图层,否则将无法使用它们,从而将小部件和图层放置在JavaFX图层之上。例如,Android的视频服务就是这样做的。

最后,如果您的项目基本上是一个Android项目并且您想从中调用JavaFX,还有另一种选择。其中的一个例子是Kokos sample