由于 Android 的版本分裂比较严重,整个新系统升级可能需要一两年甚至更长时间。所以目前使用 Android 5.0 的大部分是喜欢尝鲜的用户,同时现在市场上能够很好支持 Android 5.0 的应用又很少,如果开发者能捕捉这个机会,从这些用户那里得到更好的反馈,或者更好的证明机会,都是非常有价值的。
在 Android 5.0 发布之后,我认为有几个地方可以让开发者做得更好,比如可以建立一个更好看的应用,或者能够解决在应用中最大的性能问题——电量消耗的问题,等等。同时 Android 5.0 也带来了更多的可能性,让开发者可以做出不一样的应用,以及能够在更多的设备上部署服务。下面我分别介绍一下我对 Android 5.0 可能带来的技术趋势的看法。
更美的应用——Material Design
在 Android 5.0 的宣传中强调最多的一个亮点就是「Material Design」,从设计语言来讲,这个特点是能在将整个素材铺平的同时还遵循一定的物理材质的需求。这样的设计可以让应用感觉更活泼、具有更丰富的颜色,有无处不在的阴影,以及动画效果更真实等等。对于技术来说,Material Design 解决了两个非常大的问题,其一是「阴影」,它所有的阴影都是默认系统实现的——只要配置 Z 轴的高度,所有的阴影都可以通过系统默认实现。
另一个是「动画」,可以说 Android 5.0 将动画应用到了各个角落,实际上在这方面 Android 做了相当多的技术工作,使这个效果不是简单的贴图,实现出来的效果有点像游戏里面的投影,也就是真实的投影效果。
为了实现这些效果,Android 曾经尝试过不同的方案,最后使用的方案是当 Z 轴比较矮的时候,使用一个「面光源」,相当于一面的光打下来,如果 Z 轴比较高的时候,可能会加一个「点光源」,尽可能使整个投影变得真实,当然它没有办法支持在图形学中比较复杂的「光线追踪」——连续的反射效果,因为有个试验结果是只要开启「光线追踪」 10 秒就会导致手机变得滚烫,以现在的手机性能还没有办法很完美地支持。
而在这一技术的背后有个发展过程,大约是在 2001 年的时候,Android 开始做硬件加速技术,它的计算同样以硬件加速,会在 GPU 上进行差值计算,用以实现阴影特效,动画也是同理。现在 Android 5.0 将动画做到无所不在,比如给一个页面做了阴影,阴影的抬升有动画,界面的切换有动画,每一次点击、每一次拖动、每一次滚动都有动画。
现在最典型的动画是「水波纹」,现在 Android 5.0 上点任何东西都有一个水波漾起的动画效果。当然,开发者也可以指定各种各样的动画,比如一些基于路径的动画和界面切换时的动画,整个动画的实现技术也是依赖于 Android 在两年前做的一个后台的独立渲染线程,它能够实现异步渲染这些动画。
对于老版本而言,如果想要实现类似的阴影效果或动画效果,让整个界面变得有动感,单靠自己的能力做是特别难的。Android 5.0 提供了所有的这些开发支持,只要用 Android 5.0 SDK,用一些支持包,就可以配上它的风格、调色板、以及一部分控件,配置一些动画,就可以很快地建设出一个特别有「Material Design」风格的界面。现在真正支持「Material Design」的应用还比较少,如果用这样的方式来构建自己的产品,其实可以给那些偏 Geek 的用户一个特别好的感觉。
更省电的应用——Project Volta
大家以前做 Android 开发的时候可能涉及最多的问题就是「为什么你的应用那么耗电?」其实整个耗电模型在 Android 模型里的计算是非常复杂的。Volta 这个项目就是要在 Android 5.0 解决耗电问题。这次的解决办法还是很特别的——就是给开发者提供了能力,如果开发者能够很好利用这些能力,就能在系统上面跑得更快。Android 提供的能力是新的后台任务系统,非常像 iOS 系统,可以配置一组触发条件,比如网络变化、电量消耗到了什么程度、设备是不是进入了休眠状态,这些东西可以触发一个后台任务,这个后台任务的执行也是限时的,如果在时限之内没有完成,系统会将其取消,这个过程特别像 iOS 整个的机制。它可能取代了类似常驻后台、定时任务或者需要更复杂的策略才能保持后台运行的东西,实现更省电的需求。
更重要的内容是 Project Volta 提供了一组调试工具,因为以前可以在 Android 上面调试内存、调试界面等等,唯独很难知道电量耗在哪儿了,这个调试工具加上可视化工具可以展现你的界面上各个元器件以及各个环节的耗电情况,例如在哪个时间段的耗电量是最多的,这时候有什么应用在运行,什么设备是大量耗电的。通过这样的分析,能够更好地了解应用为什么耗电,帮助开发者解决问题。
系统服务
Screen Capturing
每次 Android 新版本升级都伴随着一件事就是将原来只有系统有的能力开放给了开发者,开发者可以用这些能力来建设不一样的应用。 比如豌豆荚做过的一些尝试,我们想做一些游戏截屏、录屏或者是一些 OCR的分析,目的是想分析图片里的一些的东西。这在 Android 老的版本里是不支持的,除非 Root 才能用的这样的能力,但是新的系统服务已经支持了截屏和录屏。这样的话,如果发挥你的想象力,要做一些游戏录屏或者其他应用,这就提供了一个新的机会。
App Usages
应用的使用信息也是一样的,我们原来想知道手机上那个设备用户最喜欢用哪个应用,什么时候用,这些信息都没有,现在 Android 5.0 提供了这样的接口,开发者不仅可以知道用户在各个应用上耗费的时间,甚至可以知道什么时候用什么时间,整个切换事件都是可以查到的,这些信息原来也只有Android自己知道,在这个版本里这些信息全部开放给了开发者,这样能够更好地发挥开发者的想象。
Recent Screen
新的 Recent Screen 取代了原来的 Recent Tasks,特点是原来就像一个最近使用的应用列表,现在相当于最近使用的页面列表。 对于豌豆荚来说,我们希望用户不只是看到自己什么时候用了豌豆荚,而是看到用户在豌豆荚里浏览了三个应用,可以随时回到那三个应用里面,类似这样的功能。其实这样可以给开发者提供一个更好的用户入口,让用户回到你的应用时更方便,或者能力更强。
更多设备支持
Android 5.0 在更多设备上都有了支持,不仅在了手机上,现在可以伴随着Android Wear、Android TV、Android Auto,这三个现在都有 SDK ,整个发展状态还都比较好。
Android Wear 已经有了很多 App,Android TV 上也有很多游戏和应用,Android Auto 发布了第一版SDK。比如说在 Android 5.0 里面增强了通知栏,用户看到手机上是一个普通的通知栏,但同样的通知栏到手表上去看,比如打开 Android Wear,发现可以上下翻动、左右翻动邮件,在这样的设备上能获得一个更好的体验,同样它提供了 TV input Framework (TIF) 框架。
比如对于流媒体来说,可以非常快速地把内容部署在 Android TV 上,开发者做一个 Android TV 的 App,用户可以在 Android TV 上用这样的内容。
同样,通过新的 MediaPlay Session 接口,可以方便地把用户手机上的流媒体放到汽车上,可以实现一进汽车就自动播放、在汽车的车载系统上控制手机的内容,这些新的接口其实都是提供了很多新的机会。 现在这样的 App 还偏少,比如目前看 Android Wear 的 App 可能做得最多的就是卖各种各样的表盘,实际上这个方面还有很多的可能性,当然它是一个特别新的领域,存在着一定的未知性,如果现在看这样的机会,可能给你提供的是很多新的产品机会。
以上就是我感觉目前 Android 5.0 对于移动开发需要关注的点,总体来说,如果需要做一个新产品,开发者需要看到一些新的技术可能性,看到一些新的技术的趋势,希望这个分享能够对从事开发的朋友们有所帮助。