微信号:infoqchina

介绍:有内容的技术社区媒体

手机和平板之外——带你理解跨设备的Android 技术体系

2014-07-31 19:05 InfoQ

如果给 Android 撰写一个编年史,那每年的 Google I/O 都是一个新的 Android 年的开启,它预示着 Android 在后续一年新的方向和趋势。

2014 年的 Google I/O,新版本的 Android L 揭开面纱,它用 Material Design 重新定义了 Android 的交互方式。这种交互方式不仅适用于 Android 手机、平板等移动设备,也会延续到浏览器、手表、电视、汽车——这些Android 即将出没的地方。Android Wear 定义了 Android 在可穿戴设备上的解决方案,Android Auto 将把 Android 带进福特、带进奥迪、带进你的座驾中,而 Android TV 则是 Android 占领电视、占领客厅的再一次尝试。


在这些眼花缭乱的新名词后面,是怎样的技术实现架构?体现了什么样的设计思想?对于开发者来说,要怎么理解这些技术,并更好的利用新的平台和机会接入自己的应用?


生来就为无处不在的 Android

Android Wear、Android Auto、AndroidTV……这些 Android 打头的不同设备解决方案目标是为了什么?这和市面上各式各样的 Android 电视、Android 手表、Android 盒子有什么不同?要说清楚这个,先要聊聊另一个话题:“可移植性”。


从技术角度来看,Android 在整体架构设计上天生具有良好的可移植性,能够较为轻松的适配到不同的硬件设备上。Android 系统其实是构建在 Linux 内核之上的一个“运行时”(Android Runtime),由于 Linux 具有强大的可移植性,几乎可以嵌入到任何一个设备中运行,所以移植 Android 到新的硬件设备只需实现新的硬件抽象层(Hardware Abstraction LayerHAL),按 Android 定义的标准为硬件上的WiFi、相机等设备撰写驱动,而不需要修改上层的相关实现,难度大幅降低。


了解这一点就可以知道,将 Android 移植到不同的设备上并不是困难的事情,这也是非官方的 Android 电视、盒子可以很容易实现的原因。正是基于此,Android Wear 这些项目期望解决的并不是移植的问题,而是移植以后需要考虑的问题,包括:

  • 统一的交互模式。Material Design 为不同的设备构建了统一的“设计语言”: Android WearAndroid TV 等项目在 Material Design 的设计语言基础上,针对不同设备的交互特征提供了界面库支持,使得应用适配不同的设备变得简单起来。

  • 简单而统一的互联互通。Android Wear 这些解决方案,将互联互通实现到了 Google Play 服务中,实现到了 Android 系统中,使得连接变得简单而无缝,为开发者提供了更多的可能性。

  • 更好的解决核心需求。为什么出门要戴手表?为什么汽车需要车载系统?为什么客厅要摆电视?手表、电视这样的设备原本就有它需要解决的核心需求,引入 Android 到这些设备,本质上是为了更好的解决用户在这些场景的这些核心需求。Android WearAndroid TV 这些项目一方面是引入了大量 Google 服务来解决这些设备的核心需求,另一方面也为开发者提供了易用的、针对不同硬件场景的 API 来接入更多好的服务,一并更好满足这些需求。


Android Wear

Android Wear 是基于 Android 的可穿戴设备的解决方案。早在今年的 3 月份,Google 就发布了 Android Wear 的预览版本,当时还并没有任何支持 Android Wear 的设备,开发者仅能够通过模拟器来感受 Android Wear 的面貌。


而到了 2014 年的 Google I/OAndroid Wear 的版本已然打磨成型正式发布。


连接

Android Wear 的预览版至今,连接模块的实现架构经历了不小的调整。在预览版本中,连接的实现主要依赖安装在手机上的 Android Wear 应用和在手表上的 Android Wear 系统来实现。Android Wear 应用中包含了连接相关“服务端”的实现,而 Android Wear 设备作为“客户端”接入进来,如果手机上其他应用需要为 Android Wear 提供其他信息,可以通过绑定 Android Wear 应用声明多个的 Service,通过 Remote APIs 发送消息。


正式版的 Android Wear 实现引入了 Google Play 服务(Google Play Services)作为连接模块,Android Wear 应用和其他第三方应用的实现一样,通过 Google Play 服务的 SDK 构建连接发送数据。在可穿戴设备一端开发应用,也可以通过同样的模式来获取连接设备、读写数据。


通信

当设备连接完成后,就可以互相通信,交换数据了。在 Google Play 服务内部,连接和通信的协议都是通过 Protocol Buffers 定义的,但对上层屏蔽了这些细节,只暴露了三组接口,定义在 Google Play 服务的 gms.wearable 包中。


高度抽象的通信层应用在了 Android Wear Android Auto 等解决方案中。比如在 Android Auto 中,车载设备的应用也是通过 Message API Data API 于移动设备交互数据的。Google Play 服务统一的通信层设计、一致的异步开发模式,使得跨设备的通信实现非常地简单易学。


交互

完成一个可穿戴应用的开发,除了有底层的连接和通信支持,还需要完成交互界面的开发。Android Wear 的交互开发和 Android 移动设备大同小异,相同之处在于 Android Wear 的界面构成也是同样以 Activity 为单元,整体构成完全一致,不同之处是 Android Wear 为其定制了一套扩展的 UI 库,来满足手表等设备的交互需求。


这个 UI 库的设计,主要是为了让用户能够“看一眼”可穿戴设备的屏幕便能立刻了解相关信息,所以,它定义了一些适合可穿戴设备交互风格的 ActivityFragment View


拥抱 Android Wear

Android Wear 的目标,是让用户从不断的低头看手机中解脱出来,在可穿戴设备上更便捷的获取想要的信息。Android Wear 认为,各个应用呈现在通知栏上的通知信息,是移动设备中最需要立刻告知用户的内容。因此,当移动设备收到通知时,会立刻将通知传递到 Android Wear 可穿戴设备上,甚至还会发送至 Android AutoAndroid TV 等其他设备上,就是为了让用户随时随地可以了解有什么信息需要他立刻处理,而不需要掏出手机、点亮屏幕、拉下通知栏。


所以对于 Android 移动应用的开发者来说,拥抱 Android Wear 其实非常简单,那就是优化一下自己应用的通知栏。


无处不在的 Android

如果说 Android Wear 为风起云涌的可穿戴设备定义了一个标准方案,那么 Android Auto 则是对期望对纷繁的车载系统做一次统一。从产品和技术角度来看,Android Auto 都与 Android Wear 非常相近。而两者最大的区别,在于引入的解决核心需求的手段不同,比如,Android Auto 认为用户在驾驶过程中,听音乐是非常核心的需求,因此它在多媒体的传输上做了大量的技术优化,甚至在传输链路上优先支持了 USB 的有线传输,在这个角度来看,说 Android Auto 是把汽车“穿戴”在了用户身上也不为过。


与之相比,Android TV 的技术实现会有所不同,它更像是 Android 平板之于 Android 手机。对于开发者而言,定制适合 Android TV 的应用,就像原来将手机上的应用移植到平板上一样,和开发普通应用无异,只需要使用 Android TV 提供的控件库,将应用做的更适合在电视上交互和获取内容即可。而对于 Android TV 这个解决方案而言,最期望解决的是可以在电视上无缝的融合各个数据源的内容,不论是通过电视信号、本地磁盘、还是网络流媒体过来的内容,都可以按照统一的方式呈现在电视上,在 Android L 中提供了新的 android.media.tv 包,帮助应用从更多的内容源来获取内容。


设想一下,如果 Android WearAndroid AutoAndroid TV 都能如 Android 移动设备一样野蛮生长,那么也许有一天你触碰到的每一台电子设备都搭载了 Android 系统。对于开发者而言,这听上去是很幸福的消息,“一次开发多处部署”的移动开发时代,就这样到来了。


更多精彩内容,请点击阅读原文。

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 我的火影情节 [旧文重赏]那些年,我追过的语言 小伙伴们,福利来了,golang.org中国区可以访问了 第二期原创文章&微码 评选投票活动 国内iCloud服务器遭遇中间人攻击,中国苹果用户隐私不保