logo
分类于: 计算机基础 设计 职场办公

简介

Android源码分析实录

Android源码分析实录 0.0分

资源最后更新于 2020-03-29 01:36:08

作者:李忠良

出版社:出版社清华大学出版社

出版日期:2015-04

文件格式: pdf

标签: 计算机 程序设计 应用程序 移动终端

简介· · · · · ·

Android是一款服务于智能手机和平板电脑等设备的操作系统,截止作者撰写此书时为止,Android在智能手机操作系统市场中已经占有75%的份额。为了让广大读者充分了解这款神奇的操作系统的架构原理,本书循序渐进地分析了Android系统核心源码的基本知识。李忠良,编著

想要: 点击会收藏到你的 我的收藏,可以在这里查看

已收: 表示已经收藏

Tips: 注册一个用户 可以通过用户中心得到电子书更新的通知哦

目录

  1. 前言
  2. 第1章 走进Android世界
  3. 1.1 Android系统的优势
  4. 1.1.1 开源
  5. 1.1.2 强大的开发团队的支持
  6. 1.1.3 开发人员的支持
  7. 1.2 Android系统架构介绍
  8. 1.2.1 底层操作系统层(Linux内核层)
  9. 1.2.2 库(Libraries)和运行环境(Runtime)
  10. 1.2.3 应用程序框架(Application Framework)
  11. 1.2.4 顶层应用程序(Application)
  12. 1.3 核心组件
  13. 1.3.1 Activity的界面表现
  14. 1.3.2 Intent和IntentFilters界面切换
  15. 1.3.3 Service服务
  16. 1.3.4 用Broadcast IntentReceiver广播
  17. 1.3.5 用Content Provider存储
  18. 1.4 进程和线程
  19. 1.4.1 什么是进程
  20. 1.4.2 什么是线程
  21. 1.5 获取Android 4.3源码
  22. 1.5.1 在Linux系统中获取Android源码
  23. 1.5.2 在Windows平台上获取Android源码
  24. 1.6 Android源码结构分析
  25. 1.6.1 Android源码的目录结构
  26. 1.6.2 应用程序
  27. 1.6.3 应用程序框架
  28. 1.6.4 系统服务
  29. 1.6.5 系统程序库
  30. 1.6.6 系统运行库
  31. 1.6.7 硬件抽象层
  32. 1.7 编译Android源码
  33. 1.7.1 搭建编译环境
  34. 1.7.2 开始编译
  35. 1.7.3 在模拟器中运行
  36. 1.7.4 编译源码生成SDK
  37. 第2章 硬件抽象层详解
  38. 2.1 什么是HAL层
  39. 2.1.1 为什么把对硬件的支持划分为两层来实现
  40. 2.1.2 HAL层的位置结构
  41. 2.2 分析HAL Module架构
  42. 2.2.1 hw_module_t
  43. 2.2.2 hw_module_methods_t
  44. 2.2.3 hw_device_t
  45. 2.3 分析文件hardware.c
  46. 2.3.1 函数hw_get_module
  47. 2.3.2 数组variant_keys
  48. 2.3.3 载入相应的库
  49. 2.3.4 打开相应库并获得hw_module_t结构体
  50. 2.4 分析硬件抽象层的加载过程
  51. 2.5 分析硬件访问服务
  52. 2.5.1 定义硬件访问服务接口
  53. 2.5.2 实现硬件访问服务
  54. 2.6 分析mokoid工程
  55. 2.6.1 直接调用Service方法实现
  56. 2.6.2 通过Manager调用Service实现
  57. 2.7 分析HAL层的具体实现(以Sensor系统为例)
  58. 2.7.1 传感器系统的基础知识
  59. 2.7.2 HAL层的Sensor代码
  60. 2.7.3 Sensor编程的流程
  61. 第3章 分析JNI(Java本地接口)层
  62. 3.1 JNI基础
  63. 3.1.1 JNI的层次结构
  64. 3.1.2 JNI的本质
  65. 3.1.3 与JNI相关的文件
  66. 3.2 分析Java层
  67. 3.2.1 加载JNI库
  68. 3.2.2 实现扫描工作
  69. 3.2.3 读取并保存信息
  70. 3.2.4 删除不是SD卡中的文件信息
  71. 3.2.5 直接转向JNI
  72. 3.2.6 扫描函数scanFile
  73. 3.2.7 异常处理
  74. 3.3 分析MediaScanner的JNI层
  75. 3.3.1 将Native对象的指针保存到Java对象
  76. 3.3.2 创建Native层的MediaScanner对象
  77. 3.4 分析MediaScanner的Native层
  78. 3.4.1 注册JNI函数
  79. 3.4.2 完成注册工作
  80. 3.4.3 动态注册
  81. 3.4.4 处理路径参数
  82. 3.4.5 扫描文件
  83. 3.4.6 添加TAG信息
  84. 3.4.7 JNIEnv接口
  85. 3.4.8 JNI中的环境变量
  86. 3.5 JNI实例分析(基于Camera系统)
  87. 3.5.1 Java层预览接口
  88. 3.5.2 注册预览的JNI函数
  89. 3.5.3 C/C++层的预览函数
  90. 第4章 Android内存系统分析
  91. 4.1 Android的进程通信机制
  92. 4.1.1 Android的进程间通信(IPC)机制Binder
  93. 4.1.2 Service Manager是Binder机制的上下文管理者
  94. 4.2 分析Ashmem驱动程序
  95. 4.2.1 基础数据结构
  96. 4.2.2 初始化处理
  97. 4.2.3 打开匿名共享内存设备文件
  98. 4.2.4 内存映射
  99. 4.2.5 读写操作
  100. 4.2.6 锁定和解锁
  101. 4.2.7 回收内存块
  102. 4.3 分析C++访问接口层
  103. 4.3.1 接口MemoryHeapBase
  104. 4.3.2 接口MemoryBase
  105. 4.4 分析Java访问接口层
  106. 4.5 内存优化机制
  107. 4.5.1 sp和wp简析
  108. 4.5.2 详解智能指针
  109. 4.5.3 轻量级指针
  110. 4.5.4 强指针
  111. 4.5.5 弱指针
  112. 第5章 Android虚拟机系统详解
  113. 5.1 Android虚拟机基础
  114. 5.1.1 Android虚拟机源码目录
  115. 5.1.2 Dalvik的架构
  116. 5.1.3 Dalvik虚拟机的主要特征
  117. 5.1.4 Dalvik的进程管理
  118. 5.1.5 Android的初始化流程
  119. 5.2 分析Dalvik的运作流程
  120. 5.2.1 Dalvik虚拟机相关的可执行程序
  121. 5.2.2 初始化Dalvik虚拟机
  122. 5.2.3 启动Zygote
  123. 5.2.4 启动SystemServer进程
  124. 5.2.5 加载class类文件
  125. 5.3 Dalvik VM的内存系统
  126. 5.3.1 如何分配内存
  127. 5.3.2 分析内存管理机制的源码
  128. 5.4 分析Dalvik VM的启动过程
  129. 5.4.1 创建一个Dalvik VM实例
  130. 5.4.2 指定控制选项
  131. 5.4.3 创建并初始化Dalvik VM实例
  132. 5.4.4 创建JNIEnvExt对象
  133. 5.4.5 设置当前进程
  134. 5.4.6 注册Android核心类的JNI方法
  135. 5.4.7 使用线程创建javaCreateThreadEtc钩子
  136. 5.5 创建Dalvik VM进程
  137. 5.5.1 分析底层启动过程
  138. 5.5.2 创建Dalvik VM进程
  139. 5.5.3 初始化运行的Dalvik VM
  140. 第6章 IPC通信机制详解
  141. 6.1 Binder机制概述
  142. 6.2 分析Binder驱动程序
  143. 6.2.1 分析数据结构
  144. 6.2.2 分析设备初始化
  145. 6.2.3 打开Binder设备文件
  146. 6.2.4 内存映射
  147. 6.2.5 释放物理页面
  148. 6.2.6 分配内核缓冲区
  149. 6.2.7 释放内核缓冲区
  150. 6.2.8 查询内核缓冲区
  151. 6.3 Binder封装库
  152. 6.3.1 Binder库的实现层次
  153. 6.3.2 类BBinder
  154. 6.3.3 类BpRefBase
  155. 6.3.4 类IPCThreadState
  156. 6.4 初始化Java层Binder框架
  157. 第7章 Zygote进程、System进程和应用程序进程
  158. 7.1 Zygote(孕育)进程详解
  159. 7.1.1 Zygote基础
  160. 7.1.2 分析Zygote的启动过程
  161. 7.2 System进程详解
  162. 7.2.1 启动System进程前的准备工作
  163. 7.2.2 分析SystemServer
  164. 7.2.3 分析EntropyService
  165. 7.2.4 分析DropBoxManagerService
  166. 7.2.5 分析DiskStatsService
  167. 7.2.6 分析DeviceStorageManagerService
  168. 7.2.7 分析SamplingProfilerService
  169. 7.3 应用程序进程详解
  170. 7.3.1 创建应用程序
  171. 7.3.2 启动线程池
  172. 7.3.3 创建信息循环
  173. 第8章 分析Activity组件
  174. 8.1 Activity基础
  175. 8.1.1 Activity的状态
  176. 8.1.2 Activity的主要函数
  177. 8.2 启动Activity
  178. 8.2.1 Launcher启动应用程序
  179. 8.2.2 返回ActivityManagerService的远程接口
  180. 8.2.3 解析intent的内容
  181. 8.2.4 分析检查机制
  182. 8.2.5 执行Activity组件的操作
  183. 8.2.6 将Launcher推入Paused状态
  184. 8.2.7 处理消息
  185. 8.2.8 报告暂停
  186. 8.2.9 建立双向连接
  187. 8.2.10 启动新的Activity
  188. 8.2.11 发送通知信息
  189. 第9章 Content Provider数据存储
  190. 9.1 Content Provider基础
  191. 9.1.1 Content Provider在应用程序中的架构
  192. 9.1.2 Content Provider的常用接口
  193. 9.2 启动Content Provider
  194. 9.2.1 获得对象接口
  195. 9.2.2 存在校验
  196. 9.2.3 启动Android应用程序
  197. 9.2.4 根据进程启动Content Provider
  198. 9.2.5 处理消息
  199. 9.2.6 具体启动
  200. 9.3 Content Provider数据共享
  201. 9.3.1 获取接口
  202. 9.3.2 创建CursorWindow对象
  203. 9.3.3 数据传递
  204. 9.3.4 处理进程通信的请求
  205. 9.3.5 数据操作
  206. 第10章 Broadcast(广播)系统详解
  207. 10.1 Broadcast基础
  208. 10.2 发送广播信息
  209. 10.2.1 intent描述指示
  210. 10.2.2 传递广播信息
  211. 10.2.3 封装传递
  212. 10.2.4 处理发送请求
  213. 10.2.5 查找广播接收者
  214. 10.2.6 处理广播信息
  215. 10.2.7 检查权限
  216. 10.2.8 处理的进程通信请求
  217. 10.3 分析BroadcastReceiver
  218. 10.3.1 MainActivity的调用
  219. 10.3.2 注册广播接收者
  220. 10.3.3 获取接口对象
  221. 10.3.4 处理进程间的通信请求
  222. 第11章 多媒体系统详解
  223. 11.1 Android多媒体系统介绍
  224. 11.2 OpenMAX框架详解
  225. 11.2.1 分析OpenMAX框架构成
  226. 11.2.2 实现OpenMAX IL层接口
  227. 11.3 分析OpenCore框架
  228. 11.3.1 OpenCore的层次结构
  229. 11.3.2 OpenCore的代码结构
  230. 11.3.3 OpenCore的编译结构
  231. 11.3.4 操作系统兼容库
  232. 11.3.5 实现OpenCore中的OpenMAX部分
  233. 11.3.6 OpenCore扩展详解
  234. 11.4 Stagefright框架详解
  235. 11.4.1 Stagefright代码结构
  236. 11.4.2 Stagefright实现OpenMAX接口
  237. 11.4.3 分析Video Buffer的传输流程
  238. 第12章 电源管理系统详解
  239. 12.1 Android Power Management基础
  240. 12.2 分析Framework层
  241. 12.2.1 文件PowerManager.java
  242. 12.2.2 文件PowerManagerService.java
  243. 12.3 分析JNI层
  244. 12.3.1 文件android_os_Power.cpp
  245. 12.3.2 文件power.c
  246. 12.4 分析Kernel(内核)层
  247. 12.4.1 文件power.c
  248. 12.4.2 文件earlysuspend.c
  249. 12.4.3 文件wakelock.c
  250. 12.4.4 文件resume.c
  251. 12.4.5 文件suspend.c
  252. 12.4.6 文件main.c
  253. 12.4.7 proc文件
  254. 12.5 wakelock和early_suspend
  255. 12.5.1 wakelock的原理
  256. 12.5.2 early_suspend的原理
  257. 12.5.3 Android休眠
  258. 12.5.4 Android唤醒
  259. 第13章 输入系统驱动应用
  260. 13.1 输入系统介绍
  261. 13.2 分析Input(输入)系统驱动
  262. 13.2.1 分析头文件
  263. 13.2.2 分析核心文件input.c
  264. 13.2.3 分析event机制
  265. 13.3 分析硬件抽象层
  266. 13.3.1 分析文件KeycodeLabels.h
  267. 13.3.2 分析文件KeyCharacterMap.h
  268. 13.3.3 分析Kl格式的文件
  269. 13.3.4 分析kcm格式文件
  270. 13.3.5 分析文件EventHub.cpp
  271. 13.4 分析驱动的具体实现
  272. 13.4.1 分析内置模拟器中的输入驱动实现
  273. 13.4.2 MSM高通处理器中的输入驱动实现
  274. 13.4.3 OMAP高通处理器中的输入驱动实现
  275. 第14章 蓝牙系统详解
  276. 14.1 Android系统中的蓝牙模块
  277. 14.2 分析蓝牙模块的源码
  278. 14.2.1 初始化蓝牙芯片
  279. 14.2.2 蓝牙服务
  280. 14.2.3 管理蓝牙电源
  281. 14.3 与蓝牙相关的类
  282. 14.3.1 BluetoothSocket类
  283. 14.3.2 BluetoothServerSocket类
  284. 14.3.3 BluetoothAdapter类
  285. 14.3.4 BluetoothClass.Service类
  286. 14.3.5 BluetoothClass.Device类
  287. 14.4 低功耗蓝牙协议栈详解
  288. 14.4.1 低功耗蓝牙协议栈基础
  289. 14.4.2 低功耗蓝牙API详解
  290. 14.5 Android中的BlueDroid
  291. 14.5.1 Android系统中BlueDroid的架构
  292. 14.5.2 Application Framework层分析
  293. 14.5.3 分析Bluetooth System Service层
  294. 14.5.4 分析JNI层
  295. 14.5.5 分析HAL层
  296. 14.6 Android蓝牙模块的运作流程
  297. 14.6.1 打开蓝牙设备
  298. 14.6.2 搜索蓝牙
  299. 14.6.3 传输OPP文件
  300. 第15章 网络系统详解
  301. 15.1 使用WebKit浏览网页
  302. 15.1.1 WebKit的Java层框架
  303. 15.1.2 C/C++层框架
  304. 15.1.3 分析WebKit的操作过程
  305. 15.1.4 WebView详解
  306. 15.1.5 WebViewCore详解
  307. 15.2 Wi-Fi系统应用
  308. 15.2.1 Wi-Fi概述
  309. 15.2.2 Wi-Fi系统的层次结构
  310. 15.2.3 与Linux的差异
  311. 15.2.4 分析本地部分的源码
  312. 15.2.5 分析JNI部分的源码
  313. 15.2.6 分析Java Framework部分的源码
  314. 15.2.7 分析Setting中的设置部分的源码