iOS, android, desktop (And main) 构成Gluon工程的Gluon文件夹如何使用?

How to use Gluon folders of iOS, android, desktop (And main) that make up a Gluon project?

我正在尝试通过将 platform/os 特定代码放入各自的文件夹中来设置我的 Gluon 项目(自动创建的项目设置在新创建的 Gluon 项目中)。但是,无论我用 Gradle 执行什么任务,它最终都会占用 Main 文件夹。

假设我想要一个带有 javafx.scene.control.Buttoncom.gluonhq.charm.glisten.mvc.View - 并通过说明它来自哪个文件夹(主文件夹、android、桌面文件夹)来标记不同的标签或 iOS)。怎么可能?

根据经验,您不应在项目中要求特定平台代码。

如果你想要的是基于平台的自定义样式,你可以使用 Platform.getCurrent().name() 然后基于它做出反应。

例如,MyDevoxx app 根据平台和设备类型加载不同的 css 文件。

了解平台特定文件夹如何工作的一个好方法是查看 Charm Down library 和不同服务的实现。

您会注意到这些文件夹同时包含 java 和特定平台代码。

可以找到有关如何创建新服务的示例 here。例如,AndroidLogService 实现使用 android.util.Log,而 IOSLogService 使用原生 Objective-C(参见 Log.m)。此本机代码必须编译为本机库(请参阅构建文件中的 installNativeLib 任务)。

在任何情况下,服务都是从 main 包中调用的:

Services.get(LogService.class).ifPresent(service -> service.log(message));

当您将应用程序部署到特定平台时,只会调用该平台的实现。

因此,如果您需要一项新服务,您可以按照 Charm Down 中的设计创建它。