作为当今移动互联网行业中当之无愧的双雄之一的Google公司,其举办的I/O大会向来受到全世界开发者、科技工作者甚至科技爱好者的倾心关注。2014年6月25到6月26号两天,Google I/O大会如期在旧金山的Moscone Center West举行。在这次会议上,最耀眼的光环无疑属于移动领域中势头最强劲的Android系统。笔者总结此次大会中关于Android的内容大体如下:
下面,笔者将从上述五个方向来介绍和分析此次I/O大会中和Android相关的内容。
简单来说,Android One是一系列低端智能Android手机,其目标人群是这个星球上数十亿还在使用功能机的人。由于Android One定位于低端机,出于成本和购买力的考虑,其硬件特性不会强到哪去,但为了用户体验的一致性和连贯性,Google希望Android One的硬件至少支持如下特性:
支持双卡
从软件特性上看,Android One的特点是:
点评:Android One是一个极具战略眼光的计划。其实,这几十亿目标人群早就是中国山寨手机厂商或其他主打第三世界国家中低端手机市场的厂商的盘中餐,眼中菜,但Android系统在低端手机软/硬件体系上缺乏某种程度上统一的衡量标准,导致这些厂商的产品鱼龙混杂,良莠不齐。再加上这些厂商只通过卖设备赚取微薄利润,所以很难有心力来真正耕耘这块广阔的市场以及培养用户使用习惯。
Android One的出现能很大程度上改善上述问题,而且可预计得是它将为整个生态系统开辟一块巨大的市场:
当然,Android One也会对其他一些定位于低端手机的厂商或OS开发商(例如Nokia的功能机以及Mozilla的FireFox OS)造成较大的冲击。
Android L号称是Android历史上改动最大的一个版本,新增和修改多达5000个左右的API。从整体情况来看,Android L有以下几个方面值得重点关注:
先来看Material Design以及相关的UI/UE改进。
Material Design是Google此次推出的一套全新的UI/UE设计风格和框架。直白得说,Material Design是一种改进后的扁平化设计风格,它在扁平化UI/UE上增加了对高度信息的感知和反馈,深刻模拟了人们在日常生活中所感知对周围物体的触碰感知。例如,一张白纸就是扁平的。如果人们触碰这张白纸,那怕是最轻微的触碰,都会给这张白纸带来一些细微的变化,例如接触部位的凹陷,凹陷部位周围处的阴影等。
下面我们通过几个图来直观得了解下Material Design风格的样貌。图1所示为新的主题,分为Dark和Light两种。
图1 Material Design的主题
图2所示为新增的几个UI控件。
图2 新增UI控件
图2中所示的两个新增控件分别是RecyclerView和CardView。
在Keynote演讲中,Google向大家展示了一个旧版Gmail和基于Material Design风格Gmail的对比示例,如图3所示:
图3 旧版Gmail和基于Material Design的Gmail对比
从Keynote演讲中透露的信息来看,Material Design的目的不仅仅是换一套风格的界面,它还有试图在可穿戴设备、TV、车载系统上为用户提供更为一致性的Android用户界面和体验的考虑。
关于Material Design更多的介绍,笔者建议读者可仔细阅读它的官方介绍网站
http://www.google.com/design/spec/material-design/introduction.html。
除了Material Design,此次大会上Google还不遗余力向大家介绍了通知栏相关的改进,如图4所示。
图4 Android L中的下拉通知栏示例
图4中,下拉通知栏的界面除了采用Material Design风格外,还有几个比较重要的特征:
另外,Android L还增加一种名为MediaStyle风格的通知项以及名为“Heads up”类型的通知项,它们如图5所示:这种通知项用于控制多媒体播放,如图5所示:
图5 MediaStyle风格和Heads up类型的通知
图5左边所示为MediaStyle通知项,它用于控制多媒体播放。右图所示为“Heads up”通知项。当用户处于全屏操作时(例如玩游戏,阅读书籍等),如果收到如图所示的来电信息的,“Heads up”通知仅会弹出一个浮现与当前屏幕的通知框。这个通知框上可提供一些操作供用户选择,例如接听电话还是拒接它。由于“Heads up”通知项仅显示为一个悬浮窗口,这就避免了Activity之间的切换(在Android L之前,如果收到来电,系统会强制弹出InCallScreen界面,这时之前的全屏界面会被野蛮打断,用户体验不太好)。
最后,Android L还贴心得增加了通知信息的隐私模式,它们分别是:
如图6为通知信息隐私模式的示例:
图6 通知信息隐私模式示例
图6中:
关于Android L中更多和通知栏相关的信息,请读者阅读
http://developer.android.com/preview/notifications.html。
点评:总体来说,Android L在UI风格上也跟随苹果转向了扁平化,所以有外媒调侃说这是Google在向苹果致敬。另外,Android L也将对用户体验的高度关怀体现到了系统中更为细微的地方。一言以蔽之,Android L越来越好看,也越来越好用了。
ART是Android Runtime的缩写,它是Google用于替代饱受诟病的Dalvik虚拟机的替代品。其实,ART早在Android KitKat(版本号为4.4)就已经推出,不过当时它还很不完善,所以被放到设置程序中的“开发者选项”里供一些供感兴趣的开发者使用[2]。
ART有什么好处呢?图7所示的ART/Davik性能测试对比数据相信很有说服力。
图7 ART/Dalvik性能对比测试
图7中在Nexus 5上所做的ART与Dalvik CPU性能测试中,ART的性能较Dalvik几乎有成倍的增长[3]。
ART究竟有什么神奇之处呢?根据相关资料,笔者总结其秘方如下:
先来看AOT编译。
AOT编译技术的目的是将Java字节码直接转换成目标机器的机器码。对比Dalvik使用的JIT(Just-In-Time)编译技术:
除了提前转换字节码外,AOT还在以下方面做了优化工作:
如前所述,AOT编译技术将在程序安装时做一些处理,相关流程如图8所示:
图8 应用程序和AOT
图8可知,APK应用程序本身的创建不涉及AOT,只是在它的安装过程中,系统将通过dex2oat工具将Dex文件转换成Linux平台上的可执行格式ELF。
另外,AOT这套处理框架可以很轻松拓展到不同的硬件平台,如Intel的X86,MIPS及相应的64位平台等。
当然,AOT在带来益处的同时也会有一些不好的影响,比如:
ART另一项值得称道的特性就是大幅改进了Java的垃圾回收机制。垃圾回收工作主要包括两个步骤:
Dalvik时代,上述两个步骤均会造成应用程序运行过程的中断,其原理示意如图9所示。
图9 GC示意
图9中:
GC会导致较为严重的运行性能下降,图10展示了某外媒[4]还给的一些测试数据:
图10 GC测试数据
图10中,最严重的GC_FOR_ALLOC将整个程序中断了最长168ms。如果当时这个程序正在绘制界面的话,这将导致十几帧图像数据被丢弃。
那么ART是如何优化GC的呢?总体而言有下面几个方法:
最后,ART在64位平台上也表现良好,图11所示为Google给出的一组ART和Dalvik在64位平台上的对比测试结果。
图11 ART/Dalvik 64位Intel平台对比测试结果
结合大会给出的相关信息来看,ART极有可能是击破“Android性能不如Apple”这个观念的利剑。随着Java运行时库性能的成倍提升,一些大型应用(比如Office相关的程序)、游戏甚至视音频编辑软件都可能给用户带来更佳的体验。
ART目前还在进一步完善阶段。另外,有些依赖JNI本地调用的应用程序需要测试下兼容性。关于ART更多的讨论,请读者继续阅读https://source.android.com/devices/tech/dalvik/art.html和
http://developer.android.com/guide/practices/verifying-apps-art.html
从Android 4.1(版本代号为Jelly Bean)开始,Android开发团队便力图在每个版本中解决一个重要问题。从公开的信息来看,Android到目前为止有三个Project成功发布:
功耗问题也是Android系统饱受指摘的一个方面,虽然Project Volta致力于解决它,但笔者觉得在功耗优化方便Google还是落后于业界一些领先厂商:
不管怎样,Project Volta所做的努力还是值得肯定。下面来看看它具体包含哪些内容。
和其他所有优化工作一样,功耗优化也需要首先找到功耗的瓶颈。虽然Android系统能通过adb shell dumpsys batterystats或adb shell dumpsys power打印出电池使用情况、Wakelock占用等一些有用的信息,但毕竟这些信息看起来很不直观。所以,Project Volta首先解决了功耗信息图形化显示的问题,这就是Battery Historian工具。这个工具能将bugreport信息中和电池使用相关的数据提取并图形化显示出来。例如图12所示:
图12 Battery Historian工具
Battery Historian工具有些TraceView挺类似,通过数据的图形化显示,开发者可以很轻松了解到例如GPS开了多长时间,WakeLock占用了多长时间,CPU工作了多长时间等信息。
Historian工具虽然方便,但和一些领先手机厂商开发的更为强大的设备内诊断(In Device Diagnostic)工具比起来,它还算比较稚嫩。有些手机厂商的IDD工具还能监控设备的电压、电流、温度等更加底层和关键的功耗信息。
Project Volta的开发人员通过Historian工具发现了功耗一个比较大的瓶颈。图12中的红框为CPU运行的信息,从中可以发现CPU运行是一阵一阵的,每次运行都很短。这是什么原因呢?举个例子:
如此反复,就出现了图12中红框所示的情况。对于这种情况,应用程序本身即使非常在意功耗,它也没有办法避免。所以,Project Volta提供了一个名为JobScheduler的机制及对应的API以帮助开发者解决这个问题。
简单点说,JobScheduler其实是一个系统级的任务管理中心(对应的服务名叫“taskmanager”),应用程序通过JobScheduler API向这个管理中心池添加任务。最为关键的是,应用程序还需要设置这些任务被触发的条件,比如:
显然,有了JobScheduler,只有那些所有条件都满足的任务才能真正被触发执行,这样就能有效避免应用程序被定时器唤醒但由于其他条件不满足又不能真正工作的情况。
从技术角度看,和前两个Project比起来,Project Volta不是特别耀眼。确实,功耗其实是OEM厂商非常关注的一个问题,他们早就在相关领域做了大量深入的研究,并提供了很多行之有效的解决方法。所以,Project Volta后续要继续深入开发的话,还需要向业界领先厂商多多学习。
除了Material Design、ART和Project Volta之外,此次I/O大会中关于Android L还有两个比较重要的点:
此次I/O大会上,Google正式向世人推出了Android Wear、Android TV和Android Auto系统,它们分别针对可穿戴设备,电视机和车载系统。说实话,这三个系统的原型早就在各个媒体,甚至Android开发者网站(例如今年年初推出的Android Wear SDK,而Android TV更是多年前就有的)上露出过身影,当时还曾引起极大的轰动(从国内目前热度依然很高的Android智能电视即可见一斑)。那么,Google于几年后重推的这几个系统是什么原因呢?笔者分析如下:
此次I/O大会上,关于Wear,TV和Auto方面的介绍主要集中在应用开发上,而关于这些系统的特性则介绍得较少。下面我们分别介绍它们
先来看Wear,从这次大会的情况来看,Goole似乎将可穿戴设备的重点放在了智能手表上。显然,无论从法律法规还是使用习惯来看,智能手表都比Google Glass更容易被大众接受。本文下面所指的可穿戴设备都特指智能手表。
由于智能手表屏幕实在太小,所以Google要求应用通过卡片式的界面来与用户交互。如图13所示:
图13 Wear上的应用界面
从消费者角度看,智能手表给他们提供的信息将通过一种名为“上下文信息流(Context Stream)”的方式来展现,Context Stream包含了一组卡片式视图,每个卡片视图表达一件事情或一条信息(比如闹钟提醒,来电通知等)。用户只要在智能手表上左右/上下滑动这些卡片,就能浏览相关内容。
当然,为了达到“解放双手”这一终极体验,智能手表还将支持Google的语音服务,用户只要对着智能手表说出关键词,就能触发相关应用的启动。
最后,作为Wear还能和手机等设备相连,系统为此提供了三个层次的API:
注意,这些API底层都需要Google服务的支持。
点评:Wear看起来很美好,但从目前媒体反馈的情况来看它还有很多问题要解决:
再来看TV,图14所示为一个示例:
图14 Android TV示例
此次Android TV引入最大的变化就是:整个操作界面将悬浮于正在播放的视频之上。这样,用户无需停止当前视频的播放,就能操作或控制TV了。说实话,笔者相信国内某些智能电视的用户早就体会过类似的事情了。但更甚一筹的是,Google还解决了遥控器过于复杂的问题。此次Android TV的遥控器只有最多8个按钮,如图15所示:
图15 Android TV遥控器
当然,遥控器能做到这么简单是因为Android TV中应用程序将使用几种最基本的layout风格,如图16所示:
图16 Android TV基本Layout
显然,如果应用的UI都采用图16所示的风格的话,Android TV遥控器就能做到只需上下左右这四个基本的导航按钮了。
另外,智能电视上还存在一个比较大的问题就是各国/地区直播电视的制式互不相同,而且同一个地区还有不同的运营商,其电视信号的接入方式也不尽相同。这个问题的直接后果就是每个电视用户家中都有数个遥控器。对于追求极致的Android TV来说,此问题是绝对不能容忍的。为此,Android TV设计了一个输入框架来统一TV上的输入设备,如图17所示:
图17 TV输入框架示例
无论电视源输入是有线信号还是IP数据,最终都会归结为TV的Unified输入。这样,用户在如图18所示的界面中就能选择并收看实际上是来自不同输入源的电视节目。
图18 Android TV中选择电视信号
最后,为了达到较好的用户体验,Google对Android电视的硬件也提出了一些要求:
最后,为了方便TV的开发者,Google对此次大会的部分与会者还赠送了一个名为“ADT-1”的盒子用来充当真实的Android TV设备。
根据I/O大会上介绍的消息,早在2005年Google就已经着手开展与车载系统有关的研究了,其产品经过多年精心打磨,从而得到今天的Android Auto系统。图19为Android Auto的示例。
图19 Android Auto示例
Android Auto系统中:
目前,Android Auto对应用程序只开放四种类型的API,分别是Navigation、Messaging、Voice以及Notification,并且要求手机必须集成Google的Car Service和Play Service。另外,受相关法律法规限制及出于避免驾驶员分心的考虑,一些车载传感器等和汽车有关的信息都不会对应用程序公开。
Android Auto的界面比较简单,图20展示了两个例子:
图20 Android Auto界面示意
Android Auto也充分使用了Material风格。左右图中的最下边为导航栏,上面集成了导航、电话、媒体等功能。左图所示为选择媒体播放应用,右图显示为导航界面,同时右图上面还有一个Hangout短信通知。
透过这次I/O大会,笔者明显感觉Android势头越来越猛,如果Google能真正建设好整个生态链的话,毫无疑问Android将会有着极为光明的前途。之前笔者还很奇怪为何会收到大众汽车公司发来的招聘需求,目前来看Android Auto将加速推进Android在车载系统中的部署。
虽然此次大会中Android覆盖面比较广,但在技术深度上却没有太多亮点。ART从Android KitKat就有了,Project Volta离业界领先厂商的节电技术还有较远的距离,而在企业级部署上似乎也只是借鉴了三星KNOX,没有太多可圈点的规范/标准可言。
[1] http://www.slideshare.net/aragozin/devirtualization-of-method-calls
[2] http://blog.tsunanet.net/2012/02/devirtualizing-method-calls-in-java.html
作者信息:
邓凡平:资深软件架构师。《深入理解Android:卷1》、《深入理解Android:卷2》、《深入理解Android:Wi-Fi、NFC和GPS》书籍作者,华章公司“深入理解Android”系列书籍的总策划。
新浪微博:阿拉神农
[1]http://www.engadget.com/2014/06/25/google-android-l-ecosystem/
[2]那个时候ART还非常不成熟,以至于它和一些芯片厂商提供的参考设计有冲突,所以现在市面上一些Android 4.4的手机中都去掉了“开发者选项”中和ART相关的设置。
[3]图7中,Antutu对比测试效果显示ART较Dalvik性能提升不是特别明显,这是因为Antutu包含了很多Native语言写的测试样例。
[4]http://anandtech.com/show/8231/a-closer-look-at-android-runtime-art-in-android-l/2