Android 是一个好的选择么?

公司

2009-03-02 00:05

出处:自己的 blog http://www.evan129.com/2009/03/01/android-是一个好的选择么/

还是草稿版本,可能不少 bug,待修改完善

前两天在 Cnbeta 上看到一篇文章《Symbian:Google Android 开源只是幌子》,我是有同感的。前阵子给一家国外运营商做关于定制 Android 的咨询,顺便就仔细想了下这个问题,加上在水木 MobileDev 版的讨论,打算总结一下问题。不过这个坑比较大,估计会有很多拍砖的。

首先从用户角度看,Android 有什么优势呢?Google 的业务吧,好用的 GMail 客户端,和 Google 帐户同步联系人,日历。但是 Google 最近发布了其它几个手机平台的软件,也支持了类似的功能。从硬件角度来看,我觉得至少目前仅有的一款 G1 体验是不如 iPhone 的,屏幕表现,操作手感都是不如的。优势是多了一个实体键盘。作为 Palm Treo 的 fans,我是不太喜欢侧推键盘的。对于普通用户来说,虽然有了实体键盘,可是至今的官方升级中还不包括软键盘,输入操作都必须推开键盘才可以,这点很不方便。而对于中国用户来说,字体只支持到 GB2312,很多字显示成方块。没有中文输入法,即使复制中文字进短信程序,发送后对方也显示不正常。所以不得不用第三方的短信程序。再说价格,标榜为免费的开源的操作系统,android 的手机真的便宜么?德国刚上的 G1 非签约价是 499 欧。价格上面并没有体现出什么优势来。

从开发者角度来看。如果你只是一个开源爱好者,喜欢研究研究这种大型项目,看看代码,这个长处我是不否认的。如果你是靠写代码过活的,那我们来看看。我觉得一个很大的优势是,Google 学习 Apple 推出了 Google Market。这无疑将可能是一个赚钱的好途径。不过收费项目才上来两周,不好说情况怎么样。但是我个人预期,它是远不如 iPhone 平台的。

首先,用户群不同。Apple 从来都有较好的用户群,相对来说更愿意花钱。就好像 Mac 上程序一般都体积很大,但它的用户不像 windows 用户会去抱怨开发者,而是会考虑是不是该升级成更大的硬盘。简单的说,Apple fans 更偏向于怎么从非技术角度考虑,让事情尽快解决,那么,花钱能解决的问题大约就不是大问题了。何况升级点小硬件,买个小软件也不是什么大钱。相反的,Google fans 大多比较 geek。对技术有追求,哪天发现 Google 搜索不如百度好用了,这个例子可能不好,或者说出了个什么更先进点的搜索,立马会换过去,还会作为一个新发现介绍给朋友。就好像曾经 Google 搜索本身就是口口相传推广开的。Apple 则看重品牌些。对于新出的 apple 产品,甚至没见过,就会想买。就是说,google 本身的用户粘性不太好,只是 gmail 一类应用,由于用户数据在上面,是用户自己的数据把自己缠上了而已。另外,这个用户群,都多少有些技术,或者说 IT 方面的知识背景。于是,这些用户可以更容易的去获得盗版,破解。iPhone 限制相对比较死,还得先破解下机器才能装破解的软件。Android 是支持从电脑上直接装的。

说完用户群,再讲竞争关系。这其实是我第一反应想到的。Google 吸引了更大一批编程爱好者,Android 有更容易上手的开发环境以及需要更少的基础知识。Objective-C 再简单,对大多数人来讲,也是一门新语言,Java 是很多学校的基础课,Java 开发者满大街都是。新手写软件,一般都是免费的。所以 Android 上会有大量的免费软件。曾经我做 Palm 上的开发,入门时也写了不少免费软件,渐渐的,有了基础后,开始做一些收费软件。这个圈子里,能做这个的不算多,所以开发出的软件能够有市场。作为新手,学写软件其实有个目标最重要,我建议,并且相信不少人的想法也是,找个现有的软件,做个一样的出来。人家要是也是免费的,可能你会觉得做的意义就不大了,所以不如找个收费软件,学着做个免费的出来,这样至少有不少人捧捧场,鼓励下,就更有动力继续了。可是 Android 上,会有源源不断的新手加入进来,它的门槛实在太低,至少它没要求你必须先买台苹果电脑才能做开发一样。而且吧,Google 吸引的开发者中,本身就很多喜欢开源精神的,我不能说这不好,但我个人不喜欢的。培养整个群体对软件应当收费的认识,作为一个开发者,你自己做的软件去收费才心安理得。其实这对用户也不好。比如出现了一大堆练手的做的理财软件,功能都不是非常完善,但都凑和能用。不少用户会退而选择免费软件。于是,真正做好的软件的开发商相对来说收益就有减少,可能继续开发动力也不大。这是一个恶性循环啦。

有人说,平台完全开源,于是不会像微软和 Apple 那样,保留很多内部 API 不对外开放。我要说,你一定是不够了解 Android。Android 有大量内部包和内部类,打了@hide 标签,于是不在最终 SDK 中出现。这些 API 你当然可以看到,因为它是开源的,可是你又用不了。不信你去看看 com.android.internal 开头的包。内嵌的程序有用这些 API,你用 SDK 时是不能使用的。人家的理由也很正当,这些 API 可能随时会变,你去使用这些是不稳定的,所以干脆不让你用好了。说到这里,顺便说下,这个平台的更新过于频繁,G1 上市也谈不上很久,RC15, RC29, RC30, RC33 一堆升级包出来了。确实每次都可能伴随着内部类的变化,让你也不敢去使用。还不如 WM 每个版本稳定好一阵子,那些偷偷发现的未公开类也可以放心地使用好一阵子。有些未公开类,M$知道大家用了,为了兼容性,不得不在以后版本也保持兼容,而不去改动接口。Google 冠冕堂皇地说,这些 API 本来就公开了,也说明将来会变的,早说你们不该用。理由看起来还更充分一些。

那么,平台开源了,API 实现都能看到了,至少对开发更有帮助吧?不见得。你是更愿意有好的文档和示例清清楚楚写明用法呢,还是打算自己去看源代码自己了解下怎么使用呢?Google 的文档远比不上 MSDN 的。光看 TextView 的文档,看 setText 的 API 说明,你能猜到这个东西竟然是支持文字着色,字体改变,加链接,甚至能在 TextView 中嵌入图片的么?而且,不是谁都有时间去研究那一大堆代码的。很多情况下,大家不过也是打打工混口饭吃,老板给个活,按要求完成就行了。本来不外乎看看文档,调用下 API,能跑了就交差了。这下好了,文档看不明白,只能去看看怎么实现的了。Android 还真是个大项目,不说底层和 native c lib 部分,光 Java framework 要有个了解,也得先研究两天。不是说程序员就得是技术爱好者的。

然后,说说 Android 平台本身。开源不等于开放。就我感觉来看,智能平台上,除了 blackberry,估计就 android 限制最多了,可能用词不准确,因为人家不是故意限制,就是没有设计能让你去做到而已,反正意思就是你能做的事情被限制住了。iPhone 虽然提供的接口也限制很大,但至少在越狱后,用第三方的头文件,还是可以做到的,并且确实也有不少用户是越狱过的。比如说中文输入法就一度(我不确定现在行不行)在原生 iPhone 上是安装不了的。举例来说吧,如果是一个非当前前台的程序,你没有能力去得到整个屏幕的句柄。于是很常见的来电归属地功能就不太好实现。Palm, Symbian, WM 上人家都可以直接获得系统的 Window,直接绘制个字符串上去,android 上说,这有安全问题,从来没有打算让你这么做。再比如,WM 和 Symbian 的 Idle screen,就是桌面啦,WM 上叫 Today 的那一屏,都是支持 plugin。Android 的 Launcher 就不支持,也不支持 html widget 应用,现有的那个虽然有添加 widget,但那都是内置写死的小控件。这点上来说,应该不是故意不让你实现,估计是人家自己都没想到好的解决方案吧。虽然 Intent 机制可以实现大多 plugin 功能,但是这种需要自己处理绘制,用户操作事件的,就是想内嵌一个 View 进另一个程序的,目前好像还没看到解决方案。更不用说,我一直很喜欢的 Palm 上的 “开放性”,你可以处理全局所有的用户事件,拦截处理掉本该给其它程序的事件,这样可以做出很多扩展功能来,像 DA 一类增强性的,都有点像 hack 了系统一样。Android 有它的安全性考虑。安全性和扩展性大概是有点矛盾的吧。只是,限制得这么死,我觉得开发者的乐趣就少了很多。一般印象中,开源的产品,你觉得不满意,当然可以自己改。作为开发者,你拥有所有代码,你当然可以改,把上面说到的功能点都按自己期望的给做出来,改完后编译出新的 ROM 烧到自己机器上。可是这只能是给自己玩的而已。难道想发布一个绘制屏幕的来电归属地,就需要让用户自己刷一次机器?

前面说了,对于 Java 开发者来说,Android 入门的门槛很低。但会是一回事儿,做好是另一回事儿。如果你已经熟练使用 Java,并且深谙 OO(面向对象)之道,那么,你需要好好改改习惯,看看 android performance best practice,很多优化是反 OO 的。比如说,建议你最好直接访问对象的值,而不是用 getXXX, setXXX 这种方式。那么,如果你熟练了 android 开发,但按它的思路做,找新的非 android 开发的 java 职位时,也得重新准备准备,不然可能过不了笔试面试的基础知识关。

Google 的 SDK 是 Java sdk,虽然完全开源了,但仍然没有提供方便的写 jni,以及 native code lib 工具。Google 说,那是不需要的,你用 Java 写应用程序就好了。事实上呢?听说前阵子内部开发分支上的英文输入法,原来是纯 Java 的,最近一次更新,也改用 jni 实现了。还有据说,Google 打算出个编辑 txt 文件的记事本工具,也打算用 jni 实现。说明 android 里的 java 效率也不是那么好的。当然,如果你只是一个很普通的应用,应该是可以接受的。曾经 android 刚出来的时候,有个 Quake 游戏运行的 demo 也很有名,事实上,那东西里主要还是 c 代码。

再来看看运营商和制造商。一般的,运营商要求也不是很多,改个主题显示下品牌,加点自有的服务进去就行了。不幸的,android 连主题都不能支持,WM, Symbian 一直以来都是支持的。为了改变 android 的主题,还需要改 framework,缺点后面讲。加点应用程序一般不是什么问题。但像 HTC 做 WM,把很多内置程序也换了,像电话本甚至浏览器。不得不说,android 这点也是不如 WM 的。Google07 年刚发布 Android 时,介绍就说,你可以替换任何程序,电话本,桌面,等等。事实上,对于手机制造商和运营商也确实是有这个能力。但是 Android 老是升级,变化又大,这些内置的程序和系统关联大。每次系统升级,都很有可能会伴随着这些程序的变化。如果厂商自己做了更改,就需要不停地有人去维护这些代码,保持和最新 android 的兼容。即使 merge code 的工作量谈不上很大。但是作为一个大量发布的产品,是需要严格的测试的。那么,有的厂商用原生的 android 出的系统,比如 G1,如果你改了很多程序,虽然 google 新的代码有可能会同时提供给所有厂商,但是你就多了 merge code 和测试这部分工作,少说也要一两周。那么,你的新 rom 的发布就会比其它厂商慢。而前面也说过,android 的用户是比较 geek 的,有追新软件一类的癖好,久而久之,用户就可能不喜欢你这种方式,转而用原生的 android 系统去。前面说的,运营商想改个主题要改 framework 也是一个道理,这种改动,是需要经常的和 google merge code,紧跟发布的。还有点不是很相关的是,因为 android 开源,所以大佬们都会以为是自己的好机会,目前知道的,个别运营商和制造商都有打算在自己发布的 android 机器上放上自己的 app store。那么,作为开发者来说,你们有得忙了,乐观点看,只是要在不同的平台上发布自己的软件,更糟的情况是,可能各家的 SDK 都有点变化,你还需要为各款机器做兼容性测试,就像非业内人士都误信 j2me 可以很好跨手机平台,事实上,几乎要为各款机器做点改动,适应不同分辨率一类的问题。

还有点,android 至今仍不是很成熟。一月的新代码里,短信程序才支持发送中文字符,至今官方升级还没有软键盘,更没有输入法框架,做不了输入法。 CDMA 分支也在开发中。作为厂商,比如你想出款 CDMA 机器,或想出款适合中国人用的机器,那么你就需要对系统内部做不少改动。那么你将来有长期地维护工作,merge code,以便和 android 保持兼容。更糟糕的情况可能是,比如你自己费了半年时间,加进了 CDMA 支持,后来 google 也终于完成它的 cdma 支持了,那你打算直接用它的代码,还是维护自己旧的呢?目前看起来,甚至连 OHA 成员提交的代码 merge 进主分支都很困难,这也是说 android 开源不开放的一个原因。

讨论部分完毕。那么 android 开源了,怎么去利用这个好处呢?而且它的授权协议很好,是 Apache license,你改了也不用必须再开源。曾经,大家都认为这是山寨厂商的好机会。现在想来,其实不是。Android 怎么说也是智能平台,对硬件配置要求不低,一般来说,成本不可能低于一千。那么,这就和传统的山寨厂商的目标群体的接受度不同。大家觉得 android 对山寨厂商利好,无非是觉得这个平台免费,成本可以压低。事实上,国内的山寨厂做 Windows Mobile 的机器时,也是不交钱的~而真对于大厂商的好机器来说,对最终用户手上,一款三四千的机器,相差这么两百块钱授权费用,用户又不知道是哪里省出来的,也不是非常在意的。大厂商为了保持和 android 官方版本兼容性,也不敢大改动。我曾经有个想法就是,反正山寨厂商也从来不在意什么协议。拿 android 改个好用点平台出来,多加些内置软件,就算不发布 SDK,不再支持第三方程序,也会受欢迎。比如说,android 上有好的浏览器。山寨厂商可以完全把界面改得和 iPhone 一模一样,现有的仿 iPhone 机器大多基于 MTK 一类,由于平台本身比较弱,也学不得很像,比如那个浏览器就学不来。Android 自身又由于苹果专利,没有在 G1 上打开多点触摸支持,山寨厂可以不管这些。不过现在看来,可惜受限于前面提及的成本问题,估计用户也没兴趣了,何必花一千多买个没扩展性的机器呢。

总的来讲,我是唱衰 android 的。

更多讨论,移步 http://bbs.ifanr.com/viewthread.php?tid=1138&extra=page%3D1

登录,参与讨论前请先登录

评论在审核通过后将对所有人可见

正在加载中

Explorative Vision Abbreviated Nature 做一个有创新有想法的程序员,活跃于手机开发圈,多年的Palm, Android开发经验。

本篇来自栏目

解锁订阅模式,获得更多专属优质内容