当当网:http://product.dangdang.com/product.aspx?product_id=22884086
京东网:http://book.360buy.com/11104739.html
亚马逊:http://www.amazon.cn/Android系统源代码情景分析-罗升阳/dp/B009OLU8EE(满150减30)
互动网:http://product.china-pub.com/3684413
苏宁易购网:http://www.suning.com/emall/prd_10052_22001_-7_3435777_.html
本书繁体版已经成功输出到台湾!
整理的内容并不是简单地复制了博客上的文章。博客文章由于发表得比较匆忙,不到六个月的时间,一共发表了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 安装Java SDK...................................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.1 Logger驱动程序.......................................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.3 C/C++日志写入接口....................................106
- 4.4 Java日志写入接口.....................................110
- 4.5 Logcat工具分析.......................................116
- 4.5.1 相关数据结构...................................117
- 4.5.2 初始化过程.....................................121
- 4.5.3 日志读取过程...................................133
- 4.5.4 日志输出过程...................................137
- 第五章 Binder进程间通信系统..................................149
- 5.1 Binder驱动程序.......................................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.2 Binder进程间通信库...................................193
- 5.3 Binder进程间通信应用实例.............................197
- 5.4 Binder对象引用计数技术...............................205
- 5.4.1 Binder本地对象的生命周期.......................206
- 5.4.2 Binder实体对象的生命周期.......................210
- 5.4.3 Binder引用对象的生命周期.......................213
- 5.4.4 Binder代理对象的生命周期.......................218
- 5.5 Binder对象死亡通知机制...............................221
- 5.5.1 注册死亡接收通知...............................221
- 5.5.2 发送死亡接收通知...............................225
- 5.5.3 注销死亡接收通知...............................229
- 5.6 Service Manager的启动过程............................232
- 5.6.1 打开和映射Binder设备文件.......................234
- 5.6.2 注册成为Binder上下文管理者.....................235
- 5.6.3 循环等待Client进程请求.........................239
- 5.7 Service Manager代理对象接口的获取过程................245
- 5.8 Service的启动过程....................................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.9 Service代理对象接口的获取过程........................294
- 5.10 Binder进程间通信机制的Java实现接口..................302
- 5.10.1 获取Service Manager的Java代理对象接口.........303
- 5.10.2 AIDL服务接口解析..............................312
- 5.10.3 Java服务的启动过程............................315
- 5.10.4 获取Java服务的代理对象接口....................321
- 5.10.5 Java服务的调用过程............................324
- 第六章 Ashmem匿名共享内存系统................................329
- 6.1 Ashmem驱动程序.......................................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.1 MemoryHeapBase.................................349
- 6.3.1.1 Server端的实现...........................349
- 6.3.1.2 Client端的实现...........................353
- 6.3.2 MemoryBase.....................................359
- 6.3.2.1 Server端的实现...........................360
- 6.3.2.2 Client端的实现...........................362
- 6.3.3 应用实例.......................................364
- 6.4 匿名共享内存的Java访问接口...........................370
- 6.4.1 MemoryFile.....................................370
- 6.4.2 应用实例.......................................375
- 6.5 匿名共享内存的共享原理分析...........................386
- 第三篇 Android应用程序框架篇.....................................390
- 第七章 Activity组件的启动过程................................391
- 7.1 Activity组件应用实例.................................391
- 7.2 根Activity的启动过程.................................397
- 7.3 Activity在进程内的启动过程...........................429
- 7.4 Activity在新进程中的启动过程.........................438
- 第八章 Service组件的启动过程.................................441
- 8.1 Service组件应用实例..................................441
- 8.2 Service在新进程中的启动过程..........................448
- 8.3 Service在进程内的绑定过程............................460
- 第九章 Android系统广播机制...................................483
- 9.1 广播应用实例.........................................484
- 9.2 广播接收者的注册过程.................................491
- 9.3 广播的发送过程.......................................499
- 第十章 Content Provider组件的实现原理........................521
- 10.1 Content Provider组件应用实例........................522
- 10.1.1 ArticlesProvider..............................523
- 10.1.2 Article.......................................533
- 10.2 Content Provider组件的启动过程......................548
- 10.3 Content Provider组件的数据共享原理..................570
- 10.4 Content Provider组件的数据更新通知机制..............593
- 10.4.1 内容观察者的注册过程..........................594
- 10.4.2 数据更新的通知过程............................601
- 第十一章 Zygote和System进程的启动过程........................609
- 11.1 Zygote进程的启动脚本................................609
- 11.2 Zygote进程的启动过程................................612
- 11.3 System进程的启动过程................................619
- 第十二章 Android应用程序进程的启动过程.......................628
- 12.1 应用程序进程的创建过程..............................628
- 12.2 Binder线程池的启动过程..............................637
- 12.3 消息循环的创建过程..................................640
- 第十三章 Android应用程序的消息处理机制.......................644
- 13.1 创建线程消息队列....................................644
- 13.2 线程消息循环过程....................................649
- 13.3 线程消息发送过程....................................654
- 13.4 线程消息处理过程....................................658
- 第十四章 Android应用程序的键盘消息处理机制...................666
- 14.1 InputManager的启动过程..............................669
- 14.1.1 创建InputManager..............................669
- 14.1.2 启动InputManager..............................672
- 14.1.3 启动InputDispatcher...........................674
- 14.1.4 启动InputReader...............................676
- 14.2 InputChannel的注册过程..............................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.1 InputReader处理键盘事件.......................708
- 14.3.2 InputDispatcher分发键盘事件...................715
- 14.3.3 当前激活的窗口获得键盘消息....................727
- 14.3.4 InputDispatcher获得键盘事件处理完成通知.......741
- 14.4 InputChannel的注销过程..............................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://product.dangdang.com/product.aspx?product_id=22884086
京东网:http://book.360buy.com/11104739.html
亚马逊:http://www.amazon.cn/Android系统源代码情景分析-罗升阳/dp/B009OLU8EE(满150减30)
互动网:http://product.china-pub.com/3684413
苏宁易购网:http://www.suning.com/emall/prd_10052_22001_-7_3435777_.html
本书繁体版已经成功输出到台湾!
本文转自:http://blog.csdn.net/luoshengyang/article/details/7409491
- 相关文章
- Android开发中利用ndk-stack解决ndk开发中动态库.so崩溃的问题 (43人浏览)
- Android开发中如何改变RadioButton背景图片和文字的相对位置 (179人浏览)
- android开发环境之ADT安装,卸载,更新 (13人浏览)
- Android开发之ListView页眉页脚效果VS android背景渐变 (32人浏览)