本文转贴自“ODin是个BLOG傻瓜”
ODin兄每次写的文章都跟我曾经想写的议题都很类似,虽然他的看法都跟我差不多但如果我来写的话大概会是另一个方向吧(硬件规格太多与相容性部分)?但是我对于这种分析类的文章比较不擅长(最后一篇大概是iPhone杀手那篇),所以都只写写开箱文跟教学,这个题目在“生气鸟”相容性这篇新闻发生时就有想写,后来因为“懒”所以没写,大家不妨看看ODin的看法吧。
http://blog.tweetdeck.com/android-ecosystem
乔老头怪可怜又关心地说:TweetDesk要为244种不同的Android手机提供100多个版本(注1);但TweetDesk又毫不领情地反咬一口说:我们可没有抱怨过,相反,Android分裂问题没有那么严重,我们只用两个人就搞定了(注2)。
https://media.kocpc.com.tw/kocpc/2011/02/1435892324-37f5232274be3a3fae2ba11785c6c25a.jpg
不过那边厢,写Angry Birds的Rovio Mobile反过来吐嘈说:”我们很不愿意(hesitate)去为Angry Birds写多个版本”,结果玩不到的那一群Android手机,都给它们塞一个轻量化版本(注),我只管你玩不玩到,你手机上的画面多烂、比例多古怪、速度多慢、能否放大缩小,自求多福。
http://www.rovio.com/index.php?page=angry-birds
然后,亦有大量Apple Hater指”iOS不也有版本分裂问题吗?iPhone 2G/3G/3GS/4再加上iPad,然后还有iOS 2.0、2.1、3.1、3.1.2、3.1.3、4.0、4.1、4.2等等等一大堆没有升级的用户,不也面对严重的兼容性问题吗?
兼容性究竟是什么一回事?事实上,PC的平台和硬件分裂问题,远比手机严重,为什么,我们老是在在手机上的兼容性做文章?
Odin先不论版本分裂的问题,先谈谈:手机软件的兼容性问题有多严重?
兼容性问题,相信是目前最容易被夸大、但又最容易被低估的问题。
UI ISSUE
争论兼容性问题的最基本、也是误解最深的地方,就是使用者界面。
使用者界面是什么?就是该软件一切与用户接触到的地方,包括:画面、分辨率、画面比例、昼面分割、按键、触控、声音甚至操控方式等等等--当中,最多人谈论的是屏幕。维基百科最初的资料说, Android开发者特别苦于不同分辨率的Android手机开发(注4),不少iOS的支持者也不断指出不同的屏幕大小对开发者带来带来极大的影响。
事实呢?代码有自适应的一项啊。只要数行”全屏幕”代码,根本就轻松搞定。
对,这就是为什么TweetDeck会说得那么轻松的原因。对于不少用高阶语言的软件来说,由于不需动用手机硬件协助,所以这些软件根本就可以无视硬件之间的分野,尽情给千万种手机编码,然后数行全屏幕编码,搞定!所以,不要说2个人就可以搞定TweekDeck的众多版本,根本一个人就可以搞定了,有何难哉?
行外人根本不知道, 全屏幕编码对于工程师来说,一点难度也没有。
但是,值得注意的是:
对,这些问题对于工程师来说不是问题,但对于用户来说就很头痛--特别是在这个小小的屏幕上。
我们先一起欣赏Galaxy Tab的一个”优秀”界面:
对于手机来说,这样的界面不以为过--好歹是一部手机,总要考虑像Odin这种老人家的眼力;但是,在7吋看到这种巨无霸式的指令…
在旁边偷笑的iOS支持者不要偷笑,你们躺着也要中枪--谁都知道iPhone软件在iPad上运作是多恐怖的一回事!在软件里爆出来的狗牙,足以让你家中的狗换上数千副新假牙,所以还有像Jailbreak软件RetinaPad,特意为iPad的iPhone软件除狗牙。
https://media.kocpc.com.tw/kocpc/2011/02/1435892329-9bead7ee0b45b17abbbf968690d4e032.jpg
对--
行外人不知道的,会大幅夸大了编程的难度;
只懂编写代码的,会完全轻视了界面的优化。
CODDING ISSUE
另一个比较少人留意的是编程问题。
用高阶语言编程的软件,在纯粹的编程上不会遇上太大问题。但是,一个手机平台总不可能永远都只写小打小闹的软件吧。事实上,近年手机游戏大行其道,不少开发者为了提供更佳的游戏画面,普遍都要动用到硬件加速功能,像Android这种会有开放给不同厂商的操作系统,必然会遇到不同手机有不同硬件、需要动用不同硬件指令的问题。
https://media.kocpc.com.tw/kocpc/2011/02/1435892348-21aa3052603dda5721a9d5ba33009612.png
为了解决这个问题,一般的操作系统都会采用一些跨平台的软件层去处理,例如Adobe Air、Appcelerator等等的第三方编译器,以达至一次编码,不同平台共用的情况。即使是开发者要动用更视乎硬件的原生代码,但他们一般只要祭出编译器,编码时最多也只是针对不同的硬件平台(PowerVR、Tegra、Qualcomm)再作一次编译就可以,而毋须再针对各别机种再重新开发。对,也许仍然是麻烦,但并没有想像中的麻烦,所以TweetDeck才大大声的说:”我们只用两个人就搞定了”,这也是为什么苹果最初祭出App Store规条3.3.1,禁止开发者用第三方中间层编译器的缘故。(注)
理论上的确不太繁复,实际上呢?
有人说,兼容性问题只在低阶手机出现,Odin告诉你:不一定是(注)。即使大家用上相同的平台,但不用的手机的细节也有不同,也会都会构成不同的变数。举例说,Nexus One和Acer Liquid都是用上Snapdragon,都是用上Android 2.1(Liquid可升级至2.1),但是Nexus One玩Asphalt 5时一点问题也没有,但部分Liquid玩家就遇上不同程度的问题,例如迟滞(注)、甚至死当(注)。
为什么Nexus One没有问题,但Liquid会出事?某程度上是因为Nexus One往往是被用来当作开发机种。开发者很多时都会倚赖数部流行的手机(例如Milestone、Galaxy S或工程师至爱的Nexus One)来除错,但其它相对不流行的手机呢?新推出的手机呢?对不起,帮不到你,等着我们的软件更新吧。
对,问题在于Debug。 开发者会花多少时间去为市场上的众多手机除错和优化效能吗?
iOS用家也不要笑,iPad也会中流弹。同样需要处理iPhone与iPad兼容性问题的开发者,也需要为iPad除虫。但Odin使用iPad半年的体验是:iPad App的崩溃次数,最少是iPhone App的十倍!而且,这情况更不限于第三方的软件,即使是Apple自己的软件(例如Mail或iBook),也经常出现Force Quit,甚至是系统崩溃。所以,TweekDeck两人团队做出来的TweetDeck for iPad,结果如下:
http://itunes.apple.com/hk/app/tweetdeck-for-ipad/id364153769?mt=8#more-link
对于工程师而言,编写跨平台软件并不困难;
对于使用者来说,使用跨平台软件并不轻松。
PERFORMANCE ISSUE
最后,就是让Angry Birds很Angry的效能问题。开发商Rovio表示自己的轻量化版本是”experience optimized for devices with less processing power”,表明了它们面对的其中一大难题就是不同手机之间的效能差距。
http://androidheadlines.com/2010/12/nexus-s-outperforms-nexus-one-in-gpu-benchmarks.html
这个问题,其实在PC业界早就不是什么新闻、甚至是难题。事实上,一般的华丽PC游戏都有着效能的兼容问题,众所周知,Call for Duty就是一只以硬件要求极高而驰名的游戏,但是,PC游戏商一向都没有把兼容度视作极大问题的情况,游戏依旧大卖,开发者依旧年年赚钱。
爱玩游戏的玩家,都已经准备好一台专门为游戏而设的高阶设备,谁会管低阶市场?
但是,Odin想问一句:你见到有多少手机游戏的售价在US$50以上?没有。
售价不高的话,那销量就变成收入的重要泉源 -- 这时低阶市场就很重要了。
当PC游戏可以以价来代替量的时候,手机游戏一般都在 US$10以下,碰著好像Android Market这种付费机制不太健存的情况(注),要透过价钱来弥补数量的不足,更是难事。相反,正常市场情况下,低阶产品的数量一定远比高阶产品要多,在讲求量比价重要的市场里,低阶市场更是不能放弃的。
Rovio在Android Market就面对这个问题:收费之路不行,但如何为低阶市场这一大堆手机的广告收益而开发产品呢?
应该说,Rovio开发的低线在哪里?在Motorola Milestone 吗?在HTC Hero吗?还是在山寨机上吗?还是,就像现在的轻量化版本一样,弄个非驴非马的版本去喂饱它们好了?
效能问题根本不是问题,问题的核心是收益。
如果你开发软件的目的只是为了自娱、为了拯救世界,那就恭喜你。如果你开发软件的目的只是为了赚钱,那就请自求多福。
EXPECTATION
Angry Birds的其中一名开发者Peter Vesterbacka说:”Fragmentation on the device side is not a huge problem, but Steve is absolutely right when he says that there are more challenges for developers when working with Android. But that’s fine, developers will figure out how to work any given ecosystem and as long as it doesn’t cause physical pain, it’s ok”
Odin仍然是那一句: 兼容性问题,相信是目前最容易被夸大、但又最容易被低估的问题。原因是这个问题会带来什么未来,仍然是未知之数。始终,绝大部分开发者开发产品的最终目的都只是为了赚钱,只要手机数量够多,开发者绝不会为了效忠某一平台而死守不放。
对于开发者来说,它们需要花多少的成本去优化软件界面、去为不同的版本除虫?这一点对于有实力的开发者来说,并不是太大问题。
对于没有实力的开发者来说,花点时间在高端或流行的平台上写个软件、试试水温,待软件受欢迎时迎来注资、或是收购后,才为软件优化,也不是坏事。
但是在短时间之内,开发者都要为了分裂的平台而付出不同的心血,而用户亦会因应着开发者的努力所带来好与坏的使用者体验,而付出不同的代价。