第1章 初识Android 1
1.1 智能手机的系统结构 1
1.2 Android系统架构 2
1.2.1 应用层 3
1.2.2 应用框架层 3
1.2.3 系统运行库层 3
1.2.4 核心层 4
1.3 Android Telephony框架结构 5
1.3.1 系统运行库层的HAL 6
1.3.2 简析HAL结构 6
1.3.3 Android为什么引入HAL 7
1.3.4 Android中HAL的运行结构 7
本章小结 8
第2章 搭建Android源代码编译调试环境 9
2.1 Ubuntu Linux操作系统及工具安装 10
2.1.1 PC配置建议 10
2.1.2 Ubuntu安装光盘制作 10
2.1.3 Ubuntu安装过程 10
2.1.4 安装OpenJDK 12
2.1.5 Ubuntu系统工具包更新升级 13
2.2 Android源代码下载及编译过程 13
2.2.1 工作目录设置 13
2.2.2 源代码下载 13
2.2.3 开始编译Android源代码 14
2.2.4 编译单个模块 16
2.3 Android Studio及SDK 17
2.3.1 下载和配置Android Studio 17
2.3.2 Android SDK下载及配置和使用 17
2.3.3 使用Android SDK启动Android虚拟设备 19
2.3.4 Android调试工具adb的使用方法 20
2.3.5 相关技巧汇总 20
2.4 在Google手机上调试Android源码 21
2.4.1 Google手机对应编译选项 21
2.4.2 Google手机刷入工厂镜像 21
2.4.3 编译本地镜像并刷入Google手机 22
2.4.4 Google手机上调试Android源码 25
24.5 关键问题总结 26
本章小结 27
第3章 深入解析通话流程 29
3.1 拨号流程分析 29
3.1.1 打开Nexus 6P手机的拨号盘 30
3.1.2 进入拨号界面DialtactsActivity 30
3.1.3 DialpadFragment拨号盘 32
3.1.4 ITelecomService接收拨号请求服务 33
3.1.5 CallsManager拨号流程处理 35
3.1.6 IInCallService服务的响应过程 40
3.1.7 继续分析CallsManager.placeOutgoingCall 46
3.1.8 Telecom应用拨号流程回顾与总结 50
3.1.9 IConnectionService服务的响应过程 51
3.1.10 TelecomAdapter接收消息回调 55
3.1.11 拨号流程总结 56
3.2 来电流程分析 57
3.2.1 分析radio来电日志 58
3.2.2 UNSOL RESPONSE CALL STATE CHANGED消息处理 58
3.2.3 扩展Regi strantList消息处理机制 59
3.2.4 GsmCdmaCallTracker消息处理 61
3.2.5 ITelecomService处理来电消息 63
3.2.6 来电流程总结 66
3.3 通话总结 66
3.3.1 通话关键代码汇总 66
3.3.2 通话状态更新消息上报流程 68
3.3.3 控制通话消息下发流程 69
3.4 建立Android通话模型 70
本章小结 71
第4章 详解Telecom 73
4.1 Telecom应用加载入口 73
4.1.1 TelecomManager类核心逻辑分析 74
4.1.2 Telecom应用代码汇总 76
4.1.3 ITelecomService的onBind过程 77
4.1.4 第二个拨号入口 79
4.2 Telecom交互模型 79
4.2.1 汇总frameworks/base/telecomm代码 80
4.2.2 绑定IInCallService机制 81
4.2.3 绑定IConnectionService机制 82
4.2.4 演进Telecom交互模型 85
4.3 核心Listener回调消息处理 86
4.3.1 CallsManagerListener 86
4.3.2 Call.Listener 88
4.3.3 CreateConnectionResponse 90
4.3.4 总结Listener消息 90
4.4 扩展CallsManager 92
4.4.1 记录通话日志 92
4.4.2 耳机Hook事件 93
4.4.3 通知栏信息同步 93
本章小结 94
第5章 详解TeleService 95
5.1 加载过程分析 95
5.1.1 应用基本信息 96
5.1.2 PhoneGlobals.onCreate 97
5.1.3 TelephonyGlobals.onCreate 98
5.2 Telephony Phone 98
5.2.1 GsmCdmaPhone 99
5.2.2 Composition(组合)关系 101
5.2.3 Facade Pattern 102
5.2.4 Handler消息处理机制 103
5.3 扩展PhoneAccount 105
5.3.1 PhoneAccount初始化过程 105
5.3.2 PhoneAccount注册响应 108
5.3.3 PhoneAccount在拨号流程中的作用分析 109
5.3.4 小结 112
5.4 TeleService服务 113
5.4.1 phone系统服务 113
5.4.2 isub系统服务 115
5.4.3 lConnectionService应用服务 118
本章小结 123
第6章 Voice Call语音通话模型 125
6.1 详解GsmCdmaCallTracker 125
6.1.1 代码结构解析 126
6.1.2 Handler消息处理方式 127
6.1.3 与RILJ对象的交互机制 130
6.2 handlePollCalls方法 134
6.2.1 准备阶段 134
6.2.2 更新通话相关信息 135
6.2.3 发出通知 140
6.2.4 更新mState 141
6.3 通话管理模型分析 142
6.3.1 GsmCdmaCall 143
6.3.2 GsmCdmaConnection 143
6.3.3 DriverCall、 Call、 Connection 146
6.4 补充通话连接断开处理机制 149
6.4.1 本地主动挂断通话 149
6.4.2 远端断开通话连接 152
6.5 区分Connection 154
6.6 扩展InCallUi 155
6.6.1 初始化过程 155
6.6.2 addCall 158
6.6.3 InCallUi通话界面 160
6.6.4 updateCall 165
6.7 验证Call运行模型 166
6.7.1 Telephony Voice Call 167
6.7.2 Telecom Call 170
6.7.3 InCa11Ui Call 171
本章小结 173
第7章 ServiceState网络服务 175
7.1 ServiceState 176
7.1.1 ServiceState类的本质 176
7.1.2 关键常量信息 177
7.1.3 关键属性 177
7.1.4 关键方法 178
7.2 ServiceStateTracker运行机制详解 179
7.2.1 核心类图 179
7.2.2 代码结构 180
7.2.3 Handler消息处理机制 181
7.2.4 与RILJ对象的交互机制 184
7.3 handlePollStateResult方法 186
7.3.1 异常处理 186
7.3.2 handlePollStateResultMessage 187
7.3.3 继续更新mNewSS 190
7.3.4 完成收尾工作 191
7.4 ﹡#﹡#4636#﹡#﹡测试工具 193
7.4.1 网络服务信息 194
7.4.2 扩展ITelephonyRegistry 196
7.4.3 展示小区信息 197
7.4.4 小区信息更新源头 198
7.4.5 信号强度实时变化 199
7.5 飞行模式 201
7.5.1 飞行模式开启关闭入口逻辑 201
7.5.2 Radio模块开启关闭 202
7.5.3 WiFi模块开启关闭 202
7.5.4 蓝牙模块开启关闭 202
7.6 扩展SiM卡业务 203
7.6.1 SIM卡业务分析 203
7.6.2 驻网过程分析 204
7.6.3 SoftSim业务实现分析 205
本章小结 206
第8章 Data Call移动数据业务 207
8.1 DcTracker初始化过程 207
8.1.1 Handler消息注册 208
8.1.2 初始化ApnContext 208
8.1.3 认识APN 210
8.1.4 创建DcController 212
8.1.5 注册Observer 213
8.1.6 广播接收器 213
8.1.7 加载Ap nSetting 213
8.2 解析StateMachine 215
8.2.1 State设计模式 215
8.2.2 StateMachine核心类 215
8.2.3 初始化流程 216
8.2.4 运行流程 217
8.2.5 小结 218
8.3 DataConnection 219
8.3.1 关键属性 220
8.3.2 关键方法 220
8.3.3 StateMachine初始化流程 221
8.4 开启移动数据业务 222
8.4.1 流程分析 222
8.4.2 前置条件分析 227
8.4.3 DcActiveState收尾工作 231
8.4.4 Suspend挂起状态 232
8.4.5 查看手机上网基本信息 232
8.5 关闭移动数据业务 233
8.6 DataConnection状态转换 233
8.7 获取Android手机上网数据包 234
8.7.1 使用tcpdump工具抓取TCP/IP数据包 234
8.7.2 使用Wireshark软件分析TCP/IP数据包 235
本章小结 235
第9章 SMS&MMS业务 236
9.1 短信发送流程 236
9.1.1 进入短信应用 236
9.1.2 短信编辑界面 237
9.1.3 Action处理机制 239
9.1.4 继续跟进短信发送流程 241
9.1.5 phone进程中的短信发送流程 243
9.2 扩展短信发送业务 245
9.2.1 确认短信发送结果 245
9.2.2 重发机制 246
9.2.3 状态报告 247
9.3 短信接收流程 247
9.3.1 RIL接收短信消息 247
9.3.2 GsmInboundSmsHandler 248
9.3.3 Messaging应用接收新短信 250
9.3.4 PDU 251
9.3.5 短信业务小结 252
9.4 彩信关键业务逻辑 253
9.4.1 彩信发送入口 253
9.4.2 imms系统服务 254
9.4.3 彩信发送流程 255
9.4.4 Data Call 256
9.4.5 doHttp 259
9.4.6 接收彩信 259
9.4.7 MmsService小结 260
本章小结 261
第10章 Radio Interface Layer 262
10.1 解析RILJ 263
10.1.1 认识RIL类 263
10.1.2 RILRequest 265
10.1.3 IRadio关联的服务 266
10.1.4 RIL消息分类 270
10.1.5 Solicited Request 270
10.1.6 Solicited Response 271
10.1.7 UnSolicited 274
10.2 详解rild 274
10.2.1 RIL_ startEventLoop 275
10.2.2 获取RIL RadioFunctions 275
10.2.3 注册RIL RadioFunctions 277
10.3 libril初始化流程 278
10.3.1 RIL_ startEventLoop 278
10.3.2 RIL register 280
10.4 扩展hal接口 281
10.4.1 增加接口定义 282
10.4.2 验证生成的代码 282
10.4.3 实现新增接口 285
10.4.4 运行结果验证 286
10.5 RILC运行机制 287
10.5.1 Solicited消息 287
10.5.2 UnSolicited消息 291
本章小结 293