Google Inbox是如何实现70%的代码跨平台重用的

当前,开发一款高人气的移动应用并不是一件容易的事情,开发者不得不实现多个平台(如iOS、 Android、WP以及 Web)的版本以及针对某个平台某个版本开发单独的版本,这就意味着同一个应用需要开发不同的版本,直接导致了开发工作量的增大,同时也意味着带来更多的Bug。然而,在Google Inbox项目中,Google Inbox 项目成员通过分离UI代码和业务逻辑代码,并利用Ajax应用开发框架GWT(全称Google Web Toolkit)和Java/Objective-C代码转换工具J2ObjC实现了跨iOS、Android、Web三个平台,并复用了70%的后台代码逻辑,从而节省了大量的时间和成本。

在产品设计时,Google Inbox项目组成员考虑到提醒、本地存储、缓存、联系人等功能没有必要在三个平台上都单独实现,所以将它们高度抽象为程序组件。代码开发过程中,开发人员首先开发出程序组件的Java实现,以供Android UI调用;然后使用GWT将组件的Java代码编译成JavaScript代码,以供Web调用;通过J2ObjC将组件的Java代码编译成Objective-C代码,以供iOS UI调用,从而实现了代码的高复用。另外,Google Inbox项目组成员考虑到了不同平台的UI特性各有不同,盲目统一UI会导致非常糟糕的用户体验,所以他们并没有实现跨平台UI部分的代码复用。

众所周知,跨平台代码复用通常会带来一些性能上的问题。Google Inbox 项目总监Garrick Toubassi做了如下解释:

项目成员做了大量的性能测试,测试结果表明性能上的影响是微不足道的。这是因为他们没有加入额外的中间层来处理跨平台兼容性,所有代码最后都是平台原生代码,并且J2ObjC 编译也没有增加对象数量和对象图复杂度。

Reddit的用户偏重对跨平台移动开发方代码复用方案的关注,并对方案中使用的GWT和J2ObjC技术进行了讨论。用户tieTYT间接地表达了对该方案的肯定,他说评论到:

编写一个完全本地化的应用是一种不负责任的行为,开发者不得不利用不同的语言实现某个应用,一旦发现该应用的某个Bug,这就意味着进行两次Bug的修复。同时,他还支持跨移动平台的应用的开发是做不到UI代码复用的。

Hack News的用户偏重对Google Inbox的关注,用户jaimeyap 认为客户端和服务端代码的复用都是很重要的,不能只局限于客户端代码的复用,还认为Android先行 (Android-first) 的移动开发策略是一个非常合理的开发路线。而用户shadowmint 认为使用GWT开发是一个令人头疼的问题。

Google 的这套方案解决了跨平台移动开发中的一个很重要的问题,同时也推进了其Android先行 (Android-first) 的移动开发策略。另外,微软的Microsoft Office项目也竭力覆盖了iOS、Android和 WinRT等平台,并计划实现96%代码复用;云存储软件Dropbox 使用 C++ 也实现了Android和iOS之间代码高的复用,详细介绍可参考InfoQ的相关报道和Oleb的相关报道。

感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(Google Inbox是如何实现70%的代码跨平台重用的)