Android系统源代码情景分析笔记00
2015-09-18 22:48
363 查看
开始研究Android的底层了
作者主页:http://blog.csdn.net/luoshengyang/article/details/7409491
Android Studio下载http://rAndroid Studioj.baidu.com/soft/detail/27390.html?ald
大牛们是怎么阅读 Android 系统源码的?http://www.zhihu.com/question/19759722
巨人的肩膀
AOSP项目官方: https://source.android.com/source/index.html
这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础.
Android官方Training: https://developer.android.com/training/index.html
这个其实是给App开发者看的. 但是里面也有不少关于系统机制的介绍, 值得细读.
老罗的Android之旅: http://blog.csdn.net/luoshengyang
此老罗非彼老罗. 罗升阳老师的博客非常有营养, 基本可以作为指引你开始阅读AOSP源码的教程. 你可以按照博客的时间顺序一篇篇挑需要的看.但这个系列的博客有些问题:
早期的博客是基于旧版本的Android;
大量的代码流程追踪. 读文章时你一定要清楚你在看的东西在整个系统处于什么样的位置.
Innost的专栏: http://blog.csdn.net/innost
邓凡平老师也是为Android大牛, 博客同样很有营养. 但是不像罗升阳老师的那么系统. 更多的是一些技术点的深入探讨.
Android Issues: http://code.google.com/p/android/issues/list
Android官方Issue列表. 我在开发过程中发现过一些奇怪的bug, 最后发现这里基本都有记录. 当然你可以提一些新的, 有没有人改就是另外一回事了.
Google: https://www.google.com
一定要能流畅的使用这个工具. 大量的相关知识是没有人系统的总结的, 你需要自己搞定.
整理的内容从初学者的角度来组织,由浅入深、自下而上地对Android系统的源代码进行了分析,目录结构如下所示:
[plain] view
plaincopy
第一篇 初识Android系统...........................................6
第一章 准备知识..............................................7
1.1 准备Linux内核基础知识................................7
1.2 准备Android应用程序基础知识..........................8
1.3 下载、编译和运行Android源代码........................8
1.3.1 安装Git工具....................................9
1.3.2 安装Java SDK...................................9
1.3.3 安装其它工具包.................................9
1.3.4 安装repo工具...................................9
1.3.5 下载Android源代码..............................9
1.3.6 编译Android源代码..............................10
1.3.7 运行Android模拟器..............................11
1.4 下载、编译和运行Android内核源代码....................12
1.4.1 下载Android内核源代码..........................12
1.4.2 修改Makefile文件...............................13
1.4.3 编译Android内核源代码..........................13
1.4.4 运行Android模拟器..............................14
1.5 开发第一个Android应用程序............................14
1.6 编译和打包单个Android应用程序模块....................17
1.6.1 导入编译单个模块的mmm命令......................17
1.6.2 编译单个Android应用程序模块....................18
1.6.3 重新打包Android系统镜像文件....................18
第二章 硬件抽象层............................................19
2.1 开发Android硬件驱动程序..............................20
2.1.1 实现内核驱动程序模块...........................21
2.1.2 修改内核Kconfig文件............................27
2.1.3 修改内核Makefile文件...........................28
2.1.4 编译内核驱动程序模块...........................28
2.1.5 验证内核驱动程序模块...........................29
2.2 开发C可执行程序验证Android硬件驱动程序...............30
2.3 开发Android硬件抽象层模块............................32
2.3.1 硬件抽象层编写规范.............................32
2.3.1.1 模块文件的命令规范.......................32
2.3.1.2 结构体定义规范...........................33
2.3.2 实现硬件抽象层访问接口.........................35
2.3.3 硬件抽象层模块加载过程分析.....................39
2.3.4 处理硬件设备访问权限问题.......................42
2.4 开发Android硬件访问服务..............................44
2.4.1 定义硬件访问服务接口...........................44
2.4.2 实现硬件访问服务...............................45
2.4.3 实现硬件访问服务的Java 本地接口方法............46
2.4.4 启动硬件访问服务...............................49
2.5 开发Android应用程序来调用硬件访问服务................50
第三章 智能指针..............................................55
3.1 轻量级指针...........................................57
3.1.1 实现原理分析...................................57
3.1.2 使用实例分析...................................59
3.2 强指针和弱指针.......................................61
3.2.1 强指针的实现原理分析...........................61
3.2.2 弱指针的实现原理分析...........................68
3.2.3 强指针和弱指针的使用实例分析...................74
第二篇 Android专用驱动系统.......................................79
第四章 Logger日志系统........................................80
4.1 Logger驱动程序.......................................83
4.1.1 相关数据结构...................................83
4.1.2 设备初始化过程.................................85
4.1.3 设备文件打开过程...............................90
4.1.4 日志读取过程...................................91
4.1.5 日志写入过程...................................95
4.2 运行时日志库写入接口.................................100
4.3 C/C++日志写入接口....................................106
4.4 Java日志写入接口.....................................110
4.5 Logcat工具分析.......................................116
4.5.1 相关数据结构...................................117
4.5.2 初始化过程.....................................121
4.5.3 日志读取过程...................................133
4.5.4 日志输出过程...................................137
第五章 Binder进程间通信系统..................................149
5.1 Binder驱动程序.......................................151
5.1.1 相关数据结构...................................152
5.1.2 设备初始化过程.................................172
5.1.3 设备文件打开过程...............................173
5.1.4 设备文件内存映射过程...........................174
5.1.5 内核缓冲区管理.................................181
5.1.5.1 分配内核缓冲区...........................181
5.1.5.2 释放内核缓冲区...........................187
5.1.5.3 查询内核缓冲区...........................192
5.2 Binder进程间通信库...................................193
5.3 Binder进程间通信应用实例.............................197
5.4 Binder对象引用计数技术...............................205
5.4.1 Binder本地对象的生命周期.......................206
5.4.2 Binder实体对象的生命周期.......................210
5.4.3 Binder引用对象的生命周期.......................213
5.4.4 Binder代理对象的生命周期.......................218
5.5 Binder对象死亡通知机制...............................221
5.5.1 注册死亡接收通知...............................221
5.5.2 发送死亡接收通知...............................225
5.5.3 注销死亡接收通知...............................229
5.6 Service Manager的启动过程............................232
5.6.1 打开和映射Binder设备文件.......................234
5.6.2 注册成为Binder上下文管理者.....................235
5.6.3 循环等待Client进程请求.........................239
5.7 Service Manager代理对象接口的获取过程................245
5.8 Service的启动过程....................................252
5.8.1 注册Service组件................................253
5.8.1.1 封装通信数据为Parcel对象.................254
5.8.1.2 发送和处理BC_TRANSACTION命令协议.........257
5.8.1.3 发送和处理BR_TRANSACTION返回协议.........270
5.8.1.4 发送和处理BC_REPLY命令协议...............282
5.8.1.5 发送和处理BR_REPLY返回协议...............288
5.8.2 循环等待Client进程请求.........................291
5.9 Service代理对象接口的获取过程........................294
5.10 Binder进程间通信机制的Java实现接口..................302
5.10.1 获取Service Manager的Java代理对象接口.........303
5.10.2 AIDL服务接口解析..............................312
5.10.3 Java服务的启动过程............................315
5.10.4 获取Java服务的代理对象接口....................321
5.10.5 Java服务的调用过程............................324
第六章 Ashmem匿名共享内存系统................................329
6.1 Ashmem驱动程序.......................................330
6.1.1 相关数据结构...................................330
6.1.2 设备初始化过程.................................332
6.1.3 设备文件打开过程...............................334
6.1.4 设备文件内存映射过程...........................336
6.1.5 内存块的锁定和解锁过程.........................338
6.1.6 解锁状态内存块的回收过程.......................345
6.2 运行时库cutils的匿名共享内存接口.....................346
6.3 匿名共享内存的C++访问接口............................349
6.3.1 MemoryHeapBase.................................349
6.3.1.1 Server端的实现...........................349
6.3.1.2 Client端的实现...........................353
6.3.2 MemoryBase.....................................359
6.3.2.1 Server端的实现...........................360
6.3.2.2 Client端的实现...........................362
6.3.3 应用实例.......................................364
6.4 匿名共享内存的Java访问接口...........................370
6.4.1 MemoryFile.....................................370
6.4.2 应用实例.......................................375
6.5 匿名共享内存的共享原理分析...........................386
第三篇 Android应用程序框架篇.....................................390
第七章 Activity组件的启动过程................................391
7.1 Activity组件应用实例.................................391
7.2 根Activity的启动过程.................................397
7.3 Activity在进程内的启动过程...........................429
7.4 Activity在新进程中的启动过程.........................438
第八章 Service组件的启动过程.................................441
8.1 Service组件应用实例..................................441
8.2 Service在新进程中的启动过程..........................448
8.3 Service在进程内的绑定过程............................460
第九章 Android系统广播机制...................................483
9.1 广播应用实例.........................................484
9.2 广播接收者的注册过程.................................491
9.3 广播的发送过程.......................................499
第十章 Content Provider组件的实现原理........................521
10.1 Content Provider组件应用实例........................522
10.1.1 ArticlesProvider..............................523
10.1.2 Article.......................................533
10.2 Content Provider组件的启动过程......................548
10.3 Content Provider组件的数据共享原理..................570
10.4 Content Provider组件的数据更新通知机制..............593
10.4.1 内容观察者的注册过程..........................594
10.4.2 数据更新的通知过程............................601
第十一章 Zygote和System进程的启动过程........................609
11.1 Zygote进程的启动脚本................................609
11.2 Zygote进程的启动过程................................612
11.3 System进程的启动过程................................619
第十二章 Android应用程序进程的启动过程.......................628
12.1 应用程序进程的创建过程..............................628
12.2 Binder线程池的启动过程..............................637
12.3 消息循环的创建过程..................................640
第十三章 Android应用程序的消息处理机制.......................644
13.1 创建线程消息队列....................................644
13.2 线程消息循环过程....................................649
13.3 线程消息发送过程....................................654
13.4 线程消息处理过程....................................658
第十四章 Android应用程序的键盘消息处理机制...................666
14.1 InputManager的启动过程..............................669
14.1.1 创建InputManager..............................669
14.1.2 启动InputManager..............................672
14.1.3 启动InputDispatcher...........................674
14.1.4 启动InputReader...............................676
14.2 InputChannel的注册过程..............................687
14.2.1 创建InputChannel..............................688
14.2.2 注册Server端InputChannel......................695
14.2.3 注册当前激活窗口..............................699
14.2.4 注册Client端InputChannel......................704
14.3 键盘消息的分发过程..................................708
14.3.1 InputReader处理键盘事件.......................708
14.3.2 InputDispatcher分发键盘事件...................715
14.3.3 当前激活的窗口获得键盘消息....................727
14.3.4 InputDispatcher获得键盘事件处理完成通知.......741
14.4 InputChannel的注销过程..............................745
14.4.1 销毁应用程序窗口..............................746
14.4.2 注销Client端InputChannel......................754
14.4.3 注销Server端InputChannel......................756
第十五章 Android应用程序线程的消息循环模型...................762
15.1 应用程序主线程消息循环模型..........................762
15.2 界面无关的应用程序子线程消息循环模型................764
15.3 界面相关的应用程序子线程消息循环模型................766
第十六章 Android应用程序的安装和显示过程.....................775
16.1 应用程序的安装过程..................................775
16.2 应用程序的显示过程..................................808
作者主页:http://blog.csdn.net/luoshengyang/article/details/7409491
Android Studio下载http://rAndroid Studioj.baidu.com/soft/detail/27390.html?ald
大牛们是怎么阅读 Android 系统源码的?http://www.zhihu.com/question/19759722
巨人的肩膀
AOSP项目官方: https://source.android.com/source/index.html
这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础.
Android官方Training: https://developer.android.com/training/index.html
这个其实是给App开发者看的. 但是里面也有不少关于系统机制的介绍, 值得细读.
老罗的Android之旅: http://blog.csdn.net/luoshengyang
此老罗非彼老罗. 罗升阳老师的博客非常有营养, 基本可以作为指引你开始阅读AOSP源码的教程. 你可以按照博客的时间顺序一篇篇挑需要的看.但这个系列的博客有些问题:
早期的博客是基于旧版本的Android;
大量的代码流程追踪. 读文章时你一定要清楚你在看的东西在整个系统处于什么样的位置.
Innost的专栏: http://blog.csdn.net/innost
邓凡平老师也是为Android大牛, 博客同样很有营养. 但是不像罗升阳老师的那么系统. 更多的是一些技术点的深入探讨.
Android Issues: http://code.google.com/p/android/issues/list
Android官方Issue列表. 我在开发过程中发现过一些奇怪的bug, 最后发现这里基本都有记录. 当然你可以提一些新的, 有没有人改就是另外一回事了.
Google: https://www.google.com
一定要能流畅的使用这个工具. 大量的相关知识是没有人系统的总结的, 你需要自己搞定.
整理的内容从初学者的角度来组织,由浅入深、自下而上地对Android系统的源代码进行了分析,目录结构如下所示:
[plain] view
plaincopy
第一篇 初识Android系统...........................................6
第一章 准备知识..............................................7
1.1 准备Linux内核基础知识................................7
1.2 准备Android应用程序基础知识..........................8
1.3 下载、编译和运行Android源代码........................8
1.3.1 安装Git工具....................................9
1.3.2 安装Java SDK...................................9
1.3.3 安装其它工具包.................................9
1.3.4 安装repo工具...................................9
1.3.5 下载Android源代码..............................9
1.3.6 编译Android源代码..............................10
1.3.7 运行Android模拟器..............................11
1.4 下载、编译和运行Android内核源代码....................12
1.4.1 下载Android内核源代码..........................12
1.4.2 修改Makefile文件...............................13
1.4.3 编译Android内核源代码..........................13
1.4.4 运行Android模拟器..............................14
1.5 开发第一个Android应用程序............................14
1.6 编译和打包单个Android应用程序模块....................17
1.6.1 导入编译单个模块的mmm命令......................17
1.6.2 编译单个Android应用程序模块....................18
1.6.3 重新打包Android系统镜像文件....................18
第二章 硬件抽象层............................................19
2.1 开发Android硬件驱动程序..............................20
2.1.1 实现内核驱动程序模块...........................21
2.1.2 修改内核Kconfig文件............................27
2.1.3 修改内核Makefile文件...........................28
2.1.4 编译内核驱动程序模块...........................28
2.1.5 验证内核驱动程序模块...........................29
2.2 开发C可执行程序验证Android硬件驱动程序...............30
2.3 开发Android硬件抽象层模块............................32
2.3.1 硬件抽象层编写规范.............................32
2.3.1.1 模块文件的命令规范.......................32
2.3.1.2 结构体定义规范...........................33
2.3.2 实现硬件抽象层访问接口.........................35
2.3.3 硬件抽象层模块加载过程分析.....................39
2.3.4 处理硬件设备访问权限问题.......................42
2.4 开发Android硬件访问服务..............................44
2.4.1 定义硬件访问服务接口...........................44
2.4.2 实现硬件访问服务...............................45
2.4.3 实现硬件访问服务的Java 本地接口方法............46
2.4.4 启动硬件访问服务...............................49
2.5 开发Android应用程序来调用硬件访问服务................50
第三章 智能指针..............................................55
3.1 轻量级指针...........................................57
3.1.1 实现原理分析...................................57
3.1.2 使用实例分析...................................59
3.2 强指针和弱指针.......................................61
3.2.1 强指针的实现原理分析...........................61
3.2.2 弱指针的实现原理分析...........................68
3.2.3 强指针和弱指针的使用实例分析...................74
第二篇 Android专用驱动系统.......................................79
第四章 Logger日志系统........................................80
4.1 Logger驱动程序.......................................83
4.1.1 相关数据结构...................................83
4.1.2 设备初始化过程.................................85
4.1.3 设备文件打开过程...............................90
4.1.4 日志读取过程...................................91
4.1.5 日志写入过程...................................95
4.2 运行时日志库写入接口.................................100
4.3 C/C++日志写入接口....................................106
4.4 Java日志写入接口.....................................110
4.5 Logcat工具分析.......................................116
4.5.1 相关数据结构...................................117
4.5.2 初始化过程.....................................121
4.5.3 日志读取过程...................................133
4.5.4 日志输出过程...................................137
第五章 Binder进程间通信系统..................................149
5.1 Binder驱动程序.......................................151
5.1.1 相关数据结构...................................152
5.1.2 设备初始化过程.................................172
5.1.3 设备文件打开过程...............................173
5.1.4 设备文件内存映射过程...........................174
5.1.5 内核缓冲区管理.................................181
5.1.5.1 分配内核缓冲区...........................181
5.1.5.2 释放内核缓冲区...........................187
5.1.5.3 查询内核缓冲区...........................192
5.2 Binder进程间通信库...................................193
5.3 Binder进程间通信应用实例.............................197
5.4 Binder对象引用计数技术...............................205
5.4.1 Binder本地对象的生命周期.......................206
5.4.2 Binder实体对象的生命周期.......................210
5.4.3 Binder引用对象的生命周期.......................213
5.4.4 Binder代理对象的生命周期.......................218
5.5 Binder对象死亡通知机制...............................221
5.5.1 注册死亡接收通知...............................221
5.5.2 发送死亡接收通知...............................225
5.5.3 注销死亡接收通知...............................229
5.6 Service Manager的启动过程............................232
5.6.1 打开和映射Binder设备文件.......................234
5.6.2 注册成为Binder上下文管理者.....................235
5.6.3 循环等待Client进程请求.........................239
5.7 Service Manager代理对象接口的获取过程................245
5.8 Service的启动过程....................................252
5.8.1 注册Service组件................................253
5.8.1.1 封装通信数据为Parcel对象.................254
5.8.1.2 发送和处理BC_TRANSACTION命令协议.........257
5.8.1.3 发送和处理BR_TRANSACTION返回协议.........270
5.8.1.4 发送和处理BC_REPLY命令协议...............282
5.8.1.5 发送和处理BR_REPLY返回协议...............288
5.8.2 循环等待Client进程请求.........................291
5.9 Service代理对象接口的获取过程........................294
5.10 Binder进程间通信机制的Java实现接口..................302
5.10.1 获取Service Manager的Java代理对象接口.........303
5.10.2 AIDL服务接口解析..............................312
5.10.3 Java服务的启动过程............................315
5.10.4 获取Java服务的代理对象接口....................321
5.10.5 Java服务的调用过程............................324
第六章 Ashmem匿名共享内存系统................................329
6.1 Ashmem驱动程序.......................................330
6.1.1 相关数据结构...................................330
6.1.2 设备初始化过程.................................332
6.1.3 设备文件打开过程...............................334
6.1.4 设备文件内存映射过程...........................336
6.1.5 内存块的锁定和解锁过程.........................338
6.1.6 解锁状态内存块的回收过程.......................345
6.2 运行时库cutils的匿名共享内存接口.....................346
6.3 匿名共享内存的C++访问接口............................349
6.3.1 MemoryHeapBase.................................349
6.3.1.1 Server端的实现...........................349
6.3.1.2 Client端的实现...........................353
6.3.2 MemoryBase.....................................359
6.3.2.1 Server端的实现...........................360
6.3.2.2 Client端的实现...........................362
6.3.3 应用实例.......................................364
6.4 匿名共享内存的Java访问接口...........................370
6.4.1 MemoryFile.....................................370
6.4.2 应用实例.......................................375
6.5 匿名共享内存的共享原理分析...........................386
第三篇 Android应用程序框架篇.....................................390
第七章 Activity组件的启动过程................................391
7.1 Activity组件应用实例.................................391
7.2 根Activity的启动过程.................................397
7.3 Activity在进程内的启动过程...........................429
7.4 Activity在新进程中的启动过程.........................438
第八章 Service组件的启动过程.................................441
8.1 Service组件应用实例..................................441
8.2 Service在新进程中的启动过程..........................448
8.3 Service在进程内的绑定过程............................460
第九章 Android系统广播机制...................................483
9.1 广播应用实例.........................................484
9.2 广播接收者的注册过程.................................491
9.3 广播的发送过程.......................................499
第十章 Content Provider组件的实现原理........................521
10.1 Content Provider组件应用实例........................522
10.1.1 ArticlesProvider..............................523
10.1.2 Article.......................................533
10.2 Content Provider组件的启动过程......................548
10.3 Content Provider组件的数据共享原理..................570
10.4 Content Provider组件的数据更新通知机制..............593
10.4.1 内容观察者的注册过程..........................594
10.4.2 数据更新的通知过程............................601
第十一章 Zygote和System进程的启动过程........................609
11.1 Zygote进程的启动脚本................................609
11.2 Zygote进程的启动过程................................612
11.3 System进程的启动过程................................619
第十二章 Android应用程序进程的启动过程.......................628
12.1 应用程序进程的创建过程..............................628
12.2 Binder线程池的启动过程..............................637
12.3 消息循环的创建过程..................................640
第十三章 Android应用程序的消息处理机制.......................644
13.1 创建线程消息队列....................................644
13.2 线程消息循环过程....................................649
13.3 线程消息发送过程....................................654
13.4 线程消息处理过程....................................658
第十四章 Android应用程序的键盘消息处理机制...................666
14.1 InputManager的启动过程..............................669
14.1.1 创建InputManager..............................669
14.1.2 启动InputManager..............................672
14.1.3 启动InputDispatcher...........................674
14.1.4 启动InputReader...............................676
14.2 InputChannel的注册过程..............................687
14.2.1 创建InputChannel..............................688
14.2.2 注册Server端InputChannel......................695
14.2.3 注册当前激活窗口..............................699
14.2.4 注册Client端InputChannel......................704
14.3 键盘消息的分发过程..................................708
14.3.1 InputReader处理键盘事件.......................708
14.3.2 InputDispatcher分发键盘事件...................715
14.3.3 当前激活的窗口获得键盘消息....................727
14.3.4 InputDispatcher获得键盘事件处理完成通知.......741
14.4 InputChannel的注销过程..............................745
14.4.1 销毁应用程序窗口..............................746
14.4.2 注销Client端InputChannel......................754
14.4.3 注销Server端InputChannel......................756
第十五章 Android应用程序线程的消息循环模型...................762
15.1 应用程序主线程消息循环模型..........................762
15.2 界面无关的应用程序子线程消息循环模型................764
15.3 界面相关的应用程序子线程消息循环模型................766
第十六章 Android应用程序的安装和显示过程.....................775
16.1 应用程序的安装过程..................................775
16.2 应用程序的显示过程..................................808
相关文章推荐
- Android 绘图进阶(四):自定义View属性(灰常重要)
- 01_电话拨号器工程
- Android自定义控件
- android 学习视频汇总
- Android在代码中调用XML中设置的自定义View属性
- android自动化测试——monkey(2)
- Android性能优化之内存篇
- Android -Camer使用!
- android:weight属性的使用——android开发之xml布局文件
- Android 绘图进阶(三):Xfermode绘制图片的保存
- Android BaseAdapter
- Android 权限大全
- 创建一个服务
- Android自定义View——动态ProgressBar之模仿360加速球
- Android自定义View---Canvas绘制贝塞尔曲线
- Android自定义View---圆形进度条
- Android基本控件
- Android自定义View---模拟球形动态加速球
- Android自定义View之图形图像(模仿360的刷新球自定义一个SeekBar)
- Android公共库的建立方法