深入理解Android:Telephony原理剖析与最佳实践(经典畅销书“深入理解Android”系列新作,从源码角度深入解析Telephony的架构设计与实现原理,深刻揭示Android系统的通信机制!)
作者是杨青平。
偶的评价如下:
华章公司出版的“深入理解Android”系列图书以分析Android的源代码为主,包含应用、框架、专题和内核四个部分,本书是专题部分的第一本书。本书的研究重点是Android的Telephony相关模块,它们也是Android体系结构中相对独立的一部分。分析难度较大,因为涉及的面较广,需要掌握的专业知识也比较多。青平兄结合2年多的实际工作经验,精心总结和整理了这本拥有完整知识框架、条理清晰、理论和实战结合的专题书籍,全方位、多角度向读者展示了Android Telephony体系结构的工作流程和相关原理。同时,该书秉承了“深入理解Android”系列图书高标准、高质量的传统,并展现了作者作为一位川籍软件工程师所拥有的追逐细节的品质和开阔的思路。
样章还没有给我,我会第一时间和大家共享。谢谢大家对这本书的支持
目录:
第一部分 基础篇
第1章 初识Android / 21.1 智能手机的系统结构 / 21.2 Android系统架构 / 31.2.1 应用层 / 31.2.2 应用框架层 / 41.2.3 系统运行库层 / 51.2.4 核心层 / 61.3 Android Telephony框架结构 / 61.3.1 系统运行库层的HAL层 / 71.3.2 简析HAL结构 / 81.3.3 Android为什么引入HAL / 91.3.4 Android中HAL的运行结构 / 91.4 本章小结 / 10第2章 搭建Android源代码编译环境 / 112.1 Ubuntu Linux操作系统及工具安装 / 112.1.1 PC配置建议 / 122.1.2 Ubuntu安装光盘的制作 / 122.1.3 Ubuntu安装过程 / 122.1.4 Ubuntu系统工具包更新升级 / 142.1.5 Java运行环境JDK安装及配置 / 152.1.6 Android SDK的下载和配置 / 162.1.7 使用Android SDK启动虚拟设备 / 172.2 Android源代码下载及编译过程 / 192.2.1 工作目录设置 / 192.2.2 源代码下载 / 192.2.3 整体编译Android 源代码 / 192.2.4 单个模块按需编译 / 202.2.5 编译生成本地Android SDK / 212.3 Android常用工具使用及相关技巧说明 / 212.3.1 使用本地编译成功的镜像文件启动Android模拟器 / 222.3.2 Android调试工具adb的使用方法 / 232.3.3 进入Android虚拟设备控制台模拟短信、来电等功能 / 232.4 Eclipse配置及使用 / 242.4.1 Android开发套件ADT下载及配置 / 242.4.2 建立Android源代码Java工程 / 252.4.3 格式化Android Java源代码 / 262.5 使用Source Insight方便阅读C/C++代码 / 262.5.1 安装Wine / 262.5.2 安装Source Insight / 262.5.3 配置Source Insight C/C++工程 / 272.6 本章小结 / 27第3章 主要技术准备 / 293.1 何为同步和异步 / 293.2 Handler消息处理机制 / 303.2.1 Handler概念分析 / 303.2.2 Handler特性 / 303.2.3 常用Handler消息处理机制讲解 / 313.2.4 Handler的作用 / 343.3 AIDL跨应用服务 / 353.3.1 AIDL概念分析 / 353.3.2 AIDL服务提供方 / 363.3.3 AIDL服务调用方 / 373.4 广播 / 383.4.1 Android 系统中的广播 / 383.4.2 Broadcast接收 / 383.4.3 Broadcast发送 / 393.5 本章小结 / 39第二部分 Telephony通话功能第4章 深入解析通话流程 / 424.1 通话相关主要源代码汇总及简要说明 / 424.2 电话主动呼叫流程分析 / 444.2.1 运行Android虚拟设备 / 444.2.2 拨号界面DialtactsActivity的onCreate方法 / 454.2.3 DialpadFragment拨号盘Tab表单 / 454.2.4 寻找拨号统一入口OutgoingCallBroadcaster / 474.2.5 CallController拨号placeCall方法 / 474.2.6 Phone帮助类PhoneUtils静态placeCall方法 / 484.2.7 通话大管家CallManager / 504.2.8 Phone对象的dial拨号方法 / 504.2.9 Call状态跟踪者GsmCallTracker / 514.2.10 RIL消息的出入口RIL.java / 524.2.11 启动通话主界面InCallScreen / 534.2.12 拨号流程总结 / 534.3 电话被动接收来电流程分析 / 554.3.1 Android虚拟设备模拟接收来电 / 564.3.2 RegistrantList消息处理机制 / 574.3.3 GsmCallTracker响应RIL的Call状态变化通知 / 604.3.4 RIL.java的getCurrentCalls方法 / 604.3.5 GsmCallTracker响应消息通知 / 614.3.6 handlePollCalls发出来电通知 / 614.3.7 GSMPhone的通知方法notifyNewRingingConnection / 624.3.8 CallManager响应来电消息通知 / 624.3.9 CallNotifier响应来电通知 / 634.3.10 InCallScreen展现来电界面 / 644.3.11 来电流程总结 / 654.4 通话关键流程 / 664.4.1 建立Android通话模型 / 674.4.2 AT命令发送流程 / 684.4.3 通话状态变化流程 / 694.4.4 本地主动挂断通话流程 / 704.4.5 远端断开通话连接流程 / 724.5 本章小结 / 73第5章 深入解析Telephony通话应用机制 / 745.1 Phone应用的关键代码解析 / 745.2 认识通话主界面InCallScreen / 755.2.1 InCallScreen中的主要方法 / 765.2.2 单例模式的Activity通话界面 / 765.2.3 Layout布局说明 / 775.3 通话主界面InCallScreen / 785.3.1 onCreate—运行Activity / 785.3.2 onNewIntent—单例InCallScreen加载入口 / 805.3.3 internalResolveIntent—进入InCallScreen处理Intent的唯一方法 / 815.3.4 onResume—显示InCallScreen通话界面 / 825.3.5 handleMessage—Handler消息响应方法 / 845.3.6 onSuppServiceFailed—显示通话服务失败提示信息 / 855.3.7 updateScreen—更新通话界面 / 865.3.8 onDisconnect—断开通话连接 / 885.3.9 handleOnscreenButtonClick—响应通话控制按钮点击事件 / 905.3.10 InCallScreen通话界面运行机制总结 / 915.4 通话信息展示CallCard / 925.4.1 两路通话布局View控件 / 925.4.2 updateState—更新CallCard / 935.4.3 displayMainCallStatus—显示/更新第一路通话信息 / 955.4.4 displayOnHoldCallStatus—显示/更新第二路通话信息 / 975.4.5 修改通话信息展示的思路及原则 / 985.5 通话控制InCallTouchUi / 995.5.1 View布局控件 / 995.5.2 updateState—更新InCallTouchUi / 1015.5.3 MultiWaveView—来电控制接听、拒接界面 / 1025.5.4 HeadSet—响应免提事件 / 1035.5.5 修改来电界面的思路及原则 / 1045.6 通话功能中必不可少的DTMF / 1055.6.1 什么是DTMF / 1055.6.2 DTMFTwelveKeyDialer的布局 / 1055.6.3 如何显示DTMF界面 / 1065.6.4 Tone音发送流程 / 1065.7 Phone应用的加载入口PhoneApp类 / 1085.7.1 PhoneApp类属性及方法 / 1085.7.2 onCreate—PhoneApp应用加载入口 / 1095.7.3 PowerManager—PhoneApp电源管理 / 1105.7.4 Sensor—PhoneApp感应器的应用 / 1125.7.5 MediaButtonBroadcastReceiver—接收耳机HOOK键广播事件 / 1155.7.6 PhoneAppBroadcastReceiver—接收Phone应用杂项广播事件 / 1165.8 Handler消息处理的幕后工作者CallNotifier / 1185.8.1 CallNotifier的本质 / 1185.8.2 Handler消息注册和响应机制 / 1195.8.3 onNewRingingConnection—接收到新来电的幕后处理 / 1195.8.4 onPhoneStateChanged—通话状态变化的幕后处理 / 1215.8.5 onDisconnect—通话连接断开的幕后处理 / 1225.9 本章小结 / 124第6章 手机通话功能框架层实现机制 / 1256.1 Telephony Frameworks层解析 / 1256.1.1 通话功能相关代码文件 / 1256.1.2 通话功能关键类 / 1266.1.3 Telephony通信能力模型 / 1276.2 GSMPhone对象详解 / 1286.2.1 GSMPhone类层次继承关系 / 1286.2.2 GSMPhone类代码结构解析 / 1296.2.3 PhoneFactory工厂方法实现类 / 1306.2.4 PhoneProxy代理模式实现类 / 1316.2.5 GSMPhone类的组合逻辑关系 / 1326.2.6 GSMPhone类的Handler消息处理机制 / 1336.2.7 GSMPhone类通话管理实现机制 / 1366.3 CallTracker运行机制 / 1376.3.1 GsmCallTracker类代码结构解析 / 1376.3.2 GsmCallTracker的Handler消息处理机制 / 1396.3.3 GsmCallTracker与RIL对象的交互机制 / 1426.4 以GsmCall为核心的通话管理模型 / 1456.4.1 GsmCall类代码结构解析 / 1466.4.2 GsmConnection类代码结构解析 / 1476.4.3 DriverCall与GsmCall、GsmConnection的关系 / 1496.5 GsmCallTracker类的 handlePollCalls方法处理逻辑 / 1536.5.1 初始化操作 / 1536.5.2 更新通话相关信息 / 1546.5.3 根据最新的通话状态发出通知 / 1586.5.4 更新手机状态 / 1586.6 GsmCallTracker通话连接断开的处理机制 / 1606.6.1 本地主动挂断通话的处理机制 / 1606.6.2 远端断开通话连接的处理机制 / 1626.7 Android虚拟设备上验证GSM制式手机的通话模型 / 1646.7.1 增加日志输出 / 1646.7.2 运行Android虚拟设备并分析日志 / 1666.8 通话大管家CallManager / 1686.8.1 CallManager的本质 / 1686.8.2 Handler消息注册及运行机制 / 1696.8.3 如何获取通话基本信息 / 1706.9 通话计时实例分析 / 1716.9.1 记录通话的开始时间 / 1716.9.2 记录通话的结束时间 / 1716.9.3 Phone应用计算通话时长 / 1716.10 Handler消息处理机制 / 1736.10.1 Handler消息的注册过程 / 1736.10.2 Handler消息的接收和响应过程 / 1746.11 实战—来电防火墙 / 1756.11.1 应用原理分析 / 1756.11.2 在onNewRingingConnection方法加入拦截请求 / 1766.12 本章小结 / 176第三部分 Telephony通信功能第7章 网络服务状态运行机制 / 1807.1 什么是ServiceState / 1807.2 初识ServiceState实体类 / 1807.2.1 ServiceState类的实质 / 1817.2.2 ServiceState类关键常量及属性 / 1817.2.3 ServiceState类关键方法 / 1827.3 ServiceStateTracker运行机制详解 / 1837.3.1 ServiceStateTracker抽象类为核心的类图 / 1847.3.2 ServiceStateTracker代码结构 / 1847.3.3 ServiceStateTracker的Handler消息处理机制 / 1867.3.4 ServiceStateTracker与RIL对象的交互机制 / 1897.4 handlePollStateResult方法处理逻辑 / 1927.4.1 RIL返回查询结果的异常判断和处理 / 1927.4.2 处理4个不同网络服务查询返回的结果 / 1927.4.3 用pollStateDone方法完成收尾工作 / 1957.5 ServiceState最佳实践 / 1977.5.1 获取运营商信息 / 1977.5.2 通知栏手机信号实时变化 / 1987.6 实战—飞行模式的实现 / 2007.6.1 飞行模式的设置入口 / 2007.6.2 Radio无线通信模块的开启或关闭 / 2027.7 本章小结 / 203第8章 Android手机上网实现机制 / 2048.1 Android网络整体结构 / 2048.2 什么是DataConnection / 2058.2.1 DataConnection类定义及子类 / 2058.2.2 DataConnection类关键属性 / 2068.2.3 DataConnection类的方法 / 2078.2.4 5个数据连接对象的状态转换 / 2078.3 StateMachine状态机 / 2088.3.1 State设计模式 / 2098.3.2 StateMachine核心类 / 2098.3.3 StateMachine运行机制 / 2108.3.4 DataConnection使用State模式的运行机制 / 2118.4 什么是APN / 2128.4.1 APN配置关键字段 / 2128.4.2 Android支持的APN类型 / 2138.4.3 如何在Android中新增APN配置 / 2138.5 开机自动建立default默认数据连接 / 2158.5.1 如何查看手机上网的基本参数配置 / 2158.5.2 初始化ApnContext / 2168.5.3 创建DataConnection数据连接 / 2198.5.4 激活DataConnection数据连接 / 2228.6 DataConnectionTracker运行机制 / 2268.6.1 初始化ApnContext操作 / 2278.6.2 开机建立default默认的数据连接 / 2288.6.3 关闭数据连接 / 2298.6.4 循环更新网络连接状态信息 / 2308.6.5 APN数据库配置信息变化的观察者 / 2318.7 获取Android手机上网数据包 / 2328.7.1 使用tcpdump工具抓取TCP/IP数据包 / 2328.7.2 使用Wireshark软件分析TCP/IP数据包 / 2328.8 MMS彩信数据连接的实现 / 2338.8.1 建立和关闭彩信数据连接 / 2338.8.2 如何支持多种类型网络连接 / 2348.9 实战—手机上网数据总开关的实现 / 2358.10 本章小结 / 235第9章 深入解析短信发送和接收流程 / 2379.1 MMS应用主要源代码汇总及简要说明 / 2379.2 主动发送短信流程分析 / 2389.2.1 进入短信会话列表界面 / 2389.2.2 短信编辑界面 / 2399.2.3 SmsMessageSender短信发送处理逻辑 / 2419.2.4 Telephony Frameworks层中的SmsManager类 / 2439.2.5 IccSmsInterfaceManager服务发送短信 / 2449.2.6 SMSDispatcher短信分发器 / 2459.2.7 主动发送短信流程总结 / 2469.3 短信发送状态相关处理机制 / 2489.3.1 如何判断短信是否成功发送到短信中心 / 2489.3.2 如何判断短信接收方已经成功收取短信 / 2509.4 短信接收流程分析 / 2529.4.1 短信接收的开始 / 2529.4.2 进入短信分发器SMSDispatcher / 2539.4.3 接收并处理新短信Broadcast广播 / 2549.4.4 短信接收流程总结 / 2549.5 彩信发送和接收关键流程 / 2559.5.1 彩信传输过程中的关键类 / 2559.5.2 TransactionService为核心的彩信传输机制 / 2579.5.3 Transaction对象执行彩信传输 / 2599.5.4 基于WAP PUSH的彩信接收与下载 / 2609.6 本章小结 / 261第四部分 深入解析Android RIL第10章 Android RIL框架结构及RILJ运行机制 / 26410.1 Android RIL关键处理流程 / 26410.1.1 Android RIL框架结构 / 26410.1.2 Android RIL的数据交互 / 26510.2 认识RILJ / 26510.2.1 RILJ核心类图 / 26510.2.2 RILJ关键属性 / 26610.2.3 RILJ关键方法 / 26710.2.4 RILJ运行机制 / 26810.3 认识RILRequest类 / 26910.3.1 RILRequest类的关键属性 / 26910.3.2 RILRequest类的方法 / 26910.4 解析RILJ发出RIL请求流程 / 27110.4.1 send方法发送Handler消息 / 27110.4.2 RILSender接收和处理Handler消息 / 27210.5 解析RILJ接收Response消息处理流程 / 27310.5.1 RILReceiver内部类运行机制 / 27310.5.2 Solicited Response消息处理方法processSolicited / 27610.5.3 UnSolicited Response消息处理方法processUnsolicited / 27910.6 本章小结 / 280第11章 RILC系统结构及LibRIL运行机制 / 28111.1 RILC主要代码目录结构 / 28111.2 解析RILC运行机制 / 28211.2.1 RILC启动过程 / 28311.2.2 RILC运行过程 / 28511.3 初识RILC中的运行环境LibRIL / 28511.3.1 LibRIL主要文件及作用 / 28511.3.2 重点结构体说明 / 28611.4 LibRIL运行环境加载过程 / 28811.4.1 开启ril_event事件监听入口RIL_startEventLoop / 28811.4.2 RIL_register函数引入三方RIL_RadioFunctions / 29011.5 运行状态中ril_event事件处理机制 / 29111.5.1 认识ril_event结构体 / 29111.5.2 RIL事件生命周期控制的处理函数 / 29211.5.3 ril_event_loop处理机制 / 29411.6 详解LibRIL运行机制 / 29611.6.1 RILJ与LibRIL建立Socket连接过程 / 29611.6.2 Solicited消息的交互流程和处理机制 / 29711.7 本章小结 / 302第12章 Reference-RIL运行框架 / 30312.1 Reference-RIL运行机制 / 30312.1.1 RIL_Init函数初始化Reference-RIL / 30312.1.2 onRequest接收LibRIL的请求调用 / 30412.1.3 UnSolicited消息处理逻辑 / 30612.2 AT命令 / 31012.2.1 如何新增AT命令 / 31012.2.2 Android Telephony常用AT命令 / 31012.3 Android RIL层运行框架和机制总结 / 31112.3.1 总结Solicited消息处理流程 / 31212.3.2 总结UnSolicited消息处理流程 / 31312.4 本章小结 / 314第五部分 系统服务第13章 Telephony提供的系统服务 / 31613.1 System Service系统服务类图 / 31613.2 详解PhoneInterfaceManager实现机制 / 31713.2.1 ITelephony.aidl接口定义 / 31813.2.2 PhoneInterfaceManager服务创建过程 / 31813.2.3 PhoneInterfaceManager服务使用实例分析 / 31813.3 详解TelephonyRegistry实现机制 / 31913.3.1 系统服务的创建入口 / 32013.3.2 TelephonyRegistry关键方法 / 32013.3.3 listen方法处理逻辑 / 32013.3.4 notifyCallState方法发出通话状态变化通知 / 32113.3.5 触发TelephonyRegistry发出通知机制 / 32213.3.6 TelephonyRegistry系统服务使用实例分析 / 32313.4 简述TelephonyManager实现机制 / 32413.5 本章小结 / 326