例如:我想将我的javafx桌面应用程序的核心(使用Gluon Mobile)迁移到Android,但只是核心。我希望使用原生android代码实现的应用程序的其他部分(不包括核心)。
那么,有没有办法将Gluon Mobile和Android本机代码库保留在单个项目中?
答案 0 :(得分:2)
根据经验,您不应该在Java项目中要求特定的平台代码。如果您只想提供基于平台的自定义Java代码或自定义样式,您可以使用Platform.getCurrent().name()
然后根据它做出反应,例如使用不同的代码或根据平台和类型加载不同的css文件设备
尽管如此,包含平台代码有几个原因,并且由于您没有指定哪个是您的要求,我将假设以下之一:
对于第一种情况,访问本机服务,请查看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。