`
l241002209
  • 浏览: 87535 次
文章分类
社区版块
存档分类
最新评论

Android博客文章整理

 
阅读更多
闭关了四个多月,整理了博客上所有的Android文章,一共划分为三大篇,十六个章节,820页,系统地分析了Android系统的源代码,从Linux内核层、HAL层、运行时库层到应用程序框架层。整理期间困难重重,多次想要放弃,但是看到在四个多月不更新文章的情况下,博客访问量仍节节攀升,从评论中感受到了网友们的热情支持,受到了极大的鼓舞,最终坚持了下来。现在将整理的内容提纲发表出来,欢迎大家提供建议。

整理的内容并不是简单地复制了博客上的文章。博客文章由于发表得比较匆忙,不到六个月的时间,一共发表了50篇原创文章,平均每周发表两篇,而且都是利用工作之余时间来发表,因此,很多内容都不够全面、深入和细致。例如,在分析Binder进程间通信机制的一系列博客文章中,并没有提及到Binder对象的引用计数技术、死亡通知机制等重要内容,对Binder驱动中的内存管理也分析得不够系统;又如,在分析Android应用程序的安装过程时,没有提及到系统是如何为应用程序分配Linux用户ID以及Linux用户组ID。整理的内容对博客文章中不够全面、学入和细致的地方进行了相应的补充。此外,博客文章也会出现一些错误。例如,在《Android应用程序键盘(Keyboard)消息处理机制分析》这篇博客文章中,网友@foresee321指出了注册系统当前激活窗口的过程有误。整理的内容也对这些错误作出了修正。博客文章不够全面、深入、细致以及有误的地方不能一一而足,不过它们在重新整理的内容中都得到了解决。

整理的内容从初学者的角度来组织,由浅入深、自下而上地对Android系统的源代码进行了分析,目录结构如下所示:

  1. 第一篇初识Android系统...........................................6
  2. 第一章准备知识..............................................7
  3. 1.1准备Linux内核基础知识................................7
  4. 1.2准备Android应用程序基础知识..........................8
  5. 1.3下载、编译和运行Android源代码........................8
  6. 1.3.1安装Git工具....................................9
  7. 1.3.2安装JavaSDK...................................9
  8. 1.3.3安装其它工具包.................................9
  9. 1.3.4安装repo工具...................................9
  10. 1.3.5下载Android源代码..............................9
  11. 1.3.6编译Android源代码..............................10
  12. 1.3.7运行Android模拟器..............................11
  13. 1.4下载、编译和运行Android内核源代码....................12
  14. 1.4.1下载Android内核源代码..........................12
  15. 1.4.2修改Makefile文件...............................13
  16. 1.4.3编译Android内核源代码..........................13
  17. 1.4.4运行Android模拟器..............................14
  18. 1.5开发第一个Android应用程序............................14
  19. 1.6编译和打包单个Android应用程序模块....................17
  20. 1.6.1导入编译单个模块的mmm命令......................17
  21. 1.6.2编译单个Android应用程序模块....................18
  22. 1.6.3重新打包Android系统镜像文件....................18
  23. 第二章硬件抽象层............................................19
  24. 2.1开发Android硬件驱动程序..............................20
  25. 2.1.1实现内核驱动程序模块...........................21
  26. 2.1.2修改内核Kconfig文件............................27
  27. 2.1.3修改内核Makefile文件...........................28
  28. 2.1.4编译内核驱动程序模块...........................28
  29. 2.1.5验证内核驱动程序模块...........................29
  30. 2.2开发C可执行程序验证Android硬件驱动程序...............30
  31. 2.3开发Android硬件抽象层模块............................32
  32. 2.3.1硬件抽象层编写规范.............................32
  33. 2.3.1.1模块文件的命令规范.......................32
  34. 2.3.1.2结构体定义规范...........................33
  35. 2.3.2实现硬件抽象层访问接口.........................35
  36. 2.3.3硬件抽象层模块加载过程分析.....................39
  37. 2.3.4处理硬件设备访问权限问题.......................42
  38. 2.4开发Android硬件访问服务..............................44
  39. 2.4.1定义硬件访问服务接口...........................44
  40. 2.4.2实现硬件访问服务...............................45
  41. 2.4.3实现硬件访问服务的Java本地接口方法............46
  42. 2.4.4启动硬件访问服务...............................49
  43. 2.5开发Android应用程序来调用硬件访问服务................50
  44. 第三章智能指针..............................................55
  45. 3.1轻量级指针...........................................57
  46. 3.1.1实现原理分析...................................57
  47. 3.1.2使用实例分析...................................59
  48. 3.2强指针和弱指针.......................................61
  49. 3.2.1强指针的实现原理分析...........................61
  50. 3.2.2弱指针的实现原理分析...........................68
  51. 3.2.3强指针和弱指针的使用实例分析...................74
  52. 第二篇Android专用驱动系统.......................................79
  53. 第四章Logger日志系统........................................80
  54. 4.1Logger驱动程序.......................................83
  55. 4.1.1相关数据结构...................................83
  56. 4.1.2设备初始化过程.................................85
  57. 4.1.3设备文件打开过程...............................90
  58. 4.1.4日志读取过程...................................91
  59. 4.1.5日志写入过程...................................95
  60. 4.2运行时日志库写入接口.................................100
  61. 4.3C/C++日志写入接口....................................106
  62. 4.4Java日志写入接口.....................................110
  63. 4.5Logcat工具分析.......................................116
  64. 4.5.1相关数据结构...................................117
  65. 4.5.2初始化过程.....................................121
  66. 4.5.3日志读取过程...................................133
  67. 4.5.4日志输出过程...................................137
  68. 第五章Binder进程间通信系统..................................149
  69. 5.1Binder驱动程序.......................................151
  70. 5.1.1相关数据结构...................................152
  71. 5.1.2设备初始化过程.................................172
  72. 5.1.3设备文件打开过程...............................173
  73. 5.1.4设备文件内存映射过程...........................174
  74. 5.1.5内核缓冲区管理.................................181
  75. 5.1.5.1分配内核缓冲区...........................181
  76. 5.1.5.2释放内核缓冲区...........................187
  77. 5.1.5.3查询内核缓冲区...........................192
  78. 5.2Binder进程间通信库...................................193
  79. 5.3Binder进程间通信应用实例.............................197
  80. 5.4Binder对象引用计数技术...............................205
  81. 5.4.1Binder本地对象的生命周期.......................206
  82. 5.4.2Binder实体对象的生命周期.......................210
  83. 5.4.3Binder引用对象的生命周期.......................213
  84. 5.4.4Binder代理对象的生命周期.......................218
  85. 5.5Binder对象死亡通知机制...............................221
  86. 5.5.1注册死亡接收通知...............................221
  87. 5.5.2发送死亡接收通知...............................225
  88. 5.5.3注销死亡接收通知...............................229
  89. 5.6ServiceManager的启动过程............................232
  90. 5.6.1打开和映射Binder设备文件.......................234
  91. 5.6.2注册成为Binder上下文管理者.....................235
  92. 5.6.3循环等待Client进程请求.........................239
  93. 5.7ServiceManager代理对象接口的获取过程................245
  94. 5.8Service的启动过程....................................252
  95. 5.8.1注册Service组件................................253
  96. 5.8.1.1封装通信数据为Parcel对象.................254
  97. 5.8.1.2发送和处理BC_TRANSACTION命令协议.........257
  98. 5.8.1.3发送和处理BR_TRANSACTION返回协议.........270
  99. 5.8.1.4发送和处理BC_REPLY命令协议...............282
  100. 5.8.1.5发送和处理BR_REPLY返回协议...............288
  101. 5.8.2循环等待Client进程请求.........................291
  102. 5.9Service代理对象接口的获取过程........................294
  103. 5.10Binder进程间通信机制的Java实现接口..................302
  104. 5.10.1获取ServiceManager的Java代理对象接口.........303
  105. 5.10.2AIDL服务接口解析..............................312
  106. 5.10.3Java服务的启动过程............................315
  107. 5.10.4获取Java服务的代理对象接口....................321
  108. 5.10.5Java服务的调用过程............................324
  109. 第六章Ashmem匿名共享内存系统................................329
  110. 6.1Ashmem驱动程序.......................................330
  111. 6.1.1相关数据结构...................................330
  112. 6.1.2设备初始化过程.................................332
  113. 6.1.3设备文件打开过程...............................334
  114. 6.1.4设备文件内存映射过程...........................336
  115. 6.1.5内存块的锁定和解锁过程.........................338
  116. 6.1.6解锁状态内存块的回收过程.......................345
  117. 6.2运行时库cutils的匿名共享内存接口.....................346
  118. 6.3匿名共享内存的C++访问接口............................349
  119. 6.3.1MemoryHeapBase.................................349
  120. 6.3.1.1Server端的实现...........................349
  121. 6.3.1.2Client端的实现...........................353
  122. 6.3.2MemoryBase.....................................359
  123. 6.3.2.1Server端的实现...........................360
  124. 6.3.2.2Client端的实现...........................362
  125. 6.3.3应用实例.......................................364
  126. 6.4匿名共享内存的Java访问接口...........................370
  127. 6.4.1MemoryFile.....................................370
  128. 6.4.2应用实例.......................................375
  129. 6.5匿名共享内存的共享原理分析...........................386
  130. 第三篇Android应用程序框架篇.....................................390
  131. 第七章Activity组件的启动过程................................391
  132. 7.1Activity组件应用实例.................................391
  133. 7.2根Activity的启动过程.................................397
  134. 7.3Activity在进程内的启动过程...........................429
  135. 7.4Activity在新进程中的启动过程.........................438
  136. 第八章Service组件的启动过程.................................441
  137. 8.1Service组件应用实例..................................441
  138. 8.2Service在新进程中的启动过程..........................448
  139. 8.3Service在进程内的绑定过程............................460
  140. 第九章Android系统广播机制...................................483
  141. 9.1广播应用实例.........................................484
  142. 9.2广播接收者的注册过程.................................491
  143. 9.3广播的发送过程.......................................499
  144. 第十章ContentProvider组件的实现原理........................521
  145. 10.1ContentProvider组件应用实例........................522
  146. 10.1.1ArticlesProvider..............................523
  147. 10.1.2Article.......................................533
  148. 10.2ContentProvider组件的启动过程......................548
  149. 10.3ContentProvider组件的数据共享原理..................570
  150. 10.4ContentProvider组件的数据更新通知机制..............593
  151. 10.4.1内容观察者的注册过程..........................594
  152. 10.4.2数据更新的通知过程............................601
  153. 第十一章Zygote和System进程的启动过程........................609
  154. 11.1Zygote进程的启动脚本................................609
  155. 11.2Zygote进程的启动过程................................612
  156. 11.3System进程的启动过程................................619
  157. 第十二章Android应用程序进程的启动过程.......................628
  158. 12.1应用程序进程的创建过程..............................628
  159. 12.2Binder线程池的启动过程..............................637
  160. 12.3消息循环的创建过程..................................640
  161. 第十三章Android应用程序的消息处理机制.......................644
  162. 13.1创建线程消息队列....................................644
  163. 13.2线程消息循环过程....................................649
  164. 13.3线程消息发送过程....................................654
  165. 13.4线程消息处理过程....................................658
  166. 第十四章Android应用程序的键盘消息处理机制...................666
  167. 14.1InputManager的启动过程..............................669
  168. 14.1.1创建InputManager..............................669
  169. 14.1.2启动InputManager..............................672
  170. 14.1.3启动InputDispatcher...........................674
  171. 14.1.4启动InputReader...............................676
  172. 14.2InputChannel的注册过程..............................687
  173. 14.2.1创建InputChannel..............................688
  174. 14.2.2注册Server端InputChannel......................695
  175. 14.2.3注册当前激活窗口..............................699
  176. 14.2.4注册Client端InputChannel......................704
  177. 14.3键盘消息的分发过程..................................708
  178. 14.3.1InputReader处理键盘事件.......................708
  179. 14.3.2InputDispatcher分发键盘事件...................715
  180. 14.3.3当前激活的窗口获得键盘消息....................727
  181. 14.3.4InputDispatcher获得键盘事件处理完成通知.......741
  182. 14.4InputChannel的注销过程..............................745
  183. 14.4.1销毁应用程序窗口..............................746
  184. 14.4.2注销Client端InputChannel......................754
  185. 14.4.3注销Server端InputChannel......................756
  186. 第十五章Android应用程序线程的消息循环模型...................762
  187. 15.1应用程序主线程消息循环模型..........................762
  188. 15.2界面无关的应用程序子线程消息循环模型................764
  189. 15.3界面相关的应用程序子线程消息循环模型................766
  190. 第十六章Android应用程序的安装和显示过程.....................775
  191. 16.1应用程序的安装过程..................................775
  192. 16.2应用程序的显示过程..................................808
第一篇包含三个章节,介绍了Android系统源代码的下载、编译和运行,Android系统的智能指针,以及Android系统的硬件抽象层。在应用程序框架层的Native代码中,大量的使用了智能指针,因此,在分析Android系统的源代码之前,我们需要对它的智能指针有所了解。学习Android系统的硬件抽象层,能够使得我们迅速掌握Android系统的层次结构。

第二篇也是包含三个章节,分析Android系统在Linux内核中的三个专用驱动,分别是日志驱动、Binder驱动和匿名共享内存驱动。毋容置疑,这三个专用驱动构成了Android系统的基础,学习它们对了解Android系统有非常大的帮助。

第三篇包含了十个章节,系统地分析Android应用程序的架构,从应用程序组件、进程、消息和安装四个角度来它进行系统的分析。移动平台最核心的竞争力是运行在它上面的丰富的、高质量的应用程序,而这些丰富的、高质量的应用程序离不开优秀的应用程序基础设施和架构,因此,花了很大的篇幅来介绍Android应用程序的架构,同时它是理解整个Android系统的一个很好切入点,毕竟系统所做的一切都是为使得它上面的应用程序能够好好地运行、好好地为用户服务。

转自:http://blog.csdn.net/luoshengyang/article/details/7409491


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics