我刚进入胶子领域,但我知道如何创建一个基于JDK-8女巫JavaFX库的JavaFX应用程序。
胶子应用程序似乎可以很容易地在JVM上执行,尽管要创建本机映像,您需要最新版本的GraalVM。另一方面,我最近读到了2018年出版的胶子VM的文档,它说:
Gluon是一组软件组件,它允许开发人员编写Java应用程序并在移动设备或嵌入式设备上运行它们。Gluon包含一个AOT (提前)编译器,它将Java字节码编译成特定于平台的本机代码。
我认为GraalVM和胶子VM都有相同的目标,所以我感到困惑,我想知道我应该使用什么?胶子VM还是GraalVM?他们有什么不同?
我的IntelliJ想法已经有了胶子VM选项,我想已经被否决了。

发布于 2021-03-13 15:42:26
胶子和GraalVM在一个稍微不同的层次上工作,这实际上意味着它们可以相互合作,而不是竞争。GraalVM是JVM和交叉编译器.胶子为在不同平台上编写应用程序提供了抽象。
例如,考虑一下Android应用程序。GraalVM原生图像允许您将用一组编程语言编写的代码编译成一个可执行的Android程序,即APK。使用标准的Android,您将不得不使用Kotlin或旧Java (较新的Adroid支持Java 8中的一个子集,但是是meh)。使用GraalVM,你可以使用新的Java,Scala,Python,Ruby.挑精拣肥。
但是GraalVM本身不会给你任何与安卓设备通信的工具。你想在屏幕上显示什么吗?使用本地存储?听取来自后端的事件?祝你好运,GraalVM对此一无所知。
这里进入胶子。它提供了插件和库,作为代码和底层设备之间的抽象层,因此在理论上,您可以为Android、iOS和桌面编写相同的代码。(“理论上”,因为在实践中,每个平台都需要一些不同的处理)。因此,对于图形用户界面,您将使用由胶子维护的JavaFX。您将把它添加到Maven或Gradle配置中,现在您可以用UI编写一个应用程序,它可以在安卓或iOS上工作,就像它在桌面上工作一样。
这一切还在早期阶段,但看起来很有希望。我喜欢人们在非常不同的东西上工作,能够聚集在一起,产生类似的东西。
发布于 2021-03-18 09:58:56
@Elias,GluonVM现在一点也不是。你在这里是某种旧的市场营销的受害者。您所链接的文章/文档已有3年的历史,甚至还提到了使用javafxport和jfxmobile插件的ODLEST方法(再次查看并看到一些链接已经失效,jfxmobile的github回购已经3年了)。在了解胶子移动的现状的过程中,我发现了一篇非常古老的文章(2014年),它很好地描述了最古老的方法,javafx在安卓设备上使用DalvikVM,在iOS上使用RoboVM。但随后苹果( Apple )出现了,并禁止在他的设备上使用JIT编译和任何类型的外部VM。所以那条路不见了。随后出现了GraalVM,它在java本身中更多地是JDK,对于本地编译的java代码来说,这种GraalVM的一部分是最小的VM,他们称它为SubstrateVM ( Oracle )。尽管GraalVM将代码编译成纯本地处理器代码,但在某些情况下,应用程序使用反射时,必须有方法来反映元数据,至少在某些类上是这样。这必须显式地提供到GraalVM编译阶段。还有一些工具可以在你的代码中扫描这种访问,尽管它可能也需要手动调整,以防你的应用程序过于动态(某种依赖注入和这样的魔力),但在大多数简单的移动应用程序中,这并不是一个问题。这一切都很难手动完成。然后,胶子出现了他的名字胶子VM术语(从2018年起你的链接文档),可能,开始使用GraalVM来构建本地映像。胶子在他的产品中也使用了基材一词。它在github上的胶子底物。这是一种新的、当前的方法。理解胶子基板是“先进的构建引擎”使用GraalVM,而不是任何一种新的"VM“。由于实际上在GluonMobile本地应用程序中没有任何VM (除了由于反射而留在这里的GraalVM SubstrateVM之外)--您还在跟踪吗?是的,其不幸的混乱主要表现在:-)。但没关系,它现在只是起作用了。胶子基板构建引擎隐藏了新的胶子“客户端-maven-plugin”(主版)和“客户机级-插件”(社区)中的所有魔法。这提供了"mvn客户端:构建“的目标,它使用胶子基板将所有东西组装在一起,用于移动,甚至嵌入到Raspberry Pi上。使用基于ARM的openJDK,基于ARM的openJFX,甚至可以在android/ios设备上运行几乎纯的JavaFX应用程序,但是这个结果将无法访问这样的操作系统平台。为此,有胶子附加,它定义抽象API并在特定的平台上实现它们,以提供对不属于JavaFX的东西的访问,并试图以统一的方式完成它。当你开发应用程序时,你可以把它变成桌面,即使没有内置本机映像也可以运行它。事实上,它是推荐的,因为您拥有所有的工具。只有当最终应用程序按预期工作时,您才能执行"mvn客户端:构建“和其他步骤,将其传递给设备或模拟器,以便在那里进行测试。您还提供了一些基于安卓和iOS的统一的基于用户界面的界面增强界面。不过,它并不是本地平台。它并不适用于所有类型的应用程序,但从我的观点来看,这足以让我做一些可以分发给苹果和谷歌商店的事情。是的,仍然有一些怪癖,大部分取决于附加实现。考虑到这是一种HAL/PAL -硬件或平台抽象层,但要谨慎行事。它在这里还没有很好的定义,一些硬件访问还没有附加桌面实现。有些在桌面上是没有意义的,耶。但是我可以想象开发至少是模拟桌面实现,有某种配套的开发应用程序可以帮助测试桌面上的所有东西,然后才能在设备上最终部署。附件对于平台来说是一组相当平坦的抽象,只是有些东西仍然缺少。任何拥有AndroidSDK+NDK和iOS的专家都可以尝试在那里扩展他的应用程序所缺少的内容。
旧文章(2014年),写得很好,但适用于旧方法(强烈警告!):https://www.infoq.com/articles/Building-JavaFX-Android-Apps/
新视频,描述甚至旧的方法(46:42)和新的衬底-构建引擎(50:52) https://drive.google.com/file/d/1Td9rZLh-1sY-GylBcPIrpM9028GJ43T7/view。
对于“基板”术语,比较一下关于GraalVM JDK和胶子基板github:https://en.wikipedia.org/wiki/GraalVM https://github.com/gluonhq/substrate的情况。
发布于 2021-03-17 06:17:42
我在开始研究胶子的时候也读得太多了.有旧的方法(javafxport,robovm,android粘合)和新的(grallvm基板)有时混合,不幸的是,一些内部命名胶子基板也注意到"VM“等.但没问题。在代码融合阶段之后,我回到了用http://openjfx.io绘制的画板上,从纯JavaFX开始(mvn :run,mvn:javafx:jlink),从字面上讲,开始结束。学习maven (更容易,必需)和gradle (至少阅读构建脚本)基础知识。请注意,使用旧的胶子方法可以很自然地与android环境集成,但现在它只提供全方位的附加服务。事实上,本地的胶子应用程序生活在android环境之外。它不是由DalvikJava解释的,它是纯本地的,您需要Gluon.Attach层,它与安卓和ios运行时接口,有时还提供桌面实现(不是强制性的,不是测试的,不是强制的,不是强制的,不是模拟的,而是.浏览附加服务资源,了解那里现在有什么)。在您能够根据openjfx.io连接javafx应用程序之后,再转到github上的胶子示例并尝试它们,现在您可以做mvn客户端:build(如果并且只有当您已经安装好VS2019 Community并运行客户端时:使用他的x64本地工具CMD构建-如果您在windows上-这都是用葡萄糖文档描述的-但忘了过多扫描互联网,坚持当前信息)
https://stackoverflow.com/questions/66514662
复制相似问题