资源名称:深入理解Android5源代码
内容简介:
本书共分20章,循序渐进地分析了Android系统的基本源代码,依次讲解了Android系统介绍,获取并编译Android源代码,分析Java Native Interface系统,分析HAL系统,分析IPC通信机制,分析Binder对象和Java接口,分析ServiceManager和MessageQueue,init进程和Zygote进程,System进程和应用程序进程,分析Activity组件,应用程序管理服务分析,Content Provider、Broadcast(广播)系统,电源管理系统分析,分析WindowManagerService系统、分析电话系统,分析短信系统、Sensor传感器系统详解、分析SEAndroid系统和分析ART系统等核心知识。本书内容言简意赅,讲解方法通俗易懂,不仅适合有一定基础的读者学习,也特别有利于初学者学习。
本书适合Android初学者、Android爱好者、Android底层开发人员、Android应用开发人员学习,也可以作为相关培训学校和大专院校相关专业师生的教学用书。
资源目录:
第1章 Android系统介绍1
1.1 Android系统成功的秘诀1
1.1.1 获取了业界的广泛支持1
1.1.2 研发阵容强大1
1.1.3 为开发人员“精心定制”1
1.1.4 开源2
1.2 剖析Android系统架构2
1.2.1 底层操作系统层(OS)3
1.2.2 各种库(Libraries)和Android
运行环境(RunTime)3
1.2.3 Application Framework(应用
程序框架)3
1.2.4 顶层应用程序(Application)4
1.3 五大组件4
1.3.1 Activity界面4
1.3.2 Intent和Intent Filters切换4
1.3.3 Service(服务)5
1.3.4 Broadcast Receiver发送广播5
1.3.5 用Content Provider存储数据6
1.4 进程和线程6
1.4.1 什么是进程6
1.4.2 什么是线程6
第2章 获取并编译Android源代码7
2.1 获取Android源代码7
2.1.1 在Linux系统中获取Android
源代码7
2.1.2 在Windows平台获取Android
源代码8
2.2 分析Android源代码结构10
2.2.1 总体结构11
2.2.2 应用程序部分12
2.2.3 应用程序框架部分13
2.2.4 系统服务部分13
2.2.5 系统程序库部分15
2.2.6 硬件抽象层部分17
2.3 Android源代码提供的接口18
2.3.1 暴露接口和隐藏接口18
2.3.2 调用隐藏接口23
2.4 编译源代码25
2.4.1 搭建编译环境25
2.4.2 在模拟器中运行27
2.5 编译源代码生成SDK27
第3章 分析Java Native Interface
系统30
3.1 JNI基础30
3.1.1 JNI的功能结构30
3.1.2 JNI的调用层次30
3.1.3 分析JNI的本质31
3.2 分析MediaScanner32
3.2.1 分析Java层32
3.2.2 分析JNI层37
3.2.3 分析Native(本地)层38
3.3 分析Camera系统的JNI44
3.3.1 Java层预览接口45
3.3.2 注册预览的JNI函数46
3.3.3 C/C++层的预览函数48
第4章 分析HAL系统49
4.1 HAL基础49
4.1.1 推出HAL的背景49
4.1.2 HAL的基本结构50
4.2 分析HAL module架构51
4.2.1 hw_module_t52
4.2.2 结构hw_module_methods_t
的定义52
4.2.3 hw_device_t结构53
4.3 分析文件hardware.c53
4.3.1 寻找动态链接库的地址53
4.3.2 数组variant_keys54
4.3.3 载入相应的库54
4.3.4 获得hw_module_t结构体54
4.4 分析硬件抽象层的加载过程55
4.5 分析硬件访问服务58
4.5.1 定义硬件访问服务接口58
4.5.2 具体实现59
4.6 分析Android官方实例60
4.6.1 获取实例工程源代码60
4.6.2 直接调用Service方法的
实现代码61
4.6.3 通过Manager调用Service
的实现代码64
4.7 HAL和系统移植66
4.7.1 移植各个Android部件
的方式66
4.7.2 设置设备权限67
4.7.3 init.rc初始化70
4.7.4 文件系统的属性70
第5章 分析IPC通信机制72
5.1 Binder机制概述72
5.2 分析Binder驱动程序73
5.2.1 分析数据结构73
5.2.2 分析设备初始化82
5.2.3 打开Binder设备文件83
5.2.4 内存映射85
5.2.5 释放物理页面89
5.2.6 分配内核缓冲区89
5.2.7 释放内核缓冲区91
5.2.8 查询内核缓冲区93
5.3 Binder封装库93
5.3.1 类BBinder94
5.3.2 类BpRefBase96
5.3.3 类IPCThreadState97
5.4 初始化Java层Binder框架99
5.5 分析MediaServer的通信机制101
5.5.1 MediaServer的入口函数101
5.5.2 ProcessState102
5.5.3 defaultServiceManager103
5.5.4 注册MediaPlayerService108
5.5.5 分析StartThread Pool和
join Thread Pool117
第6章 分析Binder对象和Java接口119
6.1 分析实体对象(binder_node)119
6.2 分析本地对象(BBinder)121
6.3 分析引用对象(binder_ref)129
6.4 分析代理对象(BpBinder)131
6.5 分析Java接口134
6.5.1 获取Service Manager134
6.5.2 分析ActivityManagerService
的Java层138
第7章 分析ServiceManager和
MessageQueue151
7.1 分析ServiceManager151
7.1.1 分析主入口函数151
7.1.2 打开Binder设备文件152
7.1.3 注册处理154
7.1.4 创建Binder实体对象156
7.1.5 尽职的循环157
7.1.6 将信息注册到
ServiceManager162
7.1.7 分析MediaPlayerService
和Client164
7.2 获得Service Manager接口169
7.3 分析MessageQueue171
7.3.1 创建MessageQueue171
7.3.2 提取消息171
7.3.3 分析函数nativePollOnce174
第8章 init进程和Zygote进程182
8.1 分析init进程182
8.1.1 分析入口函数182
8.1.2 分析配置文件185
8.1.3 分析Service190
8.1.4 解析on字段的内容195
8.1.5 init控制Service197
8.1.6 控制属性服务204
8.2 分析Zygote(孕育)进程210
8.2.1 Zygote基础211
8.2.2 分析Zygote的启动过程211
第9章 System进程和应用程序进程224
9.1 分析System进程224
9.1.1 启动System进程前
的准备工作224
9.1.2 分析SystemServer225
9.1.3 分析EntropyService227
9.1.4 分析DropBoxManager
Service229
9.1.5 分析DiskStatsService234
9.1.6 分析DeviceStorageManager
Service(监测系统内存存储
空间的状态)237
9.1.7 分析SamplingProfiler
Service239
9.2 分析应用程序进程246
9.2.1 创建应用程序246
9.2.2 启动线程池254
9.2.3 创建信息循环255
第10章 分析Activity组件258
10.1 Activity基础258
10.1.1 Activity状态258
10.1.2 剖析Activity中的
主要函数259
10.2 分析Activity的启动源代码260
10.2.1 Launcher启动应用程序261
10.2.2 返回ActivityManagerService
的远程接口262
10.2.3 解析intent的内容263
10.2.4 分析检查机制265
10.2.5 执行Activity组件的操作274
10.2.6 将Launcher推入Paused
状态279
10.2.7 处理消息281
10.2.8 暂停完毕282
10.2.9 建立双向连接285
10.2.10 启动新的Activity289
10.2.11 通知机制291
10.2.12 发送消息292
第11章 应用程序管理服务——PackageManagerService分析295
11.1 PackageManagerService概述295
11.2 系统进程启动296
11.3 开始运行296
11.4 扫描APK文件306
11.5 解析并安装文件307
11.6 启动系统默认Home应用程序
Launcher323
11.6.1 设置系统进程323
11.6.2 启动Home应用程序324
11.6.3 启动com.android.launcher2. Launcher330
11.6.4 加载应用程序333
11.6.5 获得Activity336
第12章 Content Provider存储机制341
12.1 Content Provider基础341
12.1.1 Content Provider在应用
程序中的架构341
12.1.2 Content Provider的常用
接口342
12.2 启动Content Provider343
12.2.1 获得对象接口343
12.2.2 存在校验344
12.2.3 启动Android应用程序348
12.2.4 根据进程启动Content
Provider348
12.2.5 处理消息352
12.2.6 具体启动354
12.3 Content Provider数据共享356
12.3.1 获取接口356
12.3.2 创建CursorWindow对象358
12.3.3 数据传递361
12.3.4 处理进程通信的请求362
12.3.5 数据操作367
第13章 分析广播机制源代码370
13.1 Broadcast基础370
13.2 发送广播信息371
13.2.1 intent描述指示371
13.2.2 传递广播信息371
13.2.3 封装传递372
13.2.4 处理发送请求372
13.2.5 查找广播接收者373
13.2.6 处理广播信息375
13.2.7 检查权限382
13.2.8 处理的进程通信请求384
13.3 分析BroadCastReceiver386
13.3.1 MainActivity的调用386
13.3.2 注册广播接收者387
13.3.3 获取接口对象388
13.3.4 处理进程间的通信请求390
第14章 分析电源管理系统392
14.1 Power Management架构基础392
14.2 分析Framework层392
14.2.1 文件PowerManager.java393
14.2.2 提供PowerManager功能393
14.3 JNI层架构分析410
14.3.1 定义了两层之间的
接口函数410
14.3.2 与Linux Kernel层
进行交互411
14.4 Kernel(内核)层架构分析411
14.4.1 文件power.c412
14.4.2 文件earlysuspend.c414
14.4.3 文件wakelock.c414
14.4.4 文件resume.c416
14.4.5 文件suspend.c416
14.4.6 文件main.c417
14.4.7 proc文件417
14.5 wakelock和early_suspend418
14.5.1 wakelock的原理418
14.5.2 early_suspend的原理419
14.5.3 Android休眠419
14.5.4 Android唤醒421
14.6 Battery电池系统架构和管理421
14.6.1 实现驱动程序422
14.6.2 实现JNI本地代码422
14.6.3 Java层代码423
14.6.4 实现Uevent部分424
14.7 JobScheduler节能调度机制428
14.7.1 JobScheduler机制的
推出背景428
14.7.2 JobScheduler的实现428
14.7.3 实现操作调度429
14.7.4 封装调度任务431
第15章 分析WindowManagerService
系统434
15.1 WindowManagerService基础434
15.2 计算Activity窗口的大小435
15.2.1 实现View遍历436
15.2.2 函数relayoutWindow446
15.2.3 函数relayoutWindow447
15.2.4 拦截消息的处理类466
15.2.5 判断是否计算过477
第16章 分析电话系统482
16.1 Android电话系统详解482
16.1.1 电话系统简介482
16.1.2 电话系统结构483
16.1.3 驱动程序介绍485
16.1.4 RIL接口486
16.1.5 分析电话系统的实现流程488
16.2 电话系统中的音频模块493
16.2.1 音频系统结构493
16.2.2 分析音频系统的层次494
16.3 分析拨号流程501
16.3.1 拨号界面501
16.3.2 实现Phone应用504
16.3.3 Call通话控制507
16.3.4 静态方法调用510
16.3.5 通话管理512
16.3.6 dial拨号514
16.3.7 状态跟踪515
16.3.8 RIL消息“出/入”口516
16.3.9 显示通话主界面517
第17章 分析短信系统518
17.1 短信系统的主界面518
17.2 发送普通短信520
17.3 发送彩信530
17.4 接收短信537
17.4.1 Java应用层的接收流程538
17.4.2 Framework层的处理过程540
第18章 Sensor传感器系统详解542
18.1 Android传感器系统概述542
18.2 Java层详解543
18.3 Frameworks层详解548
18.3.1 监听传感器的变化548
18.3.2 注册监听548
18.4 JNI层详解556
18.4.1 实现Native(本地)函数557
18.4.2 处理客户端数据561
18.4.3 处理服务端数据563
18.4.4 封装HAL层的代码572
18.4.5 处理消息队列576
18.5 HAL层详解578
第19章 分析SEAndroid系统585
19.1 SEAndroid概述585
19.1.1 内核空间587
19.1.2 用户空间588
19.2 文件安全上下文596
19.2.1 设置打包在ROM里面
的文件的安全上下文597
19.2.2 设置虚拟文件系统的
安全上下文600
19.2.3 设置应用程序数据文件的
安全上下文601
19.3 进程安全上下文612
19.3.1 为独立进程静态地设置
安全上下文612
19.3.2 为应用程序进程设置
安全上下文615
第20章 分析ART系统621
20.1 对比Dalvik VM和ART621
20.2 启动ART623
20.2.1 运行app_process进程624
20.2.2 准备启动627
20.2.3 创建运行实例632
20.2.4 注册本地JNI函数633
20.2.5 启动守护进程634
20.2.6 解析参数635
20.2.7 初始化类、方法和域641
20.3 分析主函数main647
20.4 查找目标类648
20.4.1 函数LookupClass()648
20.4.2 函数DefineClass()650
20.4.3 函数InsertClass()653
20.4.4 函数LinkClass()653
20.5 类操作655
20.6 实现托管操作656
20.7 加载OAT文件660
20.7.1 产生OAT660
20.7.2 创建ART虚拟机661
20.7.3 解析启动参数并创建堆663
20.7.4 生成指定目录文件665
20.7.5 加载OAT文件666
20.7.6 解析字段668
资源截图: