在当下开发一款高人气的移动应用并不是一件容易的事,如果想要获得最多的用户,应用通常需要覆盖 iOS, Android,和 Web 三大平台。这就意味着同一个应用需要开发三个版本,使用 Objective-C 或者 Swift 开发 iOS 版本,使用 Java 开发 Android 版本,使用 JavaScript/CSS/HTML5 开发 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-first的移动开发策略。
另外,Google在2012年发布了J2ObjC的alpha版本并公布了部分实现细节之后,于最近发布了J2ObjC的稳定版1.0版本。除了Inbox之外,还用于Calendar、Docs、Sheets、Slides和Google My Business等Google产品的iOS版本。
回复数字浏览风向标近期热门文章1. 程序员的4条职业发展路线
2. 用MySQL存储PB级别的数据,还得自动化备份
3. NoSQL类型知多少
4. 代码审查最佳实践
5. NoSQL中的分布式、容错事务
6. 如何成为出色的软件工匠
7. 持续集成已死?
8. 微服务,让开发过程更简单还是更复杂?
微信公众号“技术风向标”,关注IT趋势,承载前沿、深入、有温度的内容。感兴趣的读者可以搜索ID:jishuqushi,或者长按下方二维码加关注。
|