写点什么

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

2014 年 12 月 03 日

当前,开发一款高人气的移动应用并不是一件容易的事情,开发者不得不实现多个平台(如 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 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 12 月 03 日 06:013019
用户头像

发布了 92 篇内容, 共 37.8 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

【架构师训练营 - week3 -1】作业

早睡早起

架构师训练营-作业3

进击的炮灰

手写单例模式

yupi

架构师训练营-总结3

进击的炮灰

蟒周刊/426: DjangoCon US 2020 取消了

ZoomQuiet大妈

Python 大妈 蟒营® Weekly 蟒周刊

2020互联网公司端午节礼盒合集!你最中意哪一款?

Java小咖秀

互联网人 端午节

数字货币监管当体现“中国之治”

CECBC区块链专委会

数字货币 CECBC 区块链技术 技术标准 准入和监管

【架构思维学习】 week03

chun1123

架构师训练营第三周课后作业

赵凯

设计模式

架构师训练营 - Task Week 3

brave heart

极客大学架构师训练营

面向对象的设计模式

WW

【架构师训练营 - week3 -2】总结

早睡早起

小师妹学JVM之:java的字节码byte code简介

程序那些事

Java JVM Java 25 周年 bytecode 字节码

【第三周】命题作业——单例及组合模式

三尾鱼

极客大学架构师训练营

极客大学架构师训练营 框架开发 上课总结 第五课

John(易筋)

极客时间 设计模式 极客大学 极客大学架构师训练营 框架开发

新手村:最适合新手的 Redis 基础

多选参数

数据库 redis redis6.0.0

可读代码编写炸鸡二(下篇) - 命名的歧义

多选参数

代码 代码优化 代码组织 代码规范

产品失败了,产品经理要不要承担责任?

涛哥

产品经理

组合模式应用

yupi

第三周作业

晨光

架构师训练营第三周-学习总结

架构师训练营 0 期第三周

Blink

让你眼前一亮的 10 大 TS 项目

阿宝哥

Java typescript Web 前端开发 开源项目

windows使用docker运行mysql等工具(二)安装运行mysql

Java旅途

MySQL Docker

极客大学架构师训练营 框架开发 第三次作业

John(易筋)

极客时间 设计模式 极客大学 极客大学架构师训练营 框架开发

架构师训练营第三周作业

极客大学架构师训练营

Breaking through Three Common Engineering Myths·英语阅读笔记

3.141516

可读代码编写炸鸡二(上篇) - 命名的长度

多选参数

代码 代码组织 代码规范

windows使用docker运行mysql等工具(一)windows安装docker

Java旅途

MySQL Docker

区块链改变数字营销与广告市场

CECBC区块链专委会

区块链技术 广告业 精准投放 去中介 公开透明

一个汉字占几个字节你真的记住了吗?

Java旅途

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