8 个用于嵌入式开发的 Java 框架
Java 的创造者希望语言成为“一次编写,随处运行”,他们的成功在嵌入式世界中最为明显。能够只编写一个版本的 Java 程序并以接近相同的方式运行无处不在的二进制文件对于为小型设备和隐藏计算机创建软件的团队来说是一个很大的吸引力。在许多情况下,这些开发人员对将在最终出货产品中运行的 CPU 了解不多,他们也不需要了解。
Java 可以在任何地方运行的灵活性从长远来看也有助于产品团队,因为第二代、第三代或第四代产品可能会在不同的芯片上运行。 通常只需很少或无需额外编码即可对软件进行调整。
今天,许多 Java 框架用于创建嵌入式 Java 应用程序。 有些是旨在用于多种类型机器的通用工具。 它们通常是团队创建新应用程序的最佳起点。
其他框架是为特定设备或设备系列开发的。 这些可能包括编程基础和支持您的应用程序将在其上运行的设备或其他产品的功能。 此类嵌入式 Java 框架的最常见示例可能是 Android,开发人员使用它为 Android 手机、Chromebook 和电视等其他设备创建应用程序。
这里有八个很棒的嵌入式 Java 框架。 它们中的每一个都利用了 Java 平台的稳定性和广度以及适用于小型设备和隐藏计算机的第三方库。 这些框架采用了传统的 Java 技术和方法,以便在嵌入式市场中运行得更快、更轻。
安卓
Android 可能是最著名的 Java 嵌入式框架。 它最初是为谷歌为与苹果竞争而开发的手机创建应用程序的基础。 许多原始代码库都是开源的,现在许多其他类型的设备(不仅仅是手机)都支持 Android 应用程序。 用于 Chromebook 的谷歌 ChromeOS 只是一个例子。 数十个小盒子将 Android 应用程序带到客厅的大平面屏幕上。
编写 Android 应用程序是一种针对所有这些设备的简单方法。 它还允许设备创建者向第三方开发者开放他们的产品。
一些开发人员只使用基本的 Android 库,这对于许多程序来说已经足够了。 其他人使用位于 Android 之上的框架。 一些最流行的是 Ionic、Flutter 和 Framework7。 一个常见的功能让开发人员可以将设计重新用于 iOS 等其他平台。 例如,Flutter 针对六个不同的平台。
Java嵌入式框架
Java Embedded Framework 使开发人员可以更轻松地编写与嵌入式系统中常见的接口对话的高级 Java 代码。 流行的例子是 Raspberry Pi 和 Orange Pi。 使用此框架,您无需掌握与 SPI、I2C、串行、GPIO 或单线等硬件接口通信所需的低级编程。 该框架的开发人员已经为您处理了其中的大部分。
Java Embedded Framework 分为几个主要模块。 主模块直接连接到控制电路板的 Linux 操作系统层。 它简化了使用纯 Java 连接到操作系统层上的许多任务。 还有这些小板上常见的主要硬件组件的驱动程序。
甲骨文事件处理
嵌入式设备的其中一项工作是捕获数据。 例如,工厂车间依靠嵌入式机器来跟踪生产和观察异常情况。 Oracle 事件处理框架是 Oracle 事件驱动服务器的轻量级版本,它使设备能够捕获事件、过滤事件并根据需要传递它们。 一些配置语法是从 SQL 借来的,这使得它相对容易上手。 该框架的事件处理模型还可以深入事件流以查找数据中的相关性和其他模式。
球衣
如果一项工作需要对嵌入式设备进行编程以响应 RESTful 事件,那么 Jersey 是一个不错的选择。 通过扩展 JAX-RS 工具包,它针对处理来来去去的 JSON 数据包进行了优化。 架构师喜欢这个解决方案,因为它可能是自动与设备通信的最佳方式之一。
Jersey 提供了一些额外功能,包括“分块”响应的能力。 这意味着存储数据,然后以一大块的形式发送。 分块对于并不总是连接到互联网的设备特别有用。 它还有助于减少任何负责与许多设备通信的中央服务器的负载。
垂直.x
许多人将 Vert.x 视为构建全功能 Web 应用程序的框架。 好的是它被分解成模块,您不必使用所有模块。 Vert.x 的核心包含用于编写与世界和机器交互的服务的大部分重要代码。 任何创建基本工具的人都可以依赖 Vert.x 框架的网络和文件系统协议来设置处理传入和传出请求的流。
一些 Vert.x 模块可能非常适合嵌入式任务。 例如,OpenAPI 和 API 服务库执行许多支持 API 的杂务。 GraphQL 库包含支持 GraphQL 调用所需的例程。 这些库主要侧重于构建 Web 应用程序和 Web 服务,但它们也可用于处理更简单的通信。
下拉精灵
如果目标是构建简单、强大且 RESTful 的 Web 服务,许多 Java 开发人员会转向 Dropwizard。 它也是嵌入式应用程序的绝佳选择。 您可以使用 Web 服务 API 来控制和配置设备,其他设备可以通过其 API 访问该服务。 人们可以使用一些 JavaScript 通过静态 HTML 页面来控制服务。
Dropwizard 分为许多较小的模块,可以根据您需要的功能包含或排除这些模块。 核心和数据库模块适用于基本任务。 与您的服务交互的人可以使用表单或视图模块。 身份验证通常是个好主意,Dropwizard 的身份验证模块支持基本和 OAuth2 协议。
阿帕奇米娜
任何需要强大网络层的应用程序都可以使用 Apache Mina 以安全可靠的方式处理一些不同的 NDP(邻居发现协议)或 TCP 连接。 该代码构建在新的 IO 类 (Java NIO) 之上,因此开发人员可以以更抽象的方式处理传入或传出的数据。 它的代码主要是事件驱动的,使开发人员无需介意网络接口。
Java卡
一些嵌入式处理器包裹在额外的安全层中,以帮助处理敏感数据,例如金融交易的详细信息。 Oracle 的 Java Card 支持在诸如防篡改芯片之类的安全飞地内运行多个应用程序。 这些 CPU 通常速度较慢且内存较少,并且 Java Card 的框架被精简以使用更少的资源平稳运行。
Java Web 框架呢?
虽然本文重点介绍了为嵌入式机器设计的框架,但现实是越来越多的开发人员正在为嵌入式设备创建 Web 应用程序。 较小的设备可能功能较弱,但它们通常具有足够的 RAM 和 CPU 能力来为少数客户端运行 Web 服务器应用程序。 不是为开放互联网上的十亿用户设计的应用程序可以在嵌入式系统中正常运行。
这通常是一个很好的解决方案,因为它允许用户通过 Web 应用程序连接到设备。 开发人员可以利用基本网站的所有标准功能。
许多流行的 Web 应用程序框架在小型机器上运行得非常好。 这部分是由于推动缩小和简化 Java Web 应用程序的服务器端。 较新的轻量级框架,如 Spring Boot、Vert.x 和 Vaadin(另请参阅 Hilla),都是可靠的选择。 一些嵌入式开发人员甚至可以使用较旧、较重的框架,如 Spring、Struts 或 JavaServer Faces。
所有这些框架都可以追溯到服务器还不那么强大的年代。 它们可以很好地用于需要一个用户与软件交互并且嵌入式设备相对强大的场景。
为嵌入式应用程序使用标准 Java
一些开发人员不需要使用嵌入式框架,因为他们从标准 Java 版本中获得了所需的库和功能。 Java Micro Edition (JME) 有多个版本,有些是专门为嵌入式系统设计的。 它们提供重要的 Java 库,例如用于身份验证的 OAuth 库和用于解析和编写消息的 JSON 库。 在某些情况下,这可能就足够了。
拥有更大、更强大电路板的开发人员甚至可以将 Java 标准版用于小型设备上的嵌入式应用程序。 Oracle Java SE Embedded 是为嵌入式世界优化的标准 Java 版本。
Oracle 通过提供标准二进制文件来支持许多不同类型的设备。 例如,Raspberry Pi 和其他一些小型嵌入式系统是预构建的。 甲骨文还支持重要的细分市场,例如电话和电视。
对于基本的嵌入式 Java 开发项目,从 Oracle 的标准下载可以提供您需要的一切。