写点什么

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:013044
用户头像

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

关注

评论

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

有趣的条漫版 HashMap,25岁大爷都能看懂

古时的风筝

hashmap

知乎,挣钱?果然有长尾效应

非著名程序员

程序员 副业 副业赚钱 知乎 好物推荐

单例模式的几种写法你用的哪种?

Java小咖秀

Java 设计模式 23种设计模式

区块链加持的家用摄像头能拯救你的隐私吗?

CECBC区块链专委会

图解:如何实现最小生成树

淡蓝色

Java 数据结构 算法

变性手术后,产品总监和当当网打起了官司

赵新龙

法律 判决书 案例

30分钟学会应用正则表达式

墨灵

正则表达式 前端进阶训练营

朱嘉明:区块链成为经济转型、形成产业新业态的技术手段

CECBC区块链专委会

第六周总结

Geek_a327d3

第六周作业

Geek_a327d3

寻找握剑的手,青睐懂行的人

脑极体

计算机网络基础(四)---网络层-ARP协议与RARP协议

书旅

laravel 计算机网络 网络协议 计算机基础 网络层

探索无限潜能,英特尔神经拟态计算除了有“嗅觉”还能有“触觉”

最新动态

一文快速掌握华为云IPv6基础知识及使用指南

华为云开发者社区

物联网中台 物联网 网络 华为云

技术科普丨服务发现和负载均衡的来龙去脉

华为云开发者社区

负载均衡 微服务 开发者工具 服务端 服务

《北京市政务服务领域区块链应用创新蓝皮书(第一版)》正式发布

CECBC区块链专委会

腾讯面了五轮,面委挂了,挂的原因让大家唏嘘...

程序员生活志

腾讯 面试

数十家技术社区联名推荐的GeekOnline来了!

Geek_116789

我从LongAdder中窥探到了高并发的秘籍,上面只写了两个字...

why技术

jdk 高并发 LongAdder

Idea中关于Js中的一些警告

阡陌r

猿灯塔:spring Boot Starter开发及源码刨析(七)

猿灯塔

信创舆情一线--十五部门印发指导意见进一步促进服务型制造发展

统小信uos

解决方案|智能消防预警系统突破高层楼房限制

华为云开发者社区

AI 物联网 边缘计算 华为云

如何帮助技术员工高效成长?这几家企业的做法值得借鉴

极客时间企业版

研发管理 研发团队培训

中台,很多人理解的都不对

DeeperMan

数据中台 中台战略

重读vue2.0风格指南,我整理了这些关键规则

前端有的玩

Java Vue 代码规范

API接口管理平台YAPI的搭建

Man

DevOps APi设计 YAPI

数据分析师完整的指标体系构建 (干货)

博文视点Broadview

数据挖掘 读书笔记 数据分析 数据 求职

linux上强大的字符串匹配工具详解-grep

X先生

Shell grep

如何进行需求梳理及埋点方案设计

易观大数据

以中立性的立场看Severless的目标和流派

韩超

云原生 serverles

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