70%的代码跨平台重用,Google Inbox 是如何做到的?

标签: 技术读物 编程工具 Google 移动应用 | 发表时间:2014-11-26 08:03 | 作者:jnj
出处:http://coolshell.cn

原文链接 http://arstechnica.com/information-technology/2014/11/how-google-inbox-shares-70-of-its-code-across-android-ios-and-the-web

inbox2-640x264

开发一个移动应用在当下并不是一件容易的事情。如果想要获得最多的用户,你的应用通常需要覆盖 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 官方博客

(转载本站文章请注明作者和出处 酷 壳 – CoolShell.cn ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——

相关文章

相关 [代码 跨平台 google] 推荐:

70%的代码跨平台重用,Google Inbox 是如何做到的?

- - 酷 壳 - CoolShell.cn
原文链接 http://arstechnica.com/information-technology/2014/11/how-google-inbox-shares-70-of-its-code-across-android-ios-and-the-web. 开发一个移动应用在当下并不是一件容易的事情.

跨平台终极聊天应用 Google Babble 细节披露

- - 谷奥——探寻谷歌的奥秘
我们之前报道过说Google正在打造一个终极的聊天应用Google Babble,最近. Droid-Life得到了一些细节,说确有其事,但这个服务的内部名称叫做Babel,而非Babble,目前已经在被一些Googler测试了. 这个服务的目的就是要实现跨平台的无缝聊天体验,包括Android、iOS、Chrome、Google+和Gmail,Babel除了一般的聊天功能,还具备高级群组对话、可跨平台查找聊天记录、可发送照片、改进的提醒功能和全新的基于对话的用户界面.

Google FlatBuffers——开源、跨平台的新一代序列化工具

- - 互联网 - ITeye博客
前段时间刚试用了一个序列化工具cereal,请看 cereal:C++实现的开源序列化库,打算再总结下我对google proto buf序列化库的使用呢,. 结果还没动手,大Google又出了一个新的、开源、跨平台的序列化工具:. 什么是Google FlatBuffers. FlatBuffers是一个开源的、跨平台的、高效的、提供了C++/Java接口的序列化工具库.

跨入OS X平台!Chrome不止是浏览器,它还是Google跨平台的未来

- - PingWest
Chrome 团队终于把 Chrome OS 式的应用启动器也带入了 OS X 平台,用户可以自行开启(开启方法见文末). 去年,Chromium 实验室就已经为 Windows 平台增加了这个应用启动器功能. 目前除了 Linux,所有主流桌面平台都可以体验到与 Chrome OS 下一致的应用启动器功能.

Google 是如何做代码审查的

- litefy - python.cn(jobs, news)
在上一篇文章中提到过,我已经不在Google工作了. 我还没有想清楚应该去哪里—有两三个非常好的工作机会摆在我面前. 因为在这段做决定时间里,我不再受雇于任何人,我想可以写一些专业性的东西,一些很有趣,但也会在同事和管理工作中导致关系紧张的东西. Google是一个非常优秀的公司. 他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部.

Google放弃Buzz和代码搜索

- 2楼水饺 - Solidot
七匹狼钱包 写道 "Google产品副总裁布拉德利-霍洛维茨(Bradley Horowitz)在官方博客宣布将终止多项产品和服务,包括代码搜索引擎、Buzz、Jaiku、iGoogle社交功能,以及针对Google搜索的大学搜索项目.

[原]Eclipse中使用google代码风格

- - 傲慢的上校的专栏
第一步,找到文件(有些废话),在 https://code.google.com/p/google-styleguide/source/checkout中通过svn获取eclipse-java-google-style.xml(不愿意麻烦,也可通过csdn下载: http://download.csdn.net/detail/aomandeshangxiao/5209114).

Google+源代码泄露Google可能在做类似Quora的Google Experts,整合Google Voice,增加留言墙等

- kxxoling - 36氪
开发者Matt Mastracci在浏览Google+源代码时发现了很多隐藏的功能,为此他写了一篇文章,他发现:. Google+ Wall(留言墙). 很像Facebook留言墙,基本上是用户A可以在用户B的个人档案页面留言,而不必非在自己的Timelin中增加一条消息. Google Experts(专家).

FSF建议Google公开Gmail的Javascript代码

- greenar - Solidot
自由软件基金会(FSF)主席Richard Stallman声称,非自由的基于AJAX的Web应用是“Javascript trap”. 为了解决这一问题,FSF建议Google在自由软件许可证下公开Gmail的Javascript源代码. 当你访问Gmail,浏览器会下载和运行几千行Javascript代码.

Google公布语音和视频聊天源代码

- 意大利种马 - Solidot
Google在2010年以6820万美元收购了VoIP软件开发商Global IP Solutions,获得了Web即时通信技术WebRTC. 现在,Google在免专利的许可证下发布了WebRTC的源代码,允许开发者在其Web应用中嵌入实时语音和视频聊天功能. 上个月微软以85亿美元收购了VoIP服务商Skype.