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工具鏈

為何構建服務器?

構建服務器允許構建沒有Ma​​c的本機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功能的開發人員使用。該插件包括設計器以及與版本化版本無關的所有開發,繼續在發布後立即進行定期更新。對於直接轉換到標準更新周期的構建服務器也是如此。