Android,可能在iphone引入中国之前,对很多人还是相当陌生的。套用一句古话,“既生瑜,何生亮”。那么已经有了iphone,为什么又非得搞一个Android呢。但是假如你对互联网非常敏感,你就会发现第二次浪潮已经来临,这就是以iphone,ipad带领出来移动互联网。我们知道,在传统的桌面PC时代,微软凭借着WINTEl联盟,编造了微软和英特尔帝国。但随着网络的普及,Google凭借搜索引擎一举成为互联网的霸主。虽然现在FaceBook凭着社交互联网大有后来居上之势,但是在互联网领域,微软始终郁郁不得志。那么我们再来观察一下另外一个帝国,苹果公司。苹果向来是不走平常路,在传统PC领域,虽然Wintel联盟占据了绝大部分的市场份额,但是最酷、最小众的PC仍然由苹果来引导。在互联网领域,苹果是彻底的不沾边,但是在具有天才的颠覆意识的乔布斯教主带领下,硬生生的创立了一个新时代,平板电脑时代和移动互联网时代。很幸运的时候,Google在iPhone热卖不到半年的时候,迅速意识到一个划时代的来临。通过悄悄收购了Andy Rubin创建的创业公司,于2007年11月5日,联合其它33家厂商,组成开发手机联盟OHA(Open Handset Alliance),并发布了第一版本的Android开放手机平台。
1.0.1 Android平台发展简史Andriod原意是机器人,是由Andy Rubin领导的一家创业公司开发的基于Linux平台的开源手机操作系统。经Google收购后,迅速推出多个版本的Android系统平台,如1.0,1.1,1.5、1.6,目前市场机器安装的大部分系统是2.2和2.3,其它像3.0版本主要针对是平板电脑。
Android一经推出就受到了业界的热捧,这是因为Android是完全开源的,源代码可以直接下载,这为想进入移动互联网的厂商和开发人员提供了极大的方便,以前像Symbain和WINCE等,厂商想要开发这些产品,需要交钱得到授权,开发人员只能通过厂家提供的开发手册来了解系统。现在一切都可以查看到源码,厂商可以自由定制,程序开发人员也可以更直接的了解底层实现,开发出更好的应用程序。
下图是Android与iphone应用开发的一个简单比较列表,从中可以看出,中国优势就是熟悉JAVA的程序员遍地就是,因此开发起Android程序应该是非常顺手。
Android整个的发展史可以简述如下:
- 2005年Google收购了刚刚成立22个月的Android公司,该公司的创建人是Andy Rubin,标准的说法,它就是一个Geek,从最早在苹果公司到微软公司,接着Danger公司,都开发出超越时代的产品,其中在Danger公司后来被微软收购,生产出kin系统手机。
- 2007年11月5日开发手机联盟(Open Handset Alliance ,简称OHA)宣布成立。
- 2007年11月12日发布第一版本Android SDK,并于2008年4月17日举办Android开发竞赛。接着2008年8月28日Android Market 上线,为平台开发者提供软件下载收入分成,极大的推动了程序开发者的参与积极性。
- 2008年9月23日第一款Android手机上市,通称G1,由T-Mobile运营,以后随着宏达电(HTC)及摩托罗拉(MOTOROLA)全力推进,现在在美国市场占有率已高达40%。
目前,Google为Android系统的开发网站是www.android.com,此网站一度被封,现在已解禁。这网站提供了围绕Android开发的SDK,MARKET,SOURCE等。
上面是主界面,Google分别为合作者提供了三个入口,针对开发者的Developers和Market入口,以及针对合作伙伴的partner入口。
这个界面是针对应用开发者的入口,开发者可以从中获取SDK,Eclipse 插件包,API文档以丰富的实例及讨论文章。
Android Market主要为开发者开发出的应用APP提供一个出售的平台,开发者可以通过这个网站出售自己的应用,并与GOOGLE获取分成。
这个界面是Android系统源码网站,需要对内核进行开发或者查看的可以使用git工具进行下载。
1.0.2 手机平台开发模式及Android 平台特性
手机作为一种消费产品,从最初的高档产品到进入到普罗大众手中,时间并不长,现在在中国,几乎可以说是人手一台,而且还有很多专门针对特定人群的,如家里的老人使用老人手机、小孩使用小孩手机。针对手机的开发也经历了如下几个过程:
- 传统手机开发,传统手机开发通常完全由手机厂商提供,手机厂商向开发电视一样提供给用户一个封闭系统,用户通常只能使用里面的功能,不能参与定制自己想要的功能。
- 半开放式手机开发,在这种场景下,厂商依然制造独有手机系统,但是会为第三方提供应用开发接口,比喻基于J2ME、BREW等。这当中随着基于MTK系统的中国山寨手机的蓬勃发展,杭州斯凯网络公司www.sky-mobi.com是非常有名的。
- 全开放式手机开发,因为半开发模式下,还需要针对不同的厂商进行定制开发,因此对开发者还是有相当多的束缚。全开放模式下,各个厂商在统一开放的平台上进行手机操作系统开发,第三方应用也是基于统一开放的平台进行开发。因此围绕开发平台形成了一个生态系统。这个也是目前各大公司非常强调的,没有生态系统,就注定你的手机系统的灭亡,如Norkia的Symbian和HP的WEBOS.
1)工业厂商:Android 操作系统是开源的,大部分源码基于Apache 2.0 license,任何人都可根据源码构造一个手机操作系统(基于ARM平台)
2)用户:可根据自己喜好自由安装应用、自由修改定制系统缺省选项、自由定制界面满足个性化需求
3)开发者:可根据源码和SDK开发应用,所有应用没有任何权限限制,可以集成、扩展或者替换系统原有应用。
Android平台是一个开放的系统,本身是基于Linux2.6.24系统进行裁剪的,但是现在发展出来已经不能跟原生态LINUX完全兼容了。因为它是一个庞大的系统,光源码就有8G,所以要想完全吃透也是非常困难的。但是Android采用的是整合思想,不同边界的开发者只需要掌握其中一部分就可以进行开发了。总体上来说,Android平台包括底层的LINUX系统,中间的应用框架系统Framework、虚拟机以及运行在虚拟器之上的应用系统。
Android平台的主要特性:
- 应用程序框架支持组件的重用和替换,非常方便
- 内置了3D,2D开发库,同时支持多种音频、视频和静态图像格式,对一些硬件接口如蓝牙、像机、GPS、指南针、速度计、NFC等都提供了上层丰富接口,便于应用开发
- 应用部署在Dalvik虚拟机上,这个虚拟机不同于其它虚拟机,在于它是基于寄存器可运行于较慢CPU上,并且对RAM需要也小,系统总共只占有64MB,并且每个线程启动一个虚拟机,而不是一个虚拟器支持多个应用。它是将JAVA的class文件转换成dex文件,因此可以支持J2EE所有的JAVA类库
- 提供了内置SQLite和Webkit,并且基于Eclipse提供了一个丰富的开发工具包,其中包括模拟器、设计工具、内存及性能分析工具。
Android平台的基本架构如下图所示:
我们从下往上看,Android 平台分为linux kernel、Native libararies、Android Runtime和Application Framework.
- Linux Kernel: Android是建立在Linux kernel之上的,但是Android不是一个新的Linux发布版本,像ubuntu那样。它没有视窗系统,也不提供glibc支持,也没有包含全部的linux的工作包,它是基于标准的2.6.24 Kernel之后新开的分支,新增加了Alarm、Ashmem、Binder、Power Managememt、Logger、Kernel Debugger、Low Memory Killer等增强功能
- Libraries:Android的C/C++库通过应用程序框架为应用提供服务,这些库又分为以下几种:
1)Bionic LibC,一个来源于BSD专为嵌入式Linux服务的C库,它使用BSD授权,运行代码非常小而快速,但不兼容GLIBC,也不支持所有POSIX特性,因此开发本地JNI代码时需要用Bionic C 进行编译。
2)Function Libraries:基于开源WebKit(http://www.webkit.org)提供了CSS,JavaScript,DOM,AJAX支持,并且也支持单栏和自适应显示。基于PacketVideo OpenCORE 平台提供了标准的视频、音频和图片支持,也内置了一些硬解和软解的插件以支持多种媒体格式,基于FreeType提供了位图和向量字体显示。
3)SQLite:轻量级关系型数据存储引擎,它已经被广泛应用于很多平台。
4)Native Servers Surface flinger,提供了系统范围内的surface “composer”,支持2D/3D
Audio Flinger,管理音频输出设备,处理多种音频流转为PCM输出。
5)Hardware Abstraction Libraries(HAL),指得是用户空间的C/C++库,定义了一些公共接口,这些接口由底层驱动进行实现,实现了平台逻辑和应用实现的独立,这样做的好处是避免暴露了驱动的私有实现。
- Androd Runtime Android 移植了Apache的JAVA 虚拟器实现,并使用Clean--room方式重新实现了虚拟机Dalvik,Dalvik运行优化过的DEX代码,支持CPU优化的字节码翻译和高效内存利用,也支持一台设备运行多个虚拟机进程,专为JAVA提供了许多核心类实现。大部分JAVA类库均可直接使用,但必须重新编辑,特别是一个第三方库,使用时最好重新编译过。
- Application FrameWork 开发者通过它可完全可以访问核心应用平台库,它提供了一系统列服务包括Activity,Package,window,Resoure等管理和content provider及View 系统。它也提供了访问硬件接口服务如电话,位置、蓝牙、WIFI、USB等服务
1.0.3 Android的开发类型
Android是一个开放的系统,不同的开发者针对不同的功能域进行开发,按照参与Android生态系统的三类人员对象可分如下两种:
- 手机厂商主要针对是移植开发,移植开发的最终目的是针设计好的硬件系统开发手机软件系统,通常包括相关设备驱动程序的开发,实现Android本地框架中的硬件抽象层接口。
- 应用开发者主要基于Android提供的应用框架进行应用开发,通常如果应用框架不能满足应用需要,开发者也可以进行系统定制开发,这类开发所需要的技术以Android SDK、Android NDK为基础。
1.0.4 Android的工具
Android提供了一系统工具用来辅助系统开发,这些工具随SDK一同发布给开发者。如果在Windows 下可以查看这个下载目录下的tools和platform-tools文件夹。
这些主要的工具包括 :
- aapt(Android asset packaging tool),用于建立zip兼容的包,也可以用于将资源编译成二制的assets,它主要用android打包过程。
- AIDL工具(Android接口描述语言工具),AIDL可以生成进程间接口代码
- dx工具,用于将.class字节码转换为Android 字节码
- Android工具是一个脚本,可以可视化创建一个虚拟设备也可以命令行方式创建。为什么要创建一个虚拟设备呢,虚拟设备主要针对不同的targets(如Android 1.5,1.6,2.1等),设置参数用来配置模拟器。
- Emulator(模拟器),模拟器是一个运行于主机上的程序,模拟器通常与android脚本工具一起使用,首先使用android 创建一个虚拟设备AVD,再用模拟器起动这个虚拟设备。Android开发提供的模拟器功能虽然很强,但有些硬件是不支持的,如呼叫实际来电,USB等。
- mksdcard,Sqlite3及Draw-9-patch都是分别用来创建模拟SDK、访问SQLITE数据文件和创建NinePatch图形。
- ADB是平台调试工具,当一个模拟器起动之后,可以使用ADB登陆到这个系统的shell.Adb 可以安装卸载软件,也可以将本地文件上传到模拟器也可以从模拟器下载文件。
- 其它像DDMS,Hierachy view 等工具分别提供了调试监视服务和层级优化工具。
转载于:https://blog.51cto.com/acreep/643987