Android系统原理深入解析是ㄚ琪最近借来看得一本书,博客来这样简介:
本书全面、系统、深入地讲解了Android 系统中的几大重要组成部分的工作原理,旨在透过直接剖析原始程式码的方式,引领读者一步步深入于诸如Binder、Zygote、Audio、Surface、Vold、Rild 等模组的内部,去理解它们是如何实现的,以及如何工作的。笔者根据研究Android 代码的心得,在本书中尝试性地采用了精简流程、逐个击破的方法进行讲解,希望这样做能帮助读者更快、更准确地把握各模组的工作流程及其本质。
全书共有10 章,其中一些重要章节中还安排了“延伸思考”部分。主要内容为:
第1章介绍了阅读本书所需要做的一些准备工作,包括对Android 整个系统架构的认识,以及Android 开发环境和原始码阅读环境的搭建等。
第2章透过Android 原始码中的一处实例深入地介绍了JNI 技术。
第3章围绕init 进程, 介绍了如何解析init.rc 以启动Zygote 和属性服务(property service)的工作原理。
第4章剖析了zygote 和system_server 进程的工作原理。本章的延伸思考部分讨论了Andorid 的启动速度、虚拟机器heapsize 的大小调整问题以及“看门狗”的工作原理。
第5章讲解了Android 原始码中常用的类别,如sp、wp、RefBase、Thread 类别、同步类别、Java 中的Handler 类别以及Looper 类别。这些类别都是Android 中最常用和最基本的,只有掌握这些类别的知识,才能在分析后续的代码时游刃有余。
第6章以MediaServer 为切入点,对Binder 进行了较为全面的分析。本章延伸思考部分讨论了与Binder 有关的三个问题,它们分别是Binder 和执行绪的关系、死亡通知以及匿名Service。笔者希望,透过本章的学习,大家能更深入地认识Binder的本质。
第7章阐述了Audio 系统中的三位重要成员AudioTrack、AudioFlinger和AudioPolicyService 的工作原理。本章延伸思考部分分析了AudioFlinger 中DuplicatingThread 的工作原理,并且和读者一道探讨了单元测试、ALSA、Desktopcheck 等问题。透过对本章的学习,相信读者会对Audio 系统有更深的理解。
第8章以Surface 系统为主, 分析了Activity 和Surface 的关系、Surface 和SurfaceFlinger 的关系以及SurfaceFlinger 的工作原理。本章的延伸思考部分分析了Surface 系统中资料传输控制物件的工作原理、有关ViewRoot 的一些疑问,最后讲解了LayerBuffer 的工作流程。这是全书中难度较大的一章,建议大家反覆阅读和思考,这样才能进一步深入理解Surface 系统。
第9章分析了Vold 和Rild,其中Vold 负责Android 平台中外部存放装置的管理,而Rild 负责与射频通信有关的工作。本章的延伸思考部分介绍了嵌入式系统中与储存有关的知识,还探讨了Rild 和Phone 设计优化方面的问题。
第10章分析了多媒体系统中MediaScanner 的工作原理。在本章的延伸思考部分,笔者提出了几个问题,旨在激发读者深入思考和学习Android 的欲望。
目录这样写:
Chapter 1 阅读前的准备工作
1.1 系统架构
1.1.1 Android 系统架构
1.1.2 本书的架构
1.2 搭建开发环境
1.2.1 下载原始码
1.2.2 编译原始码
1.3 工具介绍
1.3.1 Source Insight 介绍
1.3.3 Busybox 的使用
1.4 本章小结
Chapter 2 深入理解JNI
2.1 JNI 概述
2.2 学习JNI 的实例:MediaScanner
2.3 Java 层的MediaScanner 分析
2.3.1 载入JNI 库
2.3.2 Java 的native 函数和总结
2.4 JNI 层MediaScanner 的分析
2.4.1 注册JNI 函数
2.4.2 资料类型转换
2.4.3 JNIEnv 介绍
2.4.4 通过JNIEnv 操作jobject
2.4.5 jstring 介绍
2.4.6 JNI 类型签名介绍
2.4.7 垃圾回收
2.4.8 JNI 中的异常处理
2.5 本章小结
Chapter 3 深入理解init
3.1 概述
3.2 init 分析
3.2.1 解析配置文件
3.2.2 解析service
3.2.3 init 控制service
3.2.4 属性服务
3.3 本章小结
Chapter 4 深入理解zygote
4.1 概述
4.2 zygote 分析
4.2.1 AppRuntime 分析
4.2.2 Welcome to Java World
4.2.3 关于zygote 的总结
4.3 SystemServer 分析
4.3.1 SystemServer 的诞生
4.3.2 SystemServer 的重要使命
4.3.3 关于 SystemServer 的总结
4.4 zygote 的分裂
4.4.1 ActivityManagerService 发送请求
4.4.2 有求必应之响应请求
4.4.3 关于zygote 分裂的总结
4.5 延伸思考
4.5.1 虚拟机heapsize 的限制
4.5.2 开机速度优化
4.5.3 Watchdog 分析
4.6 本章小结
Chapter 5 深入理解常见类别
5.1 概述
5.2 以” 三板斧” 揭秘RefBase、sp 和wp
5.2.1 第一板斧—初识影子物件
5.2.2 第二板斧—由弱生强
5.2.3 第三板斧—破解生死魔咒
5.2.4 轻量级的引用计数控制类别LightRefBase
5.2.5 题外话—三板斧的来历
5.3 Thread 类别及常用同步类别分析
5.3.1 一个变数引发的思考
5.3.2 常用同步类别
5.4 Looper 和Handler 类别分析
5.4.1 Looper 类别分析
5.4.2 Handler 分析
5.4.3 Looper 和Handler 的同步关系
5.4.4 HandlerThread 介绍
5.5 本章小结
Chapter 6 深入理解Binder
6.1 概述
6.2 庖丁解MediaServer
6.2.1 MediaServer 的入口函数
6.2.2 独一无二的ProcessState
6.2.3 时空穿越魔术—defaultServiceManager
6.2.4 注册MediaPlayerService
6.2.5 秋风扫落叶—StartThread Pool 和joinThread Pool 分析
6.2.6 你彻底明白了吗
6.3 服务总管ServiceManager
6.3.1 ServiceManager 的原理
6.3.2 服务的注册
6.3.3 ServiceManager 存在的意义
6.4 MediaPlayerService 和它的Client
6.4.1 查询ServiceManager
6.4.2 子承父业
6.5 延伸思考
6.5.1 Binder 和线程的关系
6.5.2 有人情味的讣告
6.5.3 匿名Service
6.6 学以致用
6.6.1 纯Native 的Service
6.6.2 扶得起的” 阿斗”(aidl)
6.7 本章小结
Chapter 7 深入理解Audio 系统
7.1 概述
7.2 AudioTrack 的破解
7.2.1 用例介绍
7.2.2 AudioTrack(Java 空间)分析
7.2.3 AudioTrack(Native 空间)分析
7.2.4 关于AudioTrack 的总结
7.3 AudioFlinger 的破解
7.3.1 AudioFlinger 的诞生
7.3.2 透过流程分析AudioFlinger
7.3.3 audio_track_cblk_t 分析
7.3.4 关于AudioFlinger 的总结
7.4 AudioPolicyService 的破解
7.4.1 AudioPolicyService 的新增
7.4.2 重回AudioTrack
7.4.3 声音路由切换实体分析
7.4.4 关于AudioPolicy 的总结
7.5 延伸思考
7.5.1 DuplicatingThread 破解
7.5.2 题外话
7.6 本章小结
Chapter 8 深入理解Surface 系统
8.1 概述
8.2 一个Activity 的显示
8.2.1 Activity 的新增
8.2.2 Activity 的UI 绘制
8.2.3 关于Activity 的总结
8.3 初识Surface
8.3.1 和Surface 有关的流程总结
8.3.2 Surface 之乾坤大挪移
8.3.3 乾坤大挪移的JNI 层分析
8.3.4 Surface 和绘图
8.3.5 初识Surface 小结
8.4 深入分析Surface
8.4.1 与Surface 相关的基础知识介绍
8.4.2 SurfaceComposerClient 分析
8.4.3 SurfaceControl 分析
8.4.4 writeToParcel 和Surface 物件的新增
8.4.5 lockCanvas 和unlockCanvasAndPost 分析
8.4.6 GraphicBuffer 介绍
8.4.7 深入分析Surface 的总结
8.5 SurfaceFlinger 分析
8.5.1 SurfaceFlinger 的诞生
8.5.2 SF 工作线程分析
8.5.3 Transaction 分析
8.5.4 关于SurfaceFlinger 的总结
8.6 延伸思考
8.6.1 Surface 系统的CB 物件分析
8.6.2 ViewRoot 的你问我答
8.6.3 LayerBuffer 分析
8.7 本章小结
Chapter 9 深入理解Vold 和Rild
9.1 概述
9.2 Vold 的原理与机制分析
9.2.1 Netlink 和Uevent 介绍
9.2.2 初识Vold
9.2.3 NetlinkManager 模组分析
9.2.4 VolumeManager 模组分析
9.2.5 CommandListener 模组分析
9.2.6 Vold 实体分析
9.2.7 关于Vold 的总结
9.3 Rild 的原理与机制分析
9.3.1 初识Rild
9.3.2 RIL_startEventLoop 分析
9.3.3 RIL_Init 分析
9.3.4 RIL_register 分析
9.3.5 关于Rild main 函数的总结
9.3.6 Rild 实体分析
9.3.7 关于Rild 的总结
9.4 延伸思考
9.4.1 嵌入式系统的储存知识介绍
9.4.2 Rild 和Phone 的改进探讨
9.5 本章小结
Chapter 10 深入理解MediaScanner
10.1 概述
10.2 android
10.2.1 MSR 模组分析
10.2.2 MSS 模组分析
10.2.3 android流程总结 .
10.3 MediaScanner 分析
10.3.1 Java 层分析
10.3.2 JNI 层分析
10.3.3 PVMediaScanner 分析
10.3.4 关于MediaScanner 的总结
10.4 延伸思考
10.4.1 MediaScannerConnection 介绍
10.4.2 我问你答
10.5 本章小结
ㄚ琪试阅第三章看看,发现3.2马上就进来一支C程式,看来我们可需要继续加强C的能力才行啊,不然就会看不懂了。