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

Android移植 专栏收录该内容
60 篇文章 13 订阅

写在前面的

  这是我最近两年的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子系统的主要作用?

相关推荐
作 者: 王友钊 ,黄静 ,戴燕云 著,王友钊 ,黄静 ,戴燕云 编 出版时间: 2013 丛编项: 21世纪高等学校计算机专业实用规划教材 《21世纪高等学校计算机专业实用规划教材:Android系统开发实践》是以讨论Android系统平台为基础,并结合实例讲解基于Android系统平台的应用开发实践过程为主要内容的基础教程和实践指导类教材。书中全方位讲解Google开放移动应用平台Android的各种特性,深入探讨了应用程序的基本组件、界面布局的基础,结合Internet实现通讯录的设计和发送短信实例详细介绍了Android系统平台开发的步骤和方法,从而实现对Android系统平台开发的深入了解。《21世纪高等学校计算机专业实用规划教材:Android系统开发实践》共分为三大部分:第部分为第1章到第3章,主要介绍了Android系统的起源和相关的基础知识,为后面章节学习的基础;第二部分为第4章到第6章,主要介绍了Android系统开发的入门、Android应用程序的结构开发,以及Android在传感器网络方面的应用,为Android系统平台开发的基础;第三部分为第7章,通过实例的剖析和讲解指导读者实现对Android系统平台开发应用。《21世纪高等学校计算机专业实用规划教材:Android系统开发实践》内容丰富、分类合理清晰,既可作为大专院校电子信息类专业本科生和研究生的基础教材使用,还可作为有Android系统平台开发需求的初学者,以及有Android系统平台基础的开发人员的学习参老书。
 本书内容   本书的各个章节及其组织方式如下所示。   第1章“Android系统概述”,概述Android系统方面的内容,包括智能手机平台的发展历程、Android系统的特点、Android的3种开发工作,以及Android的2种不同的开发方式。   第2章“Android系统开发综述”,介绍Android系统开发的综述性内容,包括工具使用、获得代码、编译系统、仿真器运行、SDK使用等。   第3章“Android的Linux内核驱动程序”,介绍Android内核的特点、Android中使用的专用驱动程序、Android系统可能使用的标准设备驱动。   第4章“Android的底层库和程序”,介绍Android系统的基础程序,以本地程序为主。   第5章“Android的Java虚拟机和Java环境”,这是介于本地和Java层之间的相关内容,主要介绍Android的Java虚拟机Dalvik的基本概念、Android Java程序的环境、JNI的使用方法,以及Java框架的启动流程等。   第6章“Android的GUI系统”,包括Android GUI系统架构、底层的pixelflinger和libui库、Surface系统、Skia和2D图形系统Android的OpenGL和3D图形系统等内容。   第7章“Android的Audio系统”,主要是音频的输入输出环节,音频系统从驱动程序、本地框架到Java框架都具有内容。   第8章“Android的Video输入输出系统”,介绍Android的Video输入输出系统,包括Overlay系统和Camera系统两个部分,前者只有本地的内容,后者各个层次均有内容。   第9章“Android的多媒体系统”,介绍Android的多媒体系统的核心部分,包括Android中多媒体系统的业务、结构、多媒体系统的核心框架、OpenCore系统结构和使用等内容。   第10章“Android的电话部分”,介绍Android系统在电话方面的功能,Android是智能手机系统,电话是其核心部分。   第11章“Android的连接部分”,主要包括WiFi、蓝牙及定位系统等,这些Android的连接部分也具有从驱动层到Java应用层的结构。   第12章“Android的传感器系统”,传感器系统涉及Android的各个层次,具有完整的结构,相比其他系统,传感器系统的各个层次都比较简单。   第6~12章分模块介绍Android的几个核心系统,主要是本地框架和Java框架方面的内容,兼顾应用程序和驱动层,这是本书的重点。   第13章“Android应用程序概述及框架”,介绍Android应用程序层的基本概念和应用程序框架,这部分内容是Android自下而上的第4个层次,可以基于源代码或者SDK开发,它们之间的差别非常小。   第14章“Android应用程序的主要方面”,介绍Android应用程序层开发的各个方面,基本上是横向内容,包括应用程序的基本控制、各种UI元素的使用、图形API使用3个方面的内容。   第15章“Android应用程序的设计思想”,本章的内容是基于通用的应用程序和GUI程序的通用设计思想,结合Android系统自身的特点,提出些值得注意的问题和设计方法。   本书读者   本书适应广大的读者群,力求在Android系统移植、应用程序开发系统框架改进方面给读者全面的支持。不同的读者在学习本书时,应该使用不同的方法。   Android初级开发者:在本书指引下阅读代码,搭建系统开发环境,对于Android应用程序的开发者,重点关注后3章的内容。   Android中、高级开发者:通过本书的引导,学习系统架构,关注开发要点,并尽量使用手机系统的通用设计思想、软件工程思想、系统工程思想来指导Android系统学习。   嵌入式Linux系统学习者:将Android作为个集Linux核心和应用层程序于体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。   读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,这样可以达到事半功倍的效果。本书在重点代码中加上大量的注释,帮助读者阅读,对于非重点的代码,不占用本书的篇幅,读者可以参考开放的源代码。可以采用顺序读和重点读相结合的方式学习本书,顺序读关注系统框架,重点读关注开发要点。   本书作者   本书在编写过程中提炼和综合Android早期开发者的经验、中国大陆Androidin社区的开发成果,以及各位专家的经验和技术,这是本书出版的知识源泉。本书主要由Androidin社区的两名核心技术专家韩超和梁泉领衔规划和编著,韩超统稿。总部设在南加州、专注于Android平台并提供
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值