2月14日情人节,一向善于挑日子的Google在其Android官方Blog上公布了新版Android SDK发布的消息(根据网站上的日期,SDK应该是2月12日就更新了,看来Google的公关做得确实很不勤劳...)。这次发布的SDK版本号为 M5,理论上这应该会是第一轮比赛初赛前最后一个版本了,在此前,为了大家更好适应新的SDK,Google将第一轮比赛初赛的结束日期顺延了将近一个半 月,这意味着此版SDK会有巨大的变化。但当我迫不及待跑起新的模拟器的时候,还是着实吓了我一大跳,心里只会叨念三个字,大变脸。
所 谓“大变脸”有两个层面的意思,一个是使用了全新风格的界面上。随手截了几个比较有特点的界面图,从中可略见一斑。一直做Android的同志们都可能会 有感觉,早先的Android的界面,还是比较中规中矩的,风格颇为“传统”,与Symbian等操作系统都会有很多相似的界面和操作方式。而这一次,算 是真的做出了一些特色。
 
Android大变脸。。。_SDK
图1:全新的初始界面
Android大变脸。。。_SDK_02
图2:全新的Contacts以及弹出菜单
Android大变脸。。。_变脸_03
图3:全新的Notification系统
Android大变脸。。。_移动开发_04
图4:全新的Expanded菜单
套用奥林匹克精神的经典台词,新的Android界面算是更大,更Q,更花哨了。更大是最显而易见的,现在所使用的图标和字体比老的起码大了一两倍,一屏能显示的内容少了一大半,但格外的清晰耀眼。我个人分析这和Android的定位密切相关,Android定位在有一定硬件基础的手机平台上,它不再考虑对低配置手机的支持。一定的硬件基础毫无疑问包括足够大的屏幕,特别是越来越流行的大触摸屏。更大的图标和文字可以让用户更充分享受大屏幕带来的更美好的视觉效果,同时也可以更方便进行触摸操作。
当然这种新界面和iphone的革命性UI不是同一个概念。iphone的一些酷酷的UI特性(双触点,自动关闭触摸屏等等...)都依赖于XX感应器等硬件基础。而Android毕竟是一个开放的软件系统,它再需要高的硬件基础,也不可能高到iphone 的层度。但在新的SDK中,可以看到Android开始以另外一种方式兼容不同的硬件。在Activity中,新增了Touch Mode的接口,用以兼容在有触摸屏的条件下提供更好的用户体验(主要是焦点上...)。我想这样的根据不同硬件条件提供的可选API会越来越多,当然这样的API需要足够简单好用,不然会给开发人员增加很大的负担。
另外很有趣的是Google在Android中采用了很Q的风格,图标都是可爱的圆弧角,字体也是圆圆的感觉。这估计是Android开发工程师们好这口,这一点可以从早先Google的展示视频可略见一斑。
伴随着Q而来的,是更为花哨的界面风格,大大的图标随处可见,颜色也是颇为的艳丽,更有趣的是其ViewGroup的动画效果比原来更为的夸张和好用。
当然所有这一切界面风格的变化都不是无源之水。为了更好支持新的界面,所有的View的解析方式都有了全新的变化,并且Android的 CursorAdapter,Notification,ViewGroup,Menu等等类都做出了很多的改变, SimpleCursorAdapter可以直接支持图片的显示,避免了更多的人重复造这个轮子;Notifaction变成了图3这样,有图标,有更丰富的内容;ViewGroup支持了更好的动画显示,可以从Demo中看到其效果;Menu更是变化巨大(如图2,图4所示),带图标的Menu可以很容易的搞定。
当然,这一切也不只是花花架子,为了更好的显示图标、动画等等,View引入了Drawing Cache(其实就是双缓冲策略...)等新的机制,通过延迟、晚绑定等等底层方式,提高加载的效率。
新界面的变化,使得用户的使用上也需要一些的改变。新的起始界面,如图1所示,采用了侧边栏的方式。最上面的图标(比如APIDemos, Chamberlain)是根据你上次使用状况动态更新的。虽然很酷,但我个人觉得蛮乱蛮不好用的。新的Notification不再是通过上下键弹出,而是需要下拉出现,虽然还是很酷,但同样还是不够好用。新的菜单进行了分离,分成了Icon menu, Expanded menu和Context menu。最一般的菜单采用Icon方式,大于6个可以通过more按钮转换成为Expanded方式,而Context menu需要长按2秒Center button才能够弹出,所有一切都违背了一般的操作方式,还是那句,很酷,但需要时间的考验。

新的SDK另一个巨大的变脸就是大量API的变化。这种变化是老的项目的移植非常痛苦,但从长远来看绝对是一个好事。
API最多的变化就是命名的变化,很多不合理的命名被更改。一些不清晰的API指定的更为明确,比如一些与SQLite相关的API都被附上了 SQLite前缀;一些原来在文档中标明过期的方法,在这一次彻底被废除了,比如ContentProvider的query方法;一些不统一的API也进行了调整,比如ListView中的position和index统一成为position,解决了这一我原来颇为头疼的问题;一些命名风格进行了统一,比如URI采用统一的Uri,ID采用了统一的Id;其他方面,AndroidManifest.xml中的一些项也做出了统一,能够能容易的被理解。总之这样的变化还有很多,大量的API更为的清晰,易理解。这也是天下所有被重金诱惑的程序员帮助Google测试的结果。
还有一些类进行了重构,进行了功能的分离和扩充。最典型的是ContentURI,被拆成了ContentUris这个功能类和Uri这个实体类,对程序员的使用做出了更好的引导作用;而另一个典型的变化是Cursor,添加了一个extras接口,可以传出附加的数据,这简直是一场及时的一塌糊涂的雨,使得原来很多很难做的是变得简单;还有一个是Notification进行了拆分,Notification现在只是指首页顶上的那个图标,那些临时的弹出文字或视图被分离为Toasts,这对强扭的瓜终于得以各奔东西,单飞各自发展。
一个比较特别的变化是Alerts,采用了新的Builder链式构建方式,而不是通过构造方法进行构造,其构造的灵活性更大了。与此相反,Notification则拥有了一个更长的构造函数,用起来及其的不爽,个人觉得这不是一个良好的变化。
此外,Android也添加了一些实用的类。新增的ExpandableListView,是一个二级树状AdapterListView,这是一个非常非常实用的视图控件。我想这是大量开发人员提出需求的结果。我个人原先想自定义这个轮子的,后来采用一级模拟二级的方式实现。这一下好了,省心了。另外一个革命性的东西就是Search Manager接口,这是一个hooker接口,Android为你的Activity做了一个很酷的Search界面和接口(可以参看Sample),通过实现改Hooker可以实现统一的Search,这个对很多和我一样做Search的人影响极大,从短期看,移植非常痛苦,从长线看这是一个颇有 Google味的变化,对Search有很大的推动作用。另一个比较Google味的变化,是将XXMP更名为GTalk,Google野心彰显无遗。

除了这些变脸,SDK这次对插件进行了不小的改变,支持了多设备,将设备视图和Process视图合并;并添加了新的traceview工具,这是一个可视化的日志分析工具,这个工具使得Android的日志系统更为的强大,调试时间有望进一步降低。

所有这些只是根据我这两天的一些观察得出来的,只是盲人摸象而已。更全面的内容可以参考这里这里这里。很遗憾的是,大部分SDK的文档都没有跟上,所以如果想学习的话,希望大家直接看SDK Sample,而不要阅读文档中的示例。
进行了这一些改变后,Android越来越完善,Google的投在大奖赛的钱看来不会白花。对于所有做Android的人,这也是一个更好的机会,谁能适应新的SDK,谁就能占领到更好的位置。