Google Inbox 是如何跨平臺重用程式碼的?
原文連結《How Google Inbox shares 70% of its code across Android, iOS, and the Web》
開發一個移動應用在當下並不是一件容易的事情。如果想要獲得最多的使用者,你的應用通常需要覆蓋 iOS, Android, 和 Web 三大平臺。這就意味著同一個應用需要開發三個版本,使用 Objective-C 或者 Swift 開發 iOS 版本,使用 Java 開發 Android 版本,使用 JavaScript/CSS/HTML5 開發 Web 版本。工作量增大的同時也意味著有更多的 bug 需要修復。
這個問題也是 Google 在開發 Google Inbox 時致力要解決的。在最近釋出的這款應用中,Google 使用了一些工具實現了70%的程式碼跨平臺複用。
Google Inbox 覆蓋 iOS, Android, Web 三個平臺,它們使用的是同一個後臺程式碼邏輯,只是前端的使用者體驗和平臺相關特性的實現有所不同。Google 自主開發了一套輔助工具將 Android 版本的 Java 程式碼邏輯編譯為 Objective-C (針對 iOS 平臺) 和 JavaScript (針對 Web 瀏覽器)。 Java 到 JavaScript 的編譯由 Google Web Toolkit SDK 完成,Java 到 Objective-C 的編譯則由 J2ObjC (j2objc.org)來完成。
J2ObjC 是一個開源專案,由 Google 在2013年釋出。Google Sheets (Google Docs 中的電子表格部分) 也使用了 J2ObjC,而 Google Inbox 則是目前使用 J2Objc 最多的 Google 專案。
Google Inbox 複用的程式碼邏輯包括:對話 (conversations),提醒 (reminders),聯絡人 (contacts)。還有網路相關功能和離線同步。這些程式碼邏輯的複用節省了大量的時間和成本。
在產品設計時,Google 將這些可複用功能劃分為抽象的邏輯概念,比如:提醒的邏輯放在 "reminder.java" 中,可以被 Android UI 呼叫。對 iOS 版本而言,J2ObjC 將 "reminder.java" 編譯成 Objective-C 程式碼,再由 iOS UI 呼叫。
Google 沒有跨平臺編譯 UI 部分的程式碼,因為不同平臺的UI特性各有不同,盲目統一會導致非常糟糕的使用者體驗。程式碼複用只是針對可以共享的後臺邏輯,前端的UI實現是完全原生 (native) 的。這與 Xamarin (一個基於 Microsoft C# 的跨平臺移動開發工具) 提出的概念類似。
跨平臺程式碼複用通常會帶來一些效能上的問題。Garrick Toubassi,Engineering Director 和 Google Inbox 專案組成員,對此表示: “效能上的影響如果有的話,也可以說是微不足道的。我們做過大量的效能測試。因為沒有加入額外的中間層來處理跨平臺相容性,所有程式碼最後都是平臺原生程式碼。J2ObjC 編譯生成的目的碼和 Java 原始碼擁有大致相同的物件數量和物件圖譜複雜度 (object graph complexity) ”。
Google 使用的整套方法解決了跨平臺移動開發中的一個很重要的問題,同時也推進了安卓先行 (Android-first) 的移動開發策略。
更多 Google Inbox 文章請猛戳 Gmail 官方部落格。
相關文章
- 低程式碼平臺是如何提高成本效益的
- Java是如何實現跨平臺的?原理是什麼?Java
- Java如何實現跨平臺?原理是怎樣的?Java
- C#移動跨平臺開發(2)Xamarin移動跨平臺解決方案是如何工作的?C#
- Sublime Text——高效的跨平臺程式碼編輯器
- Google是如何做程式碼審查的?Go
- Google釋出跨雲Serverless管理平臺KnativeGoServer
- python是跨平臺的語言嗎Python
- 盲人 Google 工程師是如何寫程式碼的?Go工程師
- 跨平臺程式碼三種組織方式詳解
- 開源、高效、跨平臺:深剖Google FlatBuffers工作原理Go
- Google新推出的跨平臺聊天應用Hangouts不支援XMPPGo
- 跨平臺還是Java的最大優勢嗎?Java
- 什麼是平臺化?平臺化是如何發展的?
- Facebook 是如何構建第一個跨平臺的 React Native APPReact NativeAPP
- Facebook 是如何做第一個跨平臺的 React Native APPReact NativeAPP
- 什麼是低碼開發平臺?低程式碼平臺需要編碼嗎?
- [轉]:多程式等待的跨平臺實現
- 使用c++開發跨平臺的程式C++
- 低程式碼開發平臺是什麼意思?低程式碼開發平臺優勢!
- 谷歌將關閉程式碼專案管理平臺Google Code谷歌專案管理Go
- 低程式碼平臺會是軟體業的未來麼?
- JAVA的跨平臺原理Java
- rust跨平臺Rust
- 如何選擇低程式碼開發平臺,分析平臺的解決方案
- 低程式碼是什麼意思?低程式碼平臺的技術特點是什麼?
- Facebook:我們是如何構建第一個跨平臺的 React Native APPReact NativeAPP
- 低程式碼平臺的常見安全漏洞,J2PaaS低程式碼平臺如何解決?
- 低程式碼是開發的未來嗎?淺談低程式碼平臺
- Google Protobuf Primer (1) 實現跨平臺跨語言的序列化/反序列化Go
- 低程式碼開發平臺是什麼意思?
- 用低程式碼平臺搭建應用程式的流程是什麼
- 如何部署 Joget 無程式碼開發者平臺 - thenewstack
- 程式碼質量第 2 層 - 可重用的程式碼
- 跨平臺編譯編譯
- .NET Core 跨平臺
- WPF跨平臺方案?
- rman 跨平臺支援