70%的代碼跨平臺重用,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 官方博客。
<span id="shareA4" class="fl">
</span>
</div>