什麼是 Codename One 它是如何工作的
Codename One 是一組用於移動應用程式開發的工具,它從 Java 中獲取了大量的體系結構。
Codename One 的使命宣告是:
將移動裝置程式設計的複雜和分散的任務統一到一組工具,API 和服務中。因此,在不犧牲開發人員的功能/控制的情況下,為移動應用程式開發建立了一種更易於管理的方法。
這實際上意味著將舊的 Write Once Run Anywhere
(WORA)Java 口號帶入移動裝置,而不會將其降低到最低的公分母。
代號是如何工作的?
Codename One 將多種技術和概念統一到一個外觀中:
- API - 抽象各種裝置之間的差異。
- 外掛 - 客戶端計算機上安裝的唯一軟體,它包括以下功能:
- IDE 整合 - 首選項,完成,傳送本機構建的能力
- 模擬器 - 本地裝置模擬器,可在本地執行並允許除錯應用程式
- Designer / GUI Builder - 高階工具
- 構建伺服器 - 構建伺服器接受外掛傳送的本機裝置構建,並將二進位制檔案(JAR,而不是原始碼)轉換為本機應用程式,如下所述。
- 雲伺服器 - 雲伺服器提供推送通知,雲記錄等功能。
為何構建伺服器?
構建伺服器允許構建沒有 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 功能的開發人員使用。該外掛包括設計器以及與版本化版本無關的所有開發,繼續在釋出後立即進行定期更新。對於直接轉換到標準更新週期的構建伺服器也是如此。