Codename OneCodename One入门


备注

本节概述了codenameone是什么,以及开发人员为什么要使用它。

它还应该提到codenameone中的任何大型主题,并链接到相关主题。由于codenameone的文档是新的,您可能需要创建这些相关主题的初始版本。

安装和设置

安装

在NetBeans中安装Codename One

这些说明假定您已下载最新版本的NetBeans(此时为8.x),已安装并启动它。

  • 选择Tools-> Plugins菜单选项工具 - >插件菜单选项

  • 选择“可用插件”选项卡

  • 检查CodenameOne插件Netbeans插件安装向导

  • 单击下面的install 按钮。按照向导说明安装插件Netbeans插件安装向导步骤2

在Eclipse中安装Codename One

启动Eclipse并单击“ Help - >“ Install New Software 。你应该得到这个对话框

Eclipse安装新软件

粘贴https://www.codenameone.com/files/eclipse/site.xml 以获取要使用的位置,然后按Enter键。

选择条目并按照向导进行安装Eclipse安装向导选择条目

在IntelliJ IDEA中安装Codename One

下载并安装IntelliJ / IDEA。 请注意,Android Studio无法运行。

使用插件中心安装插件

使用插件中心的搜索功能查找并安装Codename One插件。

什么是Codename One以及它如何工作?

Codename One是一组用于移动应用程序开发的工具,它从Java中获取了大量的体系结构。

Codename One的使命宣言是:

将移动设备编程的复杂和分散的任务统一到一组工具,API和服务中。因此,在不牺牲开发人员的功能/控制的情况下,为移动应用程序开发创建了一种更易于管理的方法。

这实际上意味着将旧的“Write Once Run Anywhere”(WORA)Java口号带入移动设备,而不会将其“降低”到最低的公分母。

代号是如何工作的?

Codename One将多种技术和概念统一到一个外观中:

  • API - 抽象各种设备之间的差异。
  • 插件 - 客户端计算机上安装的唯一软件,它包括以下功能:
    • IDE集成 - 首选项,完成,发送本机构建的能力
    • 模拟器 - 本地设备模拟器,可在本地运行并允许调试应用程序
    • Designer / GUI Builder - 高级工具
  • 构建服务器 - 构建服务器接受插件发送的本机设备构建,并将二进制文件(JAR,而不是源代码)转换为本机应用程序,如下所述。
  • 云服务器 - 云服务器提供推送通知,云记录等功能。

Codename One工具链

为何构建服务器?

构建服务器允许构建没有Mac的本机iOS应用程序和没有Windows机器的本机Windows应用程序。它们消除了安装/更新复杂工具链的需要,并简化了右键单击构建本机应用程序的过程。

例如:由于构建本机iOS应用程序需要具有最新版xcode的Mac OS X计算机,因此Codename One会在云中维护此类计算机。当开发人员发送iOS版本时,这些Mac将用于使用ParparVM生成C源代码,然后它将使用xcode编译C源代码并使用xcode对生成的二进制文件进行签名。您可以将二进制文件安装到设备或为appstore构建分发二进制文件。由于生成了C代码,这也意味着在Apple发生更改的情况下,您的应用将是“面向未来”。您还可以将Objective-C本机代码注入到应用程序中,同时通过Codename One的“本机接口”功能使其保持100%可移植性。

订阅者可以使用Codename One的include sources功能接收C源代码,并使用这些源进行基准测试,调试设备等。

大多数其他平台也是如此。对于Android,J2ME和Blackberry,标准Java代码按原样执行。

通过在Codename One服务器上安装的retrolambda支持Java 8语法。这用于将字节码无缝转换为Java 5语法级别。 Java 5语法被转换为J2ME / Blackberry上的JDK 1.3 cldc子集,以在所有设备上提供这些语言功能和API。这是使用基于逆向服务器的基于服务器的字节码处理器和大量自定义代码完成的。请注意,此体系结构对开发人员是透明的,因为构建服务器抽象了设备之间的大部分痛苦差异。

为什么选择ParparVM

在iOS上,Codename One使用ParparVM将Java字节码转换为C代码,并拥有非阻塞GC以及64位/ bitcode支持。此VM在Codename One git存储库中是完全开源的。在过去,Codename One使用XMLVM以非常类似的方式生成本机代码,但XMLVM解决方案对于Codename One的需求来说过于通用。 ParparVM拥有一种将代码转换为C(类似于XMLVM)的独特架构,因为Codename One是唯一可以保证未来iOS兼容性的解决方案,因为官方支持的iOS工具链总是被用来代替无证件行为。

注意: XMLVM可以在理论上保证它,但不再维护它。

ParparVM相对于其他方法的主要优势是:

  • 真正原生 - 因为代码被转换为C而不是直接转换为ARM或LLVM代码,因此应用程序“更具原生性”。它使用Apple的官方工具和方法,可以从他们的进步中受益,例如最新的bitcode或分析功能。

  • 较小的类库 - ParparVM包含完整JavaAPI的一小部分,导致最终二进制文件小于替代数量级。这直接映射到性能和内存开销。

  • 简单且可扩展 - 要与ParparVM一起工作,您需要对C语言有一个基本的了解。这对于快速发展的移动开发世界至关重要,因为Apple改变了事情,我们需要一个更灵活的VM。

Windows Phone / UWP

Codename One在这些端口中有2个主要的Windows VM端口和3或4个渲染管道。

旧的Windows Phone端口使用XMLVM将Java字节码转换为C#。请注意,转换为C#的XMLVM后端与过去用于转换iOS代码的后端非常不同。

Codename One现在通过利用iKVM的修改版本来构建本机Windows通用应用程序来瞄准UWP。

JavaScript端口

Codename One的JavaScript端口基于TeaVM项目的惊人工作。 TeaVM背后的团队有效地构建了一个JVM,它将Java字节码转换为JavaScript源代码,同时使用非常富有想象力的方法维护线程语义。

JavaScript端口允许未修改的Codename One应用程序在桌面或移动浏览器中运行。端口本身基于HTML5 Canvas API,提供了Codename One API的像素完美实现。

注意: JavaScript端口仅适用于Codename One的企业级订户。

桌面,Android,RIM和J2ME

Codename One的其他端口使用主机/环境上的VM来执行运行时。 https://github.com/orfjackal/retrolambda[Retrolambda]用于以便携方式提供Java 8语言功能,对于旧设备,retroweaver用于提供Java 5功能。

Android端口使用原生Android工具,包括最新版本中的gradle构建环境。

桌面端口创建标准JavaSE应用程序,该应用程序与JRE和安装程序一起打包。

注意:桌面端口仅适用于Codename One的专业级订户。

轻量级组件

使Codename One脱颖而出的是它采用“轻量级架构”的UI所采用的方法,从而允许UI在所有平台上无缝工作。因此,大多数UI都是用Java开发的,因此非常便携和可调试。轻量级架构仍然包括在“轻量级”中嵌入“重量级”小部件的能力。

轻量级架构起源

轻量级组件可以追溯到Smalltalk框架,这个概念在Swing的Java世界中得到了普及。 Swing是Codename One的前身LWUIT的主要灵感来源。多年来,许多框架采用了这种方法,包括JavaFX和JavaScript世界中最近的Ionic。

在Codename One

轻量级组件是完全用Java编写的组件,它绘制自己的接口并处理自己的事件/状态。这具有巨大的可移植性优势,因为相同的代码在所有平台上执行,但它具有许多额外的优点。

通过使用标准继承和覆盖绘制/事件处理,可以无限地自定义轻量级组件。由于轻量级组件完全用Java编写,因此开发人员可以在模拟器和GUI构建器中准确地预览应用程序。这避免了其他WORA解决方案的许多常见缺陷,其中平台特定行为挫败了任何节省的努力。因此,在调试深奥设备时,所有在编码中节省的努力都丢失了。

Codename One通过使用大多数平台的原生游戏API(例如iOS上的OpenGL ES)来实现快速性能。

Codename One中的版本

关于Codename One的一个令人困惑的事情是版本。由于Codename One是SaaS产品,因此版本控制并不像2.x或3.x一样简单。但是,为了符合这一惯例,Codename One确实制作了版本化的版本,这些版本会导致一般的混淆。

当发布一个版本的Codename One时,版本号指的是发布时的库。然后冻结这些库,并使其可供使用Versioned Builds功能的开发人员使用。该插件包括设计器以及与版本化版本无关的所有开发,继续在发布后立即进行定期更新。对于直接转换到标准更新周期的构建服务器也是如此。