第1 章 搭建Android 源码工作环境
1.1 Android 系统架构
1.2 搭建开发环境
1.2.1 下载源码
//http://source.android.com/source/downloading.html。
1.2.2 编译源码
1. 部署JDK
2. 编译源码
1.2.3 利用Eclipse 调试system_process
1. 配置Eclipse
2. 使用Coffee Bytes Java 插件
3. 导入Android 源码
4. 创建并运行模拟器
5. 调试system_process
第2 章 深入理解Java Binder 和MessageQueue
2.1 概述
2.2 Java 层中的Binder 架构分析//建议先阅读读卷I 的“第6 章深入理解Binder”。
2.2.1 Binder 架构总览:
1)系统定义了一个IBinder 接口类以及DeathRecipient 接口
2)Binder 类和BinderProxy 类分别实现了IBinder ❑ 接口。其中,Binder 类作为服务端的Bn 的代表,而BinderProxy 作为客户端的Bp 的代表。
3)系统中还定义了一个BinderInternal 类。该类是一个仅供Binder 架构使用的类。它内部有一个GcWatcher 类,该类专门用于处理和Binder 架构相关的垃圾回收
4)Java 层同样提供一个用于承载通信数据的Parcel 类
2.2.2 初始化Java 层Binder 框架
frameworks/base/core/jni/android_util_Binder.cpp
(1) Binder类的初始化.
(2) BinderInternal类的初始化
(3) BinderProxy类的初始化
主要是注册一些class 的JNI,全局对象变量.
2.2.3 addService实列分析//ActivityManagerService
(1) 在SM 注册服务:
BinderInternal.getContextObject
1:通过JNI 创建BpProxy,与ServiceManager联系.
2:转化成java层的class BinderProxy obj.
3:通过asinterface传给 class ServiceManagerProxy类的remote=BinderProxy
(2) addService函数分析://即 调用BinderProxy. addService
BinderProxy. addService是native transact函数.
调用target是JAVA层BinderProxy 创建的BpBinder
(3) Binder,JavaBBinderHolder和JavaBBinder
1:Binder的mobject 指向JavaBBinderHolder对象
2: JavaBBinderHolder的mBinder指向JavaBBinder
3: JavaBBinder的mobject指向Binder 对象.
通过ServiceManagerProxy->addService中的data->writestrongBinder(Service)中的ibinderforJavaObject中JavaBBinderholder->get
4: ActivityManagerService响应请求流程//JavaBBinder的业务函数.
虚线表示子类重载实现.Q:响应的指令从哪里来?
2.2.4 Java 层Binder 架构总结
2.3 心系两界的MessageQueue//卷I“第5 章深入理解常见类
2.3.1 MessageQueue 的创建:
MessageQueue.java::MessageQueue
通过JNI调用Native中的 new MessageQueue
2.3.2 Java层投递Message:
MessageQueue.java::enqueueMessage()
nativeWake 控制是否唤醒
2.3.3 MessageQueue 提取消息:
MessageQueue.java::next()
通过JNI调用Native中nativePollOnce
2.3.4 nativePollOnce 函数分析//实际就是一个多路复用IO epoll
1: 计算真正等待的时间
2:调用 epoll_wait
3:处理文件句柄,或fd 发生的事情
4:调用native Message处理函数,处理response数组中callback函数.
2.3.5 添加监控请求:
2.3.6 处理监控请求:
nativePollOnce中:
3:处理文件句柄,或fd 发生的事情
4:调用native Message处理函数,处理response数组中callback函数.
2.3.6 native层sendMessage:
2.4 MessageQueue 总结
2.4.1 消息处理的大家族合照
(1): Java 层提供了Looper 类和MessageQueue 类❑ ,其中Looper 类提供循环处理消息的机制,MessageQueue 类提供一个消息队 列,以及插入、删除和提取消息的函数接口。另外,Handler 也是在Java 层常用的与消息处理相关的类。
(2): MessageQueue 内部通过mPtr 变量保存一个Nati