前 言
随着ICT技术的推广和发展,在三网融合、智慧的地球(物联网)等概念风行的形势下,手机终端技术的发展和进步可谓日新月异;Android经受住了市场的考验,并占据了较大的市场份额,从手机芯片厂家、手机生产厂家到各种应用开发公司、互联网公司等,逐步形成了以Android系统平台为核心的上下游产业链。正是由于Android源代码的开源,各大手机厂商才能通过深度定制Android系统平台,在降低研发成本的同时,快速推出具有自身特色的Android智能手机产品。因此,各大手机厂家在推出新版本Android系统平台手机上投入了较多的研发成本,其中不乏SamSung、Motorola等国际知名公司;国内如小米手机、联发科、展讯等也都有自己的Android研发团队。
目前国内市场上针对Android的书籍很多,但这些书籍中,绝大多数是基于Android SDK在应用层的开发进行讲解的。针对Android系统级的源代码分析的书籍,主要是邓凡平著的《深入理解Android:卷Ⅰ》和《深入理解Android:卷Ⅱ》,但深入理解Android Telephony的书籍国内目前还是空白。而Telephony基本通信功能是手机中的核心,在定制Android手机的过程中也不例外,手机离开了基本通信能力,如通话、短彩信、手机上网等功能,也就失去了它本身的意义。
在Android手机定制化的过程中,Telephony涉及的范围和内容也非常多,从应用层到框架层,再到RIL与Modem无线通信模块的交互,所有部分均有不同程度的定制和优化,因此,在Android手机平台定制化研发的过程中,需要对Android Telephony有全面而深入的理解。
本书以Android 4.0.3源代码为基础,全面、深入地解析了Android Telephony涉及的主要内容,其中包括Call通话、ServiceState接入网络服务状态、DataConnection手机上网数据连接以及SMS&MMS短信和彩信的应用等,并且详细解析了Android RIL的运行机制。
目 录
第一部分 基础篇
第1章 初识Android
1.1 智能手机的系统结构
1.2 Android系统架构
1.2.1 应用层
1.2.2 应用框架层
1.2.3 系统运行库层
1.2.4 核心层
1.3 Android Telephony框架结构
1.3.1 系统运行库层的HAL层
1.3.2 简析HAL结构
1.3.3 Android为什么引入HAL
1.3.4 Android中HAL的运行结构
1.4 本章小结
第2章 搭建Android源代码编译环境
2.1 Ubuntu Linux操作系统及工具安装
2.1.1 PC配置建议
2.1.2 Ubuntu安装光盘的制作
2.1.3 Ubuntu安装过程
2.1.4 Ubuntu系统工具包更新升级
2.1.5 Java运行环境JDK安装及配置
2.1.6 Android SDK的下载和配置
2.1.7 使用Android SDK启动虚拟设备
2.2 Android源代码下载及编译过程
2.2.1 工作目录设置
2.2.2 源代码下载
2.2.3 整体编译Android 源代码
2.2.4 单个模块按需编译
2.2.5 编译生成本地Android SDK
2.3 Android常用工具使用及相关技巧说明
2.3.1 使用本地编译成功的镜像文件启动Android模拟器
2.3.2 Android调试工具adb的使用方法
2.3.3 进入Android虚拟设备控制台模拟短信、来电等功能
2.4 Eclipse配置及使用
2.4.1 Android开发套件ADT下载及配置
2.4.2 建立Android源代码Java工程
2.4.3 格式化Android Java源代码
2.5 使用Source Insight方便阅读C/C++代码
2.5.1 安装Wine
2.5.2 安装Source Insight
2.5.3 配置Source Insight C/C++工程
2.6 本章小结
第3章 主要技术准备
3.1 何为同步和异步
3.2 Handler消息处理机制
3.2.1 Handler概念分析
3.2.2 Handler特性
3.2.3 常用Handler消息处理机制讲解
3.2.4 Handler的作用
3.3 AIDL跨应用服务
3.3.1 AIDL概念分析
3.3.2 AIDL服务提供方
3.3.3 AIDL服务调用方
3.4 广播
3.4.1 Android 系统中的广播
3.4.2 Broadcast接收
3.4.3 Broadcast发送
3.5 本章小结
第二部分 Telephony通话功能
第4章 深入解析通话流程
4.1 通话相关主要源代码汇总及简要说明
4.2 电话主动呼叫流程分析
4.2.1 运行Android虚拟设备
4.2.2 拨号界面DialtactsActivity的onCreate方法
4.2.3 DialpadFragment拨号盘Tab表单
4.2.4 寻找拨号统一入口OutgoingCallBroadcaster
4.2.5 CallController拨号placeCall方法
4.2.6 Phone帮助类PhoneUtils静态placeCall方法
4.2.7 通话大管家CallManager
4.2.8 Phone对象的dial拨号方法
4.2.9 Call状态跟踪者GsmCallTracker
4.2.10 RIL消息的出入口RIL.java
4.2.11 启动通话主界面InCallScreen
4.2.12 拨号流程总结
4.3 电话被动接收来电流程分析
4.3.1 Android虚拟设备模拟接收来电
4.3.2 RegistrantList消息处理机制
4.3.3 GsmCallTracker响应RIL的Call状态变化通知
4.3.4 RIL.java的getCurrentCalls方法
4.3.5 GsmCallTracker响应消息通知
4.3.6 handlePollCalls发出来电通知
4.3.7 GSMPhone的通知方法notifyNewRingingConnection
4.3.8 CallManager响应来电消息通知
4.3.9 CallNotifier响应来电通知
4.3.10 InCallScreen展现来电界面
4.3.11 来电流程总结
4.4 通话关键流程
4.4.1 建立Android通话模型
4.4.2 AT命令发送流程
4.4.3 通话状态变化流程
4.4.4 本地主动挂断通话流程
4.4.5 远端断开通话连接流程
4.5 本章小结