整理的内容并不是简单地复制了博客上的文章。博客文章由于发表得比较匆忙,不到六个月的时间,一共发表了50篇原创文章,平均每周发表两篇,而且都是利用工作之余时间来发表,因此,很多内容都不够全面、深入和细致。例如,在分析Binder进程间通信机制的一系列博客文章中,并没有提及到Binder对象的引用计数技术、死亡通知机制等重要内容,对Binder驱动中的内存管理也分析得不够系统;又如,在分析Android应用程序的安装过程时,没有提及到系统是如何为应用程序分配Linux用户ID以及Linux用户组ID。整理的内容对博客文章中不够全面、学入和细致的地方进行了相应的补充。此外,博客文章也会出现一些错误。例如,在《Android应用程序键盘(Keyboard)消息处理机制分析》这篇博客文章中,网友@foresee321指出了注册系统当前激活窗口的过程有误。整理的内容也对这些错误作出了修正。博客文章不够全面、深入、细致以及有误的地方不能一一而足,不过它们在重新整理的内容中都得到了解决。
整理的内容从初学者的角度来组织,由浅入深、自下而上地对Android系统的源代码进行了分析,目录结构如下所示:
- 第一篇初识Android系统...........................................6
- 第一章准备知识..............................................7
- 1.1准备Linux内核基础知识................................7
- 1.2准备Android应用程序基础知识..........................8
- 1.3下载、编译和运行Android源代码........................8
- 1.3.1安装Git工具....................................9
- 1.3.2安装JavaSDK...................................9
- 1.3.3安装其它工具包.................................9
- 1.3.4安装repo工具...................................9
- 1.3.5下载Android源代码..............................9
- 1.3.6编译Android源代码..............................10
- 1.3.7运行Android模拟器..............................11
- 1.4下载、编译和运行Android内核源代码....................12
- 1.4.1下载Android内核源代码..........................12
- 1.4.2修改Makefile文件...............................13
- 1.4.3编译Android内核源代码..........................13
- 1.4.4运行Android模拟器..............................14
- 1.5开发第一个Android应用程序............................14
- 1.6编译和打包单个Android应用程序模块....................17
- 1.6.1导入编译单个模块的mmm命令......................17
- 1.6.2编译单个Android应用程序模块....................18
- 1.6.3重新打包Android系统镜像文件....................18
- 第二章硬件抽象层............................................19
- 2.1开发Android硬件驱动程序..............................20
- 2.1.1实现内核驱动程序模块...........................21
- 2.1.2修改内核Kconfig文件............................27
- 2.1.3修改内核Makefile文件...........................28
- 2.1.4编译内核驱动程序模块...........................28
- 2.1.5验证内核驱动程序模块...........................29
- 2.2开发C可执行程序验证Android硬件驱动程序...............30
- 2.3开发Android硬件抽象层模块............................32
- 2.3.1硬件抽象层编写规范.............................32
- 2.3.1.1模块文件的命令规范.......................32
- 2.3.1.2结构体定义规范...........................33
- 2.3.2实现硬件抽象层访问接口.........................35
- 2.3.3硬件抽象层模块加载过程分析.....................39
- 2.3.4处理硬件设备访问权限问题.......................42
- 2.4开发Android硬件访问服务..............................44
- 2.4.1定义硬件访问服务接口...........................44
- 2.4.2实现硬件访问服务...............................45
- 2.4.3实现硬件访问服务的Java本地接口方法............46
- 2.4.4启动硬件访问服务...............................49
- 2.5开发Android应用程序来调用硬件访问服务................50
- 第三章智能指针..............................................55
- 3.1轻量级指针...........................................57
- 3.1.1实现原理分析...................................57
- 3.1.2使用实例分析...................................59
- 3.2强指针和弱指针.......................................61
- 3.2.1强指针的实现原理分析...........................61
- 3.2.2弱指针的实现原理分析...........................68
- 3.2.3强指针和弱指针的使用实例分析...................74
- 第二篇Android专用驱动系统.......................................79
- 第四章Logger日志系统........................................80
- 4.1Logger驱动程序.......................................83
- 4.1.1相关数据结构...................................83
- 4.1.2设备初始化过程.................................85
- 4.1.3设备文件打开过程...............................90
- 4.1.4日志读取过程...................................91
- 4.1.5日志写入过程...................................95
- 4.2运行时日志库写入接口.................................100
- 4.3C/C++日志写入接口....................................106
- 4.4Java日志写入接口.....................................110
- 4.5Logcat工具分析.......................................116
- 4.5.1相关数据结构...................................117
- 4.5.2初始化过程.....................................121
- 4.5.3日志读取过程...................................133
- 4.5.4日志输出过程...................................137
- 第五章Binder进程间通信系统..................................149
- 5.1Binder驱动程序.......................................151
- 5.1.1相关数据结构...................................152
- 5.1.2设备初始化过程.................................172
- 5.1.3设备文件打开过程...............................173
- 5.1.4设备文件内存映射过程...........................174
- 5.1.5内核缓冲区管理.................................181
- 5.1.5.1分配内核缓冲区...........................181
- 5.1.5.2释放内核缓冲区...........................187
- 5.1.5.3查询内核缓冲区...........................192
- 5.2Binder进程间通信库...................................193
- 5.3Binder进程间通信应用实例.............................197
- 5.4Binder对象引用计数技术...............................205
- 5.4.1Binder本地对象的生命周期.......................206
- 5.4.2Binder实体对象的生命周期.......................210
- 5.4.3Binder引用对象的生命周期.......................213
- 5.4.4Binder代理对象的生命周期.......................218
- 5.5Binder对象死亡通知机制...............................221
- 5.5.1注册死亡接收通知...............................221
- 5.5.2发送死亡接收通知...............................225
- 5.5.3注销死亡接收通知...............................229
- 5.6ServiceManager的启动过程............................232
- 5.6.1打开和映射Binder设备文件.......................234
- 5.6.2注册成为Binder上下文管理者.....................235
- 5.6.3循环等待Client进程请求.........................239
- 5.7ServiceManager代理对象接口的获取过程................245
- 5.8Service的启动过程....................................252
- 5.8.1注册Service组件................................253
- 5.8.1.1封装通信数据为Parcel对象.................254
- 5.8.1.2发送和处理BC_TRANSACTION命令协议.........257
- 5.8.1.3发送和处理BR_TRANSACTION返回协议.........270
- 5.8.1.4发送和处理BC_REPLY命令协议...............282
- 5.8.1.5发送和处理BR_REPLY返回协议...............288
- 5.8.2循环等待Client进程请求.........................291
- 5.9Service代理对象接口的获取过程........................294
- 5.10Binder进程间通信机制的Java实现接口..................302
- 5.10.1获取ServiceManager的Java代理对象接口.........303
- 5.10.2AIDL服务接口解析..............................312
- 5.10.3Java服务的启动过程............................315
- 5.10.4获取Java服务的代理对象接口....................321
- 5.10.5Java服务的调用过程............................324
- 第六章Ashmem匿名共享内存系统................................329
- 6.1Ashmem驱动程序.......................................330
- 6.1.1相关数据结构...................................330
- 6.1.2设备初始化过程.................................332
- 6.1.3设备文件打开过程...............................334
- 6.1.4设备文件内存映射过程...........................336
- 6.1.5内存块的锁定和解锁过程.........................338
- 6.1.6解锁状态内存块的回收过程.......................345
- 6.2运行时库cutils的匿名共享内存接口.....................346
- 6.3匿名共享内存的C++访问接口............................349
- 6.3.1MemoryHeapBase.................................349
- 6.3.1.1Server端的实现...........................349
- 6.3.1.2Client端的实现...........................353
- 6.3.2MemoryBase.....................................359
- 6.3.2.1Server端的实现...........................360
- 6.3.2.2Client端的实现...........................362
- 6.3.3应用实例.......................................364
- 6.4匿名共享内存的Java访问接口...........................370
- 6.4.1MemoryFile.....................................370
- 6.4.2应用实例.......................................375
- 6.5匿名共享内存的共享原理分析...........................386
- 第三篇Android应用程序框架篇.....................................390
- 第七章Activity组件的启动过程................................391
- 7.1Activity组件应用实例.................................391
- 7.2根Activity的启动过程.................................397
- 7.3Activity在进程内的启动过程...........................429
- 7.4Activity在新进程中的启动过程.........................438
- 第八章Service组件的启动过程.................................441
- 8.1Service组件应用实例..................................441
- 8.2Service在新进程中的启动过程..........................448
- 8.3Service在进程内的绑定过程............................460
- 第九章Android系统广播机制...................................483
- 9.1广播应用实例.........................................484
- 9.2广播接收者的注册过程.................................491
- 9.3广播的发送过程.......................................499
- 第十章ContentProvider组件的实现原理........................521
- 10.1ContentProvider组件应用实例........................522
- 10.1.1ArticlesProvider..............................523
- 10.1.2Article.......................................533
- 10.2ContentProvider组件的启动过程......................548
- 10.3ContentProvider组件的数据共享原理..................570
- 10.4ContentProvider组件的数据更新通知机制..............593
- 10.4.1内容观察者的注册过程..........................594
- 10.4.2数据更新的通知过程............................601
- 第十一章Zygote和System进程的启动过程........................609
- 11.1Zygote进程的启动脚本................................609
- 11.2Zygote进程的启动过程................................612
- 11.3System进程的启动过程................................619
- 第十二章Android应用程序进程的启动过程.......................628
- 12.1应用程序进程的创建过程..............................628
- 12.2Binder线程池的启动过程..............................637
- 12.3消息循环的创建过程..................................640
- 第十三章Android应用程序的消息处理机制.......................644
- 13.1创建线程消息队列....................................644
- 13.2线程消息循环过程....................................649
- 13.3线程消息发送过程....................................654
- 13.4线程消息处理过程....................................658
- 第十四章Android应用程序的键盘消息处理机制...................666
- 14.1InputManager的启动过程..............................669
- 14.1.1创建InputManager..............................669
- 14.1.2启动InputManager..............................672
- 14.1.3启动InputDispatcher...........................674
- 14.1.4启动InputReader...............................676
- 14.2InputChannel的注册过程..............................687
- 14.2.1创建InputChannel..............................688
- 14.2.2注册Server端InputChannel......................695
- 14.2.3注册当前激活窗口..............................699
- 14.2.4注册Client端InputChannel......................704
- 14.3键盘消息的分发过程..................................708
- 14.3.1InputReader处理键盘事件.......................708
- 14.3.2InputDispatcher分发键盘事件...................715
- 14.3.3当前激活的窗口获得键盘消息....................727
- 14.3.4InputDispatcher获得键盘事件处理完成通知.......741
- 14.4InputChannel的注销过程..............................745
- 14.4.1销毁应用程序窗口..............................746
- 14.4.2注销Client端InputChannel......................754
- 14.4.3注销Server端InputChannel......................756
- 第十五章Android应用程序线程的消息循环模型...................762
- 15.1应用程序主线程消息循环模型..........................762
- 15.2界面无关的应用程序子线程消息循环模型................764
- 15.3界面相关的应用程序子线程消息循环模型................766
- 第十六章Android应用程序的安装和显示过程.....................775
- 16.1应用程序的安装过程..................................775
- 16.2应用程序的显示过程..................................808
第二篇也是包含三个章节,分析Android系统在Linux内核中的三个专用驱动,分别是日志驱动、Binder驱动和匿名共享内存驱动。毋容置疑,这三个专用驱动构成了Android系统的基础,学习它们对了解Android系统有非常大的帮助。
第三篇包含了十个章节,系统地分析Android应用程序的架构,从应用程序组件、进程、消息和安装四个角度来它进行系统的分析。移动平台最核心的竞争力是运行在它上面的丰富的、高质量的应用程序,而这些丰富的、高质量的应用程序离不开优秀的应用程序基础设施和架构,因此,花了很大的篇幅来介绍Android应用程序的架构,同时它是理解整个Android系统的一个很好切入点,毕竟系统所做的一切都是为使得它上面的应用程序能够好好地运行、好好地为用户服务。
转自:http://blog.csdn.net/luoshengyang/article/details/7409491