深入浅出 - Android系统移植与平台开发(一)

写在前面的

  这是我最近两年的Android开发的经验总结,断断续续的写了几个月了,欢迎大家砖头,有不对的地方,或需要改进的地方,请指出来,先贴出来目录来看看。

第一章、     概述... 5

1.1            Android 操作系统介绍.... 5

1.2            Android软件架构介绍.... 6

1.3            Android子系统介绍.... 7

1.4            Android应用程序开发过程.... 8

1.5            章节练习.... 8

第二章、     Android源码开发环境搭建... 9

2.1搭建主机虚拟机环境.... 9

2.1.1 VMware Workstation介绍... 9

2.1.2安装VMwareWorkstation虚拟机软件... 10

2.1.2 安装Ubuntu操作系统... 15

2.1.3 VMware网络配置... 32

2.1.4 VMware与主机数据共享... 37

2.1.5 VMware添加新硬件... 41

2.1.6 练习... 46

2.2 搭建Linux编译环境.... 46

2.2.1建立Ubuntu编译环境... 47

2.2.2 JDK安装... 47

2.2.2 安装Android编译工具... 49

2.2.3 下载Android源码... 49

2.2.4 下载Linux内核源码... 51

2.2.4练习... 51

2.3编译Android源码.... 51

2.3.1Android源码目录结构... 51

2.3.2编译Android. 54

2.3.3编译Linux内核... 58

2.4搭建Android SDK开发环境.... 59

2.4.1 下载、安装Eclipse. 59

2.4.2 安装ADT插件... 60

2.4.3下载、配置AndroidSDK工具包... 62

2.4.4下载AndroidSDK平台... 64

2.4.5 通过AndroidSDK Manager创建模拟器... 64

2.4.6应用程序Framework源码级调试... 66

2.5定制Android模拟器.... 73

2.6章节练习.... 74

第三章、Android系统的启动... 75

3.1 Android init进程启动.... 75

3.1.1Android init脚本语言... 76

3.1.2 练习... 81

3.2 Android本地守护进程.... 81

3.2.1 ueventd进程... 82

3.2.2adbd进程... 83

3.2.3 servicemanager进程... 84

3.2.4 vold进程... 84

3.2.5 ril-daemon进程... 84

3.2.6 surfaceflinger进程... 85

3.3 Zygote守护进程与system_server进程.... 85

3.3.1 Zygote守护进程的启动... 86

3.3.2 ZygoteInit类的功能与system_server进程的创建... 92

3.3.3 system_server进程的运行... 95

3.3.4Home桌面的启动... 99

3.3.5 练习... 101

3.4 章节练习.... 101

第四章、Android编译系统与定制Android平台系统... 101

4.1Android编译系统.... 101

4.1.1 Android编译系统介绍... 101

4.1.2Android.mk文件... 102

4.1.3实验:编译HelloWorld应用程序... 104

4.1.3 练习... 107

4.3定制Android平台系统.... 107

4.3.1 添加新产品编译项... 107

4.3.2 定制产品的意义及定制要点... 112

4.3.3实验:定制开机界面... 113

4.3.4实验:定制开机文字... 117

4.3.5实验:定制系统开机动画... 118

4.3.5实验:定制系统桌面... 121

3.2.4练习... 122

4.4 章节练习.... 122

第五章、JNI机制... 122

4.1 JNI概述.... 122

4.2 JNI原理.... 123

4.2.1 JavaVM与JNIEnv. 123

4.3 JNI中的数据传递.... 125

4.3.1JNI基本类型... 125

4.3.2 JNI引用类型... 126

4.4 Java访问本地方法.... 126

4.5 JNI访问Java成员.... 127

4.5.1取得Java属性ID和方法ID.. 128

4.5.2 JNI类型签名... 129

4.5.3 JNI操作Java属性和方法... 130

4.5.4 在本地代码中创建Java对象... 131

4.5.5 Java数组在本地代码中的处理... 133

4.6  局部引用与全局引用.... 134

4.6.1局部引用... 135

4.6.2 全局引用... 135

4.6.3 在Java环境中保存JNI对象... 136

4.7本地方法的注册.... 137

4.7.1 JNI_OnLoad方法... 137

4.7.2 RegisterNatives方法... 138

4.8 JNI调用实验.... 140

4.9 章节练习.... 146

第六章、Android的对象管理与同步机制... 146

5.1 轻量级指针.... 146

5.2 RefBase类.... 146

5.3 强指针.... 146

5.4 弱指针.... 146

5.5 Android的Looper、Handler同步.... 146

5.6 章节练习.... 146

第七章、Binder通信... 146

7.1 AndroidBinderIPC.. 146

7.1.1 Linux的IPC机制... 146

7.1.2 为什么选择Binder机制... 146

7.1.3 Binder IPC数据传递... 146

7.2Binder框架分析.... 146

7.2.1 Binder驱动介绍... 146

7.2.2 Binder的系统构架... 146

7.3 章节练习.... 146

第八章、Android服务管理... 146

8.1 Android的服务种类.... 146

8.1.1 本地服务... 146

8.1.2 Android框架服务... 146

8.2 ServiceManager介绍.... 147

8.2.1 Service的注册... 147

8.2.2 获取Service. 147

8.3 ProcessState类分析.... 147

8.4章节练习.... 147

第九章、Android的服务... 147

9.1 本地系统服务框架介绍.... 147

9.1.1 本地服务的注册... 147

9.1.2 本地服务的获取... 147

9.2本地系统服务的实现.... 147

9.2 Android Java服务... 147

9.2.1 Android Java服务介绍... 147

9.2.2 Android Java服务框架分析... 147

92.3 Android Java服务的实现... 147

9.3 章节练习.... 147

第十章、Android HAL硬件抽象层... 147

10.1 Android HAL介绍.... 147

10.1.1 HAL存在的原因... 147

10.1.2 HAL新旧架构对比... 147

10.1.3 练习... 147

10.2 Android HAL框架分析.... 148

10.2.1 硬件模块与设备操作代理... 148

10.2.2 硬件模块的获得与使用... 148

10.2.3练习... 148

10.3 HAL Stub设计流程.... 148

10.3.1 设计应用程序API148

10.3.2 构造hw_device_t子结构... 148

10.3.3 整合Service本地与Stub代码... 148

10.3.4  编写测试应用程序... 148

10.3.5 测试... 148

10.4 章节练习.... 148

第十一章、HAL硬件抽象层进阶... 148

11.1 Android服务与硬件抽象层.... 148

11.2 Android服务的Manager与Service. 148

11.3 HAL的控制流与数据流.... 148

11.4 进阶HAL设计流程.... 148

11.4.1 Service API设计... 148

11.4.1 Manager设计... 148

11.4.2 整合Service与Stub代码... 148

11.4.3 编写测试应用... 148

11.4.4 测试... 148

11.5 章节练习.... 149

第十二章、企业级应用:社区智能医疗平板... 149

12.1 项目介绍.... 149

12.2 项目开发流程.... 149

12.3需求分析.... 149

12.4 详细设计.... 149

12.5 功能测试.... 149

12.6总结.... 149


+---------------------------------------------------------------------------------------------------------------------------------------------+

第一章、概述

本章节主要介绍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子系统的主要作用?

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值