写在前面的
这是我最近两年的Android开发的经验总结,断断续续的写了几个月了,欢迎大家砖头,有不对的地方,或需要改进的地方,请指出来,先贴出来目录来看看。2.1.1 VMware Workstation介绍... 9
2.1.2安装VMwareWorkstation虚拟机软件... 10
2.4.5 通过AndroidSDK Manager创建模拟器... 64
3.3 Zygote守护进程与system_server进程.... 85
3.3.2 ZygoteInit类的功能与system_server进程的创建... 92
3.3.3 system_server进程的运行... 95
第四章、Android编译系统与定制Android平台系统... 101
4.1.3实验:编译HelloWorld应用程序... 104
4.7.2 RegisterNatives方法... 138
5.5 Android的Looper、Handler同步.... 146
9.2.2 Android Java服务框架分析... 147
10.3.2 构造hw_device_t子结构... 148
10.3.3 整合Service本地与Stub代码... 148
11.2 Android服务的Manager与Service. 148
11.4.2 整合Service与Stub代码... 148
第一章、概述
本章节主要介绍Android系统基本特点、系统架构组成及Android应用开发方式。
主要内容:
l Android 操作系统介绍
l Android软件架构介绍
l Android子系统介绍
l Android应用程序开发过程
1.1 Android 操作系统介绍
Android是Google公司于2007年11月发布的一款非常优秀的智能移动平台操作系统。到2011年第一季度Android在全球的市场份额首次超过Nokia的Symbian系统,跃居全球第一。
Android系统最初由AndyRubin等人于2003年10月创建。Google于2005年8月17日收购Android并组建OHA①开放手机联盟开发改良Android,之后逐渐扩展到平板电脑及其他移动平台领域上。
Android系统是一个基于ApacheLicense②, GPL③软件许可的开源手机操作系统,底层由Linux操作系统作为内核,我们可以直接从Android的官方网站上下载最新的Android源码和相关开发工具包。
Android官方首页:
http://www.android.com/
Android官方开发者首页:
http://developer.android.com/index.html
Android官方开源项目AOSP首页:
http://source.android.com/
1.2 Android软件架构介绍
Android的软件架构采用了分层结构,如图1-1所示,由上至下分别为:Application应用层、Application Framework应用框架层、Android Runtime&Libraries运行时库和本地库层、LinuxKernel内核层。
图1-1 Android软件架构图
1) Application应用层:用户安装应用程序及系统自带应用程序层,主要用来与用户进行交互,如Home指Android手机的桌面,Phone指电话应用,用来拨打电话等。
2) Application Framework应用框架层:系统框架层,封装了大量应用程序所使用的类,从而达到组件重用的目的,它主要向上层应用层提供API,如:ActivityManager主要用于管理所有的Activity画面导航、回退等生命周期相关的操作,PackageManager主要用来管理程序安装包的安装、更新、删除等操作。
3) Android Runtime&Libraries运行时库和本地库层:Runtime是Android的运行环境,在该层有DalvikVirtualMachine(Android的虚拟机简称DVM)的实现,在DVM中运行着Java的核心语言库代码和Java程序。同时,在DVM运行期间要调用系统库代码,如:负责显示的SurfaceManager本地代码,负责多媒体处理相关的Media Frameworks代码及C库libc等。
4) Linux Kernel内核层:Android系统是基于Linux系统的,所以Android底层系统相关的框架和标准的Linux内核没有什么很大的区别,只不过添加了几个Android系统运行必备的驱动,如:Binder IPC进程间通信驱动、Power Manager电源管理驱动等。
总结:Android的软件架构是我们学习Android开发必须要掌握的知识点,它对我们将来编写Android应用程序、理解Android框架代码、编写本地代码、修改底层驱动都有重要的指导意义,可谓是学习Android的灵魂。
1.3 Android子系统介绍
Android是一个庞大的手机的系统,它不仅仅实现了手机的基本的打电话,发信息的功能,还实现了更复杂的多媒体处理、2D和3D游戏处理、信息感知处理等。
图1-2 Android主要子系统
Android的子系统主要包含:
1) Android RIL子系统:
Radio Interface Layer(简称:RIL)子系统,即:无线电接口系统用于管理用户的电话、短信、数据通信等相关功能,它是每个移动通信设备必备的系统。
2) Android Input子系统:
Input输入子系统用来处理所有来自己用户的输入数据,如:触摸屏,声音控制物理按键等。
3) Android GUI子系统:
GUI即:图形用户接口,也就是所谓的图形界面,它用来负责显示系统图形化界面,形象让用户和系统操作及信息进行交互。Android的 GUI系统和其它各子系统关系密切相关,是Android中最重要的子系统之一,如:绘制一个2D图形、通过OpenGL库处理3D游戏、通过SurfaceFlinger①来重叠几个图形界面。
4) Android Audio子系统:
Android的音频处理子系统,主要用于音频方面的数据流传输和控制功能,也负责音频设备的管理。Android的Audio系统和多媒体处理紧密相连,如:视频的音频处理和播放、电话通信及录音等。
5) Android Media子系统:
Android的多媒体子系统,它是Android系统中最庞大的子系统,与硬件编解码、OpenCore多媒体框架、Android多媒体框架等相关,如:音频播放器,视频播放器,Camera摄像预览等。
6) Android Connectivity子系统:
Android连接子系统是智能设备的重要组成部分,它除了一般所谓的网络连接,如:以太网、WI-FI②外,还包含:蓝牙连接、GPS③定位连接、NFC④等。
7) Android Sensor子系统:
Android的传感器子系统为当前智能设备大大提高了交互性,它在一新创新的应用程序和应用体验里发挥了重要作用,传感器子系统和手机的硬件设备紧密相关,如:gyroscope陀螺仪、accelerometer加速度计、proximity距离感应器、magnetic磁力传感器等。
① Android中图形混合器,用于将屏幕上显示的多个图形进行混合显示。
② Wi-Fi全称wireless fidelity是当今使用最广的一种无线网络传输技术。
③ GPS是英文Global Positioning System(全球定位系统)的简称。
④ NFC是Near FieldCommunication缩写,即近距离无线通讯技术。由飞利浦公司和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC 和智能控件工具间进行近距离无线通信。
1.4 Android应用程序开发过程
Android应用程序开发是基于Android架构提供的API和类库编写程序,这些应用程序是完全的Java代码程序,它们构建在Android系统提供的API之上。
Android开发方式:
开发Android应用程序可以基于Google提供的Android SDK开发工具包,也可以直接在Android源码中进行编写。
1) Android SDK开发:
它提供给程序员一种最快捷的开发方式,基于IDE开发环境和SDK套件,快速开发出标准的Android应用程序,但是,对于一些要修改框架代码或基于自定义API的高级开发,这种方式难以胜任。
2) Android源码开发:
基于Android提供的源码进行开发,可以最大体现出开源的优势,让用户自定义个性的Android系统,开发出更高效、更与众不同的应用程序,这种方式更适合于系统级开发,对程序员要求比较高,这也是我们本书的重点。
Android源码开发过程:
Ø 搭建开发环境:
根据两种开发方式的不同,搭建开发环境略有不同,本书侧重于系统底层源码开发,只介绍第二种开发方式,对于第一种方式,请读者参考相关书箱资料。
Ø 下载Android源码:
得益于Android的开源特点,Android源码中包含大量保贵的技术知识,我们可以在阅读源码过程中更深入的了解Android系统的奥秘,为我们编写更高效、更有特点的应用程序打下基础,同时能展现给读者一个更庞大系统的设计蓝图,为系统设计师及项目经理提供参考价值。同时,Android的源码中提供的应用程序示例、设计模式、软件架构为我们编写大型应用程序提供经验。
Ø 编译Android源码:
通过编译Android源码,生成我们开发环境及目标系统,为我们做系统底层开发、系统定制与优化做准备,通过分析编译过程,让我们学习到大型工程的代码管理与编译原理。
Ø 配置开发环境安装
为了更有效的开发,我们通常会对开发环境做配置,不同的程序员可能会有不同的编程习惯。
1.5 章节练习
1) 简述Android系统的软件构架组成?
2) 简述AndroidSensor子系统的主要作用?