Android : 所谓分裂
本文源于我和 Android 大牛 FirstFan 的一次聊天。我从中受益良多,也印证了一些长期的怀疑。
分裂,一听就不是好词。但最近关于 Android 的报道中,代码分裂这个词出现频率越来越高。以至于作者们几乎形成了某种反射:一比较 Android 和苹果,就冒出 “分裂”。类似一比较韩寒和郭敬明,大家就想起 “抄袭”。
Android 的模式是 Google 的巨大挑战。一个 OS ,众多厂家二次开发,用在无数的设备上,兼容更多的软件。其中的各种因素,都是动态变化的。(OS , 厂家二次开发的 API ,硬件,第三方软件。)但软件工程的训练和实践告诉我:这不是不可能的。比我的个人经历更有说服力的,是 IBM 开放 PC 标准。他的成功不容置疑。 Android 的模式,一定程度上,是开放 PC 标准的翻版。只不过野心更大,更激进,也更乱。
目前关于代码分裂的报道,同样乱的要命。有时把不同层次的事情混成一团。比如开发版本不兼容运行版本这种 iPhone 上也存在的事,也被当成了代码分裂的例子。
其实,所谓 “代码分裂”,有三个不同的层次。
第一种分裂:厂家改动标准 API
厂家私自改动了 Google 提供的标准 API 。比较极端的例子是,开发者看着 Goolge 的文档,写了个程序创建地址簿。结果, Create 方法,在 HTC 的手机上,被厂家改为了删除。。。
这种改动的后果不言而喻。 Google Market 上的程序,将无法在这样的 Android 手机上正常运行。付钱买了软件的用户,含泪看着空空的地址簿,肯定愤怒的去找开发者算账。而开发者并没有做错什么。(唯一的过错是测试不足吧。)
这种分裂,是真实而且严重的威胁。
Google Market 还未成长起来。既无重量级软件,也无有分量的公司。里面的人的发言,对于硬件厂家,相当于耳旁风。所以,如果出现这种情况, Google 应该替他们说话。保障开发者的权益,就是保障 Android 应用丰富的美好未来。
不过,硬件厂家也不可能成心和开发者闹着玩。卖友求荣的事情不稀奇,损人不利己的做法不多见。他的机器没法用 Google Market 上的软件,也不是什么光彩的事情。因此,一般情况下,厂家倾向于追加新的 API 。而不是改动标准的。所以这种分裂的例子很罕见,举来举去,就那么几个。
第二种分裂:实现偏差
手机的有些功能, Google 负责定义,但是如果功能硬件密切相关,具体的工作就留给硬件厂家去完成。不是 Google 懒,这是软件工程的一种控制技巧,目的是把事情交给最适合的人去完成。Google 定义的 API 叫接口。厂家的工作叫实现。
上百款 Android 手机,分属几十个厂家,那么一个接口返回的结果,就可能有几十种实现。全部返回同样的结果,是 Google 的期望,但是现实中往往不尽如人意。
比如图像处理芯片会提供压缩图片的功能,开发者全部通过定义好的接口调用。但是 HTC 搞了个新机器,换了图像处理芯片,那么它返回的结果,可能就和开发者手中的 G1 看到的,有些偏差。
出现这种问题的责任,可以归结于 Google ,或者,硬件厂家。也许是接口定义和文档不够清晰,也许,是实现没有遵循定义。
个人意见,这也是小问题。
如此复杂的软件工程,不可能事事如意。出现偏差,是必然要付出的代价。对于开发者, Test and Debug Anywhere ,是软件开发的常态,无需抱怨。
当然 Android 的手机泛滥之后,他不可能款款测试。不过,反正 Android Market 没有审查机制,他可以根据用户的反馈迅速对应问题。
解决第二种分裂的办法,是明确的定义,清晰的文档和及时的沟通。Google , 手机厂商,开发者们合作的时间长了,类似的问题应该会减少。
第三种分裂: 风格分裂
很多文章中 “代码分裂” 的真正所指,其实是风格分裂。
手机厂商拿到 Google 的系统,做了二次开发,加了更漂亮的壳,产生了一个新的代码的分支。但是重点其实不在代码上。新的分支还是符合 Google 的设计初衷的。厂家可以自己定义和扩展一些东西。开发者们也知道什么是标准的,什么是由厂家自己追加的。代码的分支增加了,危害并没有增加。
唯一令人不爽的,是一个华丽解锁动画之后,点个 Google Market 的程序,出现的是 Android 本身朴素的 UI 。
所以,这种分裂,与其叫做代码分裂,不如叫做风格分裂。
风格分裂其实在 App Store 上的程序上也存在。 甚至苹果自己的内置程序都是如此。 Email 还算和系统贴近。天气则完全不同。
如果要把风格分裂看做一个问题,那么解决的办法大概有以下几种。
第一种是技术上的:软件工程可以把程序的表现抽象出来,交给别人去完成。不是什么新东西, S60 上,第三方程序,就可以使用系统主题的某些元素了。
第二种办法是商业上的:只要有钱赚,开发者会为某些手机,开发 UI 特别华丽的版本。你肯付钱?那么风格自然有保证。
对于这个问题, Google 也肯定有过考虑。但我猜测,他的方案不是上面任何一个。这个提供全球最好搜索体验的公司,打算利用"用户"来解决这个问题:
让他们忍了。:)
Android 走的是数量和功能路线。 Google 期望的是提供海量的,覆盖各种价格和规格的手机。同时,给你强大的应用。如此,可以横扫大部分市场了。
如果有人要求统一的视觉感受,设计或者感受上的和谐?对不起,请去找苹果。
最后的话
所谓分裂代码,并没有分裂祖国那么吓人。一定程度上,是允许的。
一方面,第三甚至第二种分裂,通过技术和工程上的控制可以改善。另一方面,他们的出现,是 Android 模式的必然代价。要求开源,认可广泛的二次开发的同时追求统一风格,是不太现实的任务。
好在,苹果的高度统一有好处,但是乱,也有乱的优势。 Google 出卖了统一风格的同时,也换来厂商参与的积极性。
划清底线,留有空间,通过授权调动别人。对比苹果的控制和审查,也许是更高水平领导艺术。
现在, Google 玩的还略显笨拙。但是他在一个不断上升的市场中,本钱也足够。坚持下去,迟早学到需要的技能吧。
可以预见的未来,这三种分裂,仍然会伴随 Android 。结果呢?也许是有点恼人的用户体验, Android 机型广泛覆盖各个领域,市场份额节节攀升。
当然,会有挑剔的用户为此扔掉 Android ,选择 iPhone 或者 Blackberry 。但是这些人,是否值得 Google 花更大的力气去争取?
厂家间的多赢,就是如此。被谋杀的,原来只是用户的钱包。
Google 和 苹果,本是同谋。