《Android系统原始码情景分析》是2012年10月出版的图书,作者是罗昇阳。
在内容上,本书结合使用情景,全面、深入、细緻地分析了Android系统的原始码,涉及到Linux核心层、硬体抽象层(HAL)、运行时库层(Runtime)、应用程式框架层(Application Framework)以及应用程式层(Application)。
基本介绍
- 书名:Android系统原始码情景分析
- 作者:罗昇阳着
- ISBN:978-7-121-18108-5
- 页数:840页
- 定价:109.00元
- 出版社:2012年10月出版
- 开本:16开
内容简介
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程式框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日誌驱动程式、Binder进程间通信驱动程式以及Ashmem匿名共享记忆体驱动程式;Android应用程式框架篇从组件、进程、讯息以及安装四个维度对Android应用程式的框架进行了深入的剖析。
通过上述内容及其组织,本书能使读者既能从整体上把握Android系统的层次结构,又能从细节上掌握每一个层次的要点。
作者简介
罗昇阳,1984年出生,2007年毕业于浙江大学计算机系,取得学士学位,2010年毕业于上海交通大学计算机系,取得硕士学位。毕业后一直从事于网际网路软体开发,并且致力于移动平台的研究,特别是对Android平台有深入的理解和研究。在国内知名IT技术社区CSDN上发表了数十篇高质量的Android系统原创性文章,并且开设部落格专栏--《老罗的Android之旅》,积极与网友互动,深受大家喜爱,访问量一直居于前茅。
网友评论
强大的罗大师,感谢你的Android之旅,我已看完你的6篇教程,虽然我还不太懂,但是我相信你就是我打开它的那把钥匙,再次感谢你的教程。
——mutex_js
老罗,写的太精彩啦!不仅仅是在Android 按键机制方面令人受益匪浅,给我在学习其他模组上也提供了一套很好的分析思路。非常感谢!
——yuleslie
看你的文章,收穫很多,分析得很透彻,思路清晰,前后呼应,成系统,对我帮助很大,非常感谢你的无私奉献!
——kenen2006
你的部落格给了我一种非常刺激的体验,让我更深层次地认识Android。非常感谢你的讲解,太棒了!
——stevenhu_223
我真的想放弃这个行业,可我看到你的部落格,让我看到了希望,让我充满了信心和坚定!
——zhudeqing
看过几本Andriod方面的书,但还真比不上这里的部落格。罗老师的Linux核心知识及对软体架构的知识积累用功很深,代码阅读能力也很强!膜拜!
——herodie
我是看你的部落格开始学Android的,写的真的太好了。每一个系列都自成一体,无需其他参考。从顶到下都能串到一起,这样看起来最痛快了!
——hellowolrd
本人语言功底也不是很好,所以系统学习Android也经历了不少困难。3个多月了,反反覆覆阅读你的博文;每一次都有进步,每一次的进步也都有不同的方向。谢谢!技术的道路上真没有捷径,更不可以偷懒。我将不懈努力!谢谢博主,期待您能出书!
——tankai19880619
刚看到老罗的这篇新作,还挺热乎的。忍不住分N口气读完,膜拜!读完后,有些有意思的想法,从文章本身来看,很精彩。这篇文章老罗至少说明了一下问题:
1. 两种最典型的使用场景及他们的区别(UI相关与否);
2. 引出来两种执行绪讯息处理模型;
3. 用实例解释两种模型是如何使用的;
4. 最后介绍两种模型的是怎样实现的。
该文章不但告诉我们what(该文的主旨)、how (怎样使用),还有why(怎幺实现)。
偶的神,一篇文章里写了这幺多,还能写的这幺清楚。不容易啊!
——rambo2188
太牛了!我是一个刚从事Android开发的新人,你的文章真是入木三分,读了很有启发,你的这种分析Android方式很棒!为了造福更多的Android学习者,建议你出书!
——yang105
我觉得也许学习这些知识并不算难,可是要做到时刻有一个清晰的思路去学并且能够把学过东西用通俗易懂的话语表达出来挺难的。必儘自身知识有限,有些东西可能一下子无法深刻理解。楼主是怎幺做到的呢?感觉楼主的每篇文章都讲的精练透彻,主要是能把问题全讲出来。我想楼主的知识面一定很广!
——wantianpei
前言
虽然Android系统自2008年9月发布第一个版本1.0以来,2011年10月发布最新版本4.0,一共存在十多个版本,但是据官方统计,截至2012年3月5日,占据首位的是Android 2.3,市场占有率达到66.5%;其次是Android 2.2,市场占有率为25.3%;第三位是Android 2.1,市场占有率为6.6%;而最新发布的Android 3.2和Android 4.0的市场占有率只有3.3%和2%。因此,在本书中,我们选择了Android 2.3的原始码来分析Android系统的实现,一是因为它的基础架构是最稳定的;二是因为它是使用最广泛的。
本书内容
全书分为初识Android系统篇、Android专用驱动系统篇和Android应用程式框架篇三个部分。
初识Android系统篇包含三个章节的内容,主要介绍Android系统的基础知识。第1章介绍与Android系统有关的参考书籍,以及Android原始码工程环境的搭建方法;第2章介绍Android系统的硬体抽象层;第3章介绍Android系统的智慧型指针。读者可能会觉得奇怪,为什幺一开始就介绍Android系统的硬体抽象层呢?因为涉及硬体,它似乎是一个深奥的知识点。其实不然,Android系统的硬体抽象层无论是从实现上,还是从使用上,它的层次都是非常清晰的,而且从下到上涵盖了整个Android系统,包括Android系统在用户空间和核心空间的实现。核心空间主要涉及硬体驱动程式的编写方法,而用户空间涉及运行时库层、应用程式框架层及应用程式层。因此,儘早学习Android系统的硬体抽象层,有助于我们从整体上去认识Android系统,以便后面可以更好地分析它的原始码。在分析Android系统原始码的过程中,经常会碰到智慧型指针,第3章我们就重点分析Android系统智慧型指针的实
现原理,也是为了后面可以更好地分析Android系统原始码。
Android专用驱动系统篇包含三个章节的内容。我们知道,Android系统是基于Linux核心来开发的,但是由于移动设备的CPU和记忆体配置都要比PC低,因此,Android系统并不是完全在Linux核心上开发的,而是在Linux核心里面添加了一些专用的驱动模组来使它更适合于移动设备。这些专用的驱动模组同时也形成了Android系统的坚实基础,尤其是Logger日誌驱动程式、Binder进程间通信驱动程式,以及Ashmem匿名共享记忆体驱动程式,它们在Android系统中被广泛地使用。在此篇中,我们分别在第4章、第5章和第6章分析Logger日誌系统、Binder进程间通信系统和Ashmem共享记忆体系统的实现原理,为后面深入分析Android应用程式的框架打下良好的基础。
Android应用程式框架篇包含十个章节的内容。我们知道,在移动平台中,Android系统、iOS系统和Windows Phone系统正在形成三足鼎立之势,谁的应用程式更丰富、质量更高、用户体验更好,谁就能取得最终的胜利。因此,每个平台都在尽最大努力吸引第三方开发者来为其开发应用程式。这就要求平台必须提供良好的应用程式架构,以便第三方开发者可以将更多的精力集中在应用程式的业务逻辑上,从而开发出数量更多、质量更高和用户体验更好的应用程式。在此篇中,我们将从组件、进程、讯息和安装四个维度来分析Android应用程式的实现框架。第7章到第10章分析Android应用程式四大组件Activity、Service、Broadcast Receiver和Content Provider的实现原理;第11章和第12章分析Android应用程式进程的启动过程;第13章到第15章分析Android应用程式的讯息处理机制;第16章分析Android应用程式的安装和显示过程。学习了这些知识之后,我们就可以掌握Android系统的精髓了。
本书特点
本书从初学者的角度出发,结合具体的使用情景,在纵向和横向上对Android系统的原始码进行了全面、深入、细緻的分析。在纵向上,採用从下到上的方式,分析的原始码涉及了Android系统的核心层(Linux Kernel)、硬体抽象层(HAL)、运行时库层(Runtime)、应用程式框架层(Application Framework)以及应用程式层(Application),这有利于读者从整体上掌握Android系统的架构。在横向上,从Android应用程式的组件、进程、讯息以及安装四个角度出发,全面地剖析了Android系统的应用程式框架层,这有利于读者深入地理解Android应用程式的架构以及运行原理。
目录
第1篇初识Android系统
第1章 準备知识................................................................ 2
1.1 Linux核心参考书籍.................................................. 2
1.2 Android应用程式参考书籍....................................... 3
1.3 下载、编译和运行Android原始码........................... 3
1.3.1 下载Android原始码........................................... 4
1.3.2 编译Android原始码........................................... 4
1.3.3 运行Android模拟器........................................... 5
1.4 下载、编译和运行Android核心原始码............................................................ 6
1.4.1 下载Android核心原始码................................... 6
1.4.2 编译Android核心原始码................................... 7
1.4.3 运行Android模拟器........................................... 8
1.5 开发第一个Android应用程式................................... 8
1.6 单独编译和打包Android应用程式模组.......................................................... 11
1.6.1 导入单独编译模组的mmm命令............................................................... 11
1.6.2 单独编译Android应用程式模组............................................................... 12
1.6.3 重新打包Android系统镜像档案............................................................... 12
第2章 硬体抽象层....................................................... 13
2.1 开发Android硬体驱动程式..................................... 14
2.1.1 实现核心驱动程式模组.................................. 14
2.1.2 修改核心Kconfig档案...................................... 21
2.1.3 修改核心Makefile档案..................................... 22
2.1.4 编译核心驱动程式模组.................................. 22
2.1.5 验证核心驱动程式模组.................................. 23
2.2 开发C可执行程式验证Android硬体驱动程式............................................... 24
2.3 开发Android硬体抽象层模组................................. 26
2.3.1 硬体抽象层模组编写规範............................... 26
2.3.2 编写硬体抽象层模组接口............................... 29
2.3.3 硬体抽象层模组的载入过程........................... 33
2.3.4 处理硬体设备访问许可权问题........................... 36
2.4 开发Android硬体访问服务..................................... 38
2.4.1 定义硬体访问服务接口.................................. 38
2.4.2 实现硬体访问服务.......................................... 39
2.4.3 实现硬体访问服务的JNI方法.......................... 40
2.4.4 启动硬体访问服务.......................................... 43
2.5 开发Android应用程式来使用硬体访问服务.................................................. 44
第3章 智慧型指针............................................................... 49
3.1 轻量级指针............................................................. 50
3.1.1 实现原理分析................................................ 50
3.1.2 套用实例分析................................................ 53
3.2 强指针和弱指针..................................................... 54
3.2.1 强指针的实现原理分析.................................. 55
3.2.2 弱指针的实现原理分析.................................. 61
3.2.3 套用实例分析................................................ 67
第2篇Android专用驱动系统
第4章 Logger日誌系统............................................. 74
4.1 Logger日誌格式....................................................... 75
4.2 Logger日誌驱动程式.............................................. 76
4.2.1 基础数据结构................................................ 77
4.2.2 日誌设备的初始化过程.................................. 78
4.2.3 日誌设备档案的打开过程............................... 83
4.2.4 日誌记录的读取过程...................................... 84
4.2.5 日誌记录的写入过程...................................... 88
4.3 运行时库层日誌库................................................. 93
4.4 C/C++日誌写入接口............................................. 100
4.5 Java日誌写入接口................................................ 104
4.6 Logcat工具分析..................................................... 110
4.6.1 基础数据结构.............................................. 111
4.6.2 初始化过程.................................................. 115
4.6.3 日誌记录的读取过程.................................... 127
4.6.4 日誌记录的输出过程.................................... 132
第5章 Binder进程间通信系统............................... 144
5.1 Binder驱动程式..................................................... 145
5.1.1 基础数据结构.............................................. 146
5.1.2 Binder设备的初始化过程.............................. 164
5.1.3 Binder设备档案的打开过程.......................... 165
5.1.4 Binder设备档案的记忆体映射过程............................................................ 166
5.1.5 核心缓冲区管理........................................... 173
5.2 Binder进程间通信库............................................. 183
5.3 Binder进程间通信套用实例................................. 188
5.4 Binder对象引用计数技术..................................... 196
5.4.1 Binder本地对象的生命周期.......................... 197
5.4.2 Binder实体对象的生命周期.......................... 201
5.4.3 Binder引用对象的生命周期.......................... 204
5.4.4 Binder代理对象的生命周期.......................... 209
5.5 Binder对象死亡通知机制..................................... 212
5.5.1 注册死亡接收通知........................................ 213
5.5.2 传送死亡接收通知........................................ 216
5.5.3 注销死亡接收通知........................................ 221
5.6 Service Manager的启动过程.................................. 224
5.6.1 打开和映射Binder设备档案.......................... 226
5.6.2 注册为Binder上下文管理者.......................... 227
5.6.3 循环等待Client进程请求............................... 231
5.7 Service Manager代理对象的获取过程........................................................... 238
5.8 Service组件的启动过程........................................ 244
5.8.1 注册Service组件............................................ 245
5.8.2 启动Binder执行绪池......................................... 289
5.9 Service代理对象的获取过程................................ 291
5.10 Binder进程间通信机制的Java接口............................................................. 300
5.10.1 Service Manager的Java代理对象的获取过程.......................................... 300
5.10.2 Java服务接口的定义和解析.................................................................. 310
5.10.3 Java服务的启动过程.................................... 313
5.10.4 Java服务代理对象的获取过程.............................................................. 320
5.10.5 Java服务的调用过程.................................... 323
第6章 Ashmem匿名共享记忆体系统.............................................................. 327
6.1 Ashmem驱动程式................................................. 328
6.1.1 基础数据结构.............................................. 328
6.1.2 匿名共享记忆体设备的初始化过程........................................................... 330
6.1.3 匿名共享记忆体设备档案的打开过程....................................................... 332
6.1.4 匿名共享记忆体设备档案的记忆体映射过程................................................ 334
6.1.5 匿名共享记忆体块的锁定和解锁过程....................................................... 336
6.1.6 匿名共享记忆体块的回收过程.................................................................. 344
6.2 运行时库cutils的匿名共享记忆体访问接口.................................................... 345
6.3 匿名共享记忆体的C++访问接口............................. 349
6.3.1 MemoryHeapBase......................................... 349
6.3.2 MemoryBase................................................. 359
6.3.3 套用实例..................................................... 364
6.4 匿名共享记忆体的Java访问接口............................. 370
6.4.1 MemoryFile.................................................. 370
6.4.2 套用实例..................................................... 375
6.5 匿名共享记忆体的共享原理.................................... 386
第3篇Android应用程式框架
第7章 Activity组件的启动过程............................. 392
7.1 Activity组件套用实例............................................ 392
7.2 根Activity组件的启动过程.................................... 398
7.3 子Activity组件在进程内的启动过程............................................................ 432
7.4 子Activity组件在新进程中的启动过程........................................................ 440
第8章 Service组件的启动过程............................ 443
8.1 Service组件套用实例............................................. 443
8.2 Service组件在新进程中的启动过程............................................................. 451
8.3 Service组件在进程内的绑定过程................................................................. 463
第9章 Android系统广播机制................................. 486
9.1 广播机制套用实例............................................... 487
9.2 广播接收者的注册过程........................................ 493
9.3 广播的传送过程................................................... 501
第10章 Content Provider组件的实现原理................................................. 524
10.1 Content Provider组件套用实例........................... 525
10.1.1 ArticlesProvider........................................... 525
10.1.2 Article......................................................... 535
10.2 Content Provider组件的启动过程................................................................ 550
10.3 Content Provider组件的数据共享原理........................................................ 573
10.3.1 数据共享模型............................................. 573
10.3.2 数据传输过程............................................. 576
10.4 Content Provider组件的数据更新通知机制................................................ 596
10.4.1 注册内容观察者.......................................... 597
10.4.2 传送数据更新通知...................................... 603
第11章 Zygote和System进程的启动过程................................................. 611
11.1 Zygote进程的启动脚本........................................ 611
11.2 Zygote进程的启动过程........................................ 614
11.3 System进程的启动过程....................................... 622
第12章 Android应用程式进程的启动过程................................................. 630
12.1 应用程式进程的创建过程.................................. 630
12.2 Binder执行绪池的启动过程................................... 639
12.3 讯息循环的创建过程.......................................... 641
第13章 Android应用程式的讯息处理机制................................................. 645
13.1 创建执行绪讯息伫列............................................. 645
13.2 执行绪讯息循环过程............................................. 650
13.3 执行绪讯息传送过程............................................. 655
13.4 执行绪讯息处理过程............................................. 660
第14章 Android应用程式的键盘讯息处理机制....................................... 667
14.1 键盘讯息处理模型............................................. 667
14.2 InputManager的启动过程.................................... 670
14.2.1 创建InputManager...................................... 670
14.2.2 启动InputManager...................................... 673
14.2.3 启动InputDispatcher.................................... 675
14.2.4 启动InputReader........................................ 677
14.3 InputChannel的注册过程..................................... 688
14.3.1 创建InputChannel....................................... 689
14.3.2 注册Server端InputChannel........................... 697
14.3.3 注册系统当前激活的应用程式视窗..................................................... 701
14.3.4 注册Client端InputChannel........................... 706
14.4 键盘讯息的分发过程.......................................... 709
14.4.1 InputReader获得键盘事件........................... 710
14.4.2 InputDispatcher分发键盘事件............................................................... 717
14.4.3 系统当前激活的应用程式视窗获得键盘讯息....................................... 727
14.4.4 InputDispatcher获得键盘事件处理完成通知......................................... 743
14.5 InputChannel的注销过程..................................... 746
14.5.1 销毁应用程式视窗...................................... 747
14.5.2 注销Client端InputChannel........................... 756
14.5.3 注销Server端InputChannel........................... 758
第15章 Android应用程式执行绪的讯息循环模型....................................... 764
15.1 应用程式主执行绪讯息循环模型.......................... 765
15.2 与界面无关的应用程式子执行绪讯息循环模型.......................................... 766
15.3 与界面相关的应用程式子执行绪讯息循环模型.......................................... 769
第16章 Android应用程式的安装和显示过程............................................ 778
16.1 应用程式的安装过程......................................... 778
16.2 应用程式的显示过程.......................................... 814