# Android是一个好的选择么？

- 作者：姜一帆
- 发布时间：2009-03-02 00:05
- 分类：公司
- 原文：https://www.ifanr.com/1532

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

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

![](http://farm4.static.flickr.com/3291/2987275926_acee467327.jpg?v=0)

前两天在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&amp;extra=page%3D1](http://bbs.ifanr.com/viewthread.php?tid=1138&extra=page%3D1 "http://bbs.ifanr.com/viewthread.php?tid=1138&amp;extra=page%3D1")
