我们先来看一组数据:


根据调研机构Strategy Analytics的最新统计数据,2014第三季度,iOS和Android已经占据全球首能手机96%的市场份额。

其中,Android依然是绝对的霸主,豪取83.6%,而且相比去年同期又增长了3个百分点,iOS占比为12.3%,同比下降1.1个百分点,差距还是很明显的。接着就是Windows Phone,目前占比4.1%,小幅增长,而黑莓系统已经只剩下可怜的0.7%。其它操作系统合计0.1%。

毫无疑问,iOS、Android已经成为这个世界上最主流的两大移动操作系统。而安卓系统则是继ios之后一个非常差成功的移动操作系统。


现在,我们要考虑的是安卓为什么能成功?


也许你会说”是开源造就了安卓的成功“,没错,安卓能够成功的最重要的因素是开源,任何手机厂商都可以谷歌通过的开源政策免费获得操作系统的使用权,同时也可以基于该操作系统进行个性化定制,打造自己的操作系统(安卓系统的定制版)!也正是由于安卓系统,才造就了包括三星、华为、中兴、小米等众多国内外手机厂商的成功。


当然,除了”开源“这个原因外,操作系统自身的良好特性也是非常重要的原因,比如实用性、易用性、稳定性、安全性以及功能性(也叫拓展性)和娱乐性。其中,操作系统的实用性、易用性、稳定性以及安全性是由操作系统自身决定的(比如选择linux作为操作系统内核加上谷歌对基础功能特性的完善);操作系统的功能性和娱乐性则是通过第三方应用程序来实现的,而这第三方程序开发简称安卓开发,其开发语言就是大名鼎鼎的java。


下面言归正传,来聊一下谷歌为什么选择java语言作为安卓系统的开发语言


上面说到了安卓操作系统是开源的,其开源的初衷便是希望通过该措施整合所有的手机硬件提供商以及手机生产厂商,说的更本质一点的就是谷歌希望让安卓系统能运行于任何不同类型的硬件上,而其中的硬件主要便是指CPU,其中包括,高通、德州仪器、三星,甚至包括国产的华为(海思处理器)。如果要让一个app(应用程序)能够在各种不同的平台设备上运行,开发语言就必须跨平台(也许你会问,”跨平台“是相对于不同的操作系统而言的,运行安卓系统的手机虽然硬件不同,但操作系统都是安卓啊?这是一个常识性的问题,跨平台包括两个概念,一个是跨操作系统,另一个是跨硬件,而我们所说的就是跨硬件。),通过跨平台屏蔽底层硬件的差异,而不必让程序员为了考虑底层硬件的不同写出不同的代码。那么是谁能够做到跨平台、一次编译到处运行并且能够保证效率?显然是java。当然你也会说python也可以,那我只想说一点,这个东西纯解释型的语言,效率太低。为什么不用c或c++?哦,别开玩笑了,他们不能跨平台;为什么不用object-c?这就更开玩笑了,这个东东是苹果的儿子,先不说他跨不跨平台了,单是苹果是谷歌的生死对手就不会用;为什么不用C#?这个问题的答案见上一个;为什么不用go,这可是google自家的语言啊?


对于这个问题,得细说一下:go是编译型语言,做不到跨平台,如果要做跨平台,谷歌必须为go在安卓系统中开发出一套运行时环境(RunTime,类似于微软的CLR和甲骨文的JVM),而让go写出的程序先”编译“成中间语言,然后在这套”运行时环境“中再次编译成机器码。也许有些朋友会说了,这一套东西不就是微软的.NET(CLR)和甲骨文的JVM做的事情么,呵呵,你说对了,我相信凭借谷歌的实力是很容易做到的,毕竟开发出一套运行时环境或者叫虚拟机不是难事(Davilik就是谷歌开发的应用于安卓的"JVM")。其实还有一个非常重要的原因,是因为当时Java语言是一个相当成熟的计算机编程语种,除了基础类库完善,各种高效的第三方组件更是不计其数,最最重要的一点是Java虚拟机规范也是开放的,谷歌只要按照甲骨文的虚拟机规范很容易写出一套虚拟机(这个虚拟机总比为go写一套”虚拟机“容易的多,有现成的规范)。除了这些之外,还有一个原因是因为,当时java的程序员太多了,而让这些人转向安卓开发太容易了(而go才刚起步,用的人并不多)!


PS:

1.谷歌采取开源措施是非常时期的妥协政策,内在原因如下:

当时的市场iPhone占的份额已经相当高了,塞班,黑莓等老大已经显露颓势,在这种情况下:

一方面其他硬件厂商希望能进入市场分一杯羹;

另一方面Google出于自身利益,当时Google是iOS的默认搜索引擎,但是万一Apple和Google翻脸呢?Google不能冒这种风险,正巧这时又冒出了一个Android,所以Google就顺势收购了Android团队,并把安迪·鲁宾收编进了Google最开始Google对Android也没有太高的期望,只是为了捅iOS一刀,所以采取了非常妥协的政策:完全开源,厂家自主定制 。


2.采取开源的弊端:

这个弊端现在已经比较严重了,那就是,开源导致系统的碎片化以及部分设备版本滞后的问题。乐观的是,谷歌现在正致力于解决这个问题而努力。


3.何为跨平台,以及实现跨平台的技术要点?

跨平台泛指程序语言、软件或硬件设备可以在多种作业系统或不同硬件架构的电脑上运作。

跨平台的核心要点就是”Runtime/中间件环境“的支持,具体可以参考.NET的CRL和甲骨文的JVM,http://blog.csdn.net/zhu_xun/article/details/40681105。






更多相关文章

  1. Android启动篇 — init原理(一)
  2. 修改编译android文件系统编译链版本
  3. cocos2d-2.0-x-2.0.3多平台环境搭建(android, win32)
  4. android ListView美化-->几个比较特别的属性
  5. Android之如何获取手机中所有的传感器
  6. Android(安卓)4.1 Jelly Bean(果冻豆) SDK4.1最新下载
  7. Android(安卓)NDK开发(四) 将FFmpeg移植到Android平台
  8. 【转】关于Android的.so文件你所需要知道的(二)
  9. Android(安卓)游戏设计教程:游戏元素和工具

随机推荐

  1. android视频截图
  2. android 多媒体扫描过程(Android(安卓)Med
  3. android表格数据移动功能
  4. Android(安卓)Spinner
  5. android之MultiAutoCompleteTextView
  6. Android——Hardware Acceleration
  7. Android(安卓)通知Notification的两种实
  8. Android(安卓)开发者该学点Linux 命令了
  9. ANDROID 【GRIDVIEW】 DETAILED ANNOTATI
  10. How to Run Android(安卓)Applications o