Google Inbox 是如何跨平臺重用程式碼的?

jnj發表於2014-11-27

原文連結《How Google Inbox shares 70% of its code across Android, iOS, and the Web

enter image description here

開發一個移動應用在當下並不是一件容易的事情。如果想要獲得最多的使用者,你的應用通常需要覆蓋 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 官方部落格

相關文章