展开全部

主编推荐语

Android5.0系统全解析:新、全、细

内容简介

本书覆盖了Android系统中下层所有重要的模块,如多媒体,Webkit,通信模块等的实现等各个方面,本书有三个特点:一是新,全书基于最新的Android5.0的代码分析讲解;二是全,对Android的覆盖面比较广,5.0中增加的新功能,如ART等都有介绍。同时书基于一套源码分析讲解,很多模块前后能相互印证;三是细,除了对各个模块的功能进行详细的讲解说明外,对书中摘录的源码也做了详细的注释。

目录

  • 封面
  • 目录
  • 扉页
  • 版权
  • 推荐序
  • 前言
  • 第1章 建立Android系统开发环境
  • 1.1 安装操作系统
  • 1.1.1 安装方式的选择
  • 1.1.2 下载和安装Ubuntu
  • 1.1.3 使用Ubuntu遇到的问题
  • 1.2 安装开发包
  • 1.2.1 安装JDK1.6
  • 1.2.2 安装OpenJDK1.7
  • 1.2.3 安装编译需要的开发包
  • 1.3 安装一些有用的工具
  • 1.3.1 安装AndroidSDK
  • 1.3.2 安装AndroidStudio
  • 1.3.3 安装SourceInsight
  • 1.3.4 安装比较工具Meld
  • 1.4 下载源码
  • 1.4.1 GitandRepo简介
  • 1.4.2 源码版本历史
  • 1.4.3 下载Android源码
  • 1.4.4 下载Kernel源码
  • 第2章 Android的编译环境——Build系统
  • 2.1 AndroidBuild系统核心
  • 2.1.1 编译环境的建立
  • 2.1.2 Build相关的环境变量
  • 2.1.3 Build系统的层次关系
  • 2.1.4 分析main.mk文件
  • 2.1.5 Build系统的编译目标介绍
  • 2.1.6 分析config.mk文件
  • 2.1.7 分析product_config.mk文件
  • 2.1.8 Android5.0中的64位编译
  • 2.2 Android的产品配置文件
  • 2.2.1 分析hammerhead的配置文件
  • 2.2.2 编译类型eng、user和userdebug
  • 2.2.3 产品的Image文件
  • 2.2.4 如何加快编译速度
  • 2.2.5 如何编译Android的模拟器
  • 2.3 编译Android的模块
  • 2.3.1 模块编译变量简介
  • 2.3.2 常用模块定义实例
  • 2.3.3 预编译模块的目标定义
  • 2.3.4 常用“LOCAL_”变量
  • 2.4 Android中的签名
  • 2.4.1 Android应用签名方法
  • 2.4.2 Android系统签名介绍
  • 2.4.3 Android签名漏洞分析
  • 第3章 连接Android和Linu内核的桥梁——Android的Bionic
  • 3.1 Bionic简介
  • 3.1.1 Bionic的特性
  • 3.1.2 Bionic中的模块简介
  • 3.2 Bionic C库中的系统调用
  • 3.2.1 系统调用简介
  • 3.2.2 系统调用的实现方法
  • 3.3 Bionic中的内存管理函数
  • 3.3.1 系统调用brk和mmap
  • 3.3.2 内存分配器——dlmalloc简介
  • 3.3.3 dlmalloc函数用法指南
  • 3.4 管道
  • 3.4.1 匿名管道PIPE和命名管道FIFO
  • 3.4.2 匿名管道的使用方法
  • 3.5 Bionic中的线程管理函数
  • 3.5.1 Bionic线程函数的特性
  • 3.5.2 创建线程和线程的属性
  • 3.5.3 退出线程的方法
  • 3.5.4 线程本地存储TLS
  • 3.5.5 线程的互斥量(Mutex)函数
  • 3.5.6 线程的条件量(Condition)函数
  • 3.6 Futex同步机制
  • 3.6.1 Futex的系统调用
  • 3.6.2 Futex的用户态操作
  • 3.6.3 Mutex类使用Futex实现同步
  • 3.7 Android的Log模块
  • 3.7.1 Android Log系统的架构
  • 3.7.2 Log系统的接口和用法
  • 3.7.3 Log系统的实现分析
  • 3.8 可执行文件格式分析
  • 3.8.1 ELF格式简介
  • 3.8.2 ELF文件头格式
  • 3.8.3 程序头部表
  • 3.8.4 与重定位相关的“节区”的信息——DYNAMIC段
  • 3.8.5 函数的重定位过程
  • 3.9 Bionic中的Linker模块
  • 3.9.1 可执行程序的装载
  • 3.9.2 可执行程序的初始化
  • 3.9.3 Linker装载动态库
  • 3.10 调试器——Ptrace和HookAPI
  • 3.10.1 ptrace函数简介
  • 3.10.2 Hook API的原理
  • 3.10.3 利用ptrace实现Hook API
  • 第4章 进程间通信——Android的Binder
  • 4.1 Binder简介
  • 4.1.1 Binder对象定义
  • 4.1.2 Binder的架构
  • 4.1.3 组件Service和匿名Binder服务
  • 4.1.4 Binder的层次
  • 4.2 如何使用Binder
  • 4.2.1 使用Binder服务
  • 4.2.2 Binder的混合调用
  • 4.2.3 用Jave开发Binder服务
  • 4.2.4 用C++开发Binder服务
  • 4.3 Binder应用层的核心类
  • 4.3.1 IInterface中的两个宏
  • 4.3.2 Binder核心类的关系
  • 4.3.3 函数asInterface的奥秘
  • 4.3.4 Binder的“死亡通知”
  • 4.3.5 Jave层的Binder类
  • 4.4 Binder的实现原理
  • 4.4.1 Binder的线程模型
  • 4.4.2 Binder对象的传递
  • 4.4.3 分析IPCThreadState类
  • 4.5 Binder驱动
  • 4.5.1 应用层和驱动的消息协议
  • 4.5.2 Binder驱动分析
  • 4.5.3 Binder的内存共享机制
  • 4.5.4 驱动的ioctl操作
  • 4.5.5 Binder调用过程
  • 4.5.6 处理传递的Binder对象
  • 4.6 解析名称的模块——ServiceManager的作用
  • 4.6.1 ServiceManager的架构
  • 4.6.2 ServiceManger提供的服务
  • 4.7 匿名共享内存ashmem
  • 4.7.1 ashmem的作用和用法
  • 4.7.2 ashmem驱动的实现原理
  • 4.7.3 ashemem驱动的代码分析
  • 4.7.4 进程间传递文件描述符
  • 第5章 连接Java和C/C++层的关键——Android的JNI
  • 5.1 JNI的作用
  • 5.2 JNI用法介绍
  • 5.2.1 从Java到C/C++
  • 5.2.2 从C/C++到Java的调用
  • 5.3 JNI环境
  • 5.3.1 结构体JNIEnv
  • 5.3.2 JNIEnv的创建和初始化
  • 5.3.3 JNI中的异常处理
  • 5.3.4 JNI中的引用
  • 5.3.5 指明错误位置——“CheckJNI”的作用
  • 5.4 ART带来的JNI变化
  • 5.4.1 垃圾回收的影响
  • 5.4.2 错误处理的变化
  • 5.4.3 堆栈可能引发的问题
  • 第6章 Android的同步和消息机制
  • 6.1 原子操作
  • 6.1.1 Android的原子操作函数
  • 6.1.2 原子操作的实现原理
  • 6.1.3 内存屏障和编译屏障
  • 6.2 Androidnative层的同步方法
  • 6.2.1 互斥体Mutex和自动锁Autolock
  • 6.2.2 解决线程同步——条件类Condition
  • 6.3 Android Java层的同步机制
  • 6.3.1 同步关键字synchronized
  • 6.3.2 Object类在同步中的作用
  • 6.4 Android的消息机制
  • 6.4.1 消息模型
  • 6.4.2 理解Looper类
  • 6.4.3 理解Handler类
  • 6.4.4 消息的同步——Message类的setAsynchronous()方法
  • 6.4.5 分析MessageQueue类
  • 6.5 进程间的消息传递
  • 6.5.1 理解Messenger类
  • 6.5.2 建立通信通道——AsyncChannel类的作用
  • 第7章 第一个用户进程——Android的Init进程
  • 7.1 Init进程的初始化过程
  • 7.1.1 main函数的流程
  • 7.1.2 启动Service进程
  • 7.2 解析启动脚本init.rc
  • 7.2.1 init.rc文件格式介绍
  • 7.2.2 Init脚本的关键字定义
  • 7.2.3 脚本文件的解析过程
  • 7.2.4 Init中启动的守护进程
  • 7.3 Init进程对信号的处理
  • 7.3.1 “僵尸”(Zombie)进程介绍
  • 7.3.2 初始化SIGCHLD信号
  • 7.3.3 响应子进程死亡事件
  • 7.4 属性系统
  • 7.4.1 属性系统介绍
  • 7.4.2 创建属性系统的共享空间
  • 7.4.3 初始化属性系统的值
  • 7.4.4 用户进程初始化属性系统
  • 7.4.5 响应修改属性的请求
  • 7.5 守护进程ueventd介绍
  • 7.5.1 ueventd的初始化
  • 7.5.2 内核和用户空间交换信息——NetlinkSocket简介
  • 7.5.3 创建设备节点文件
  • 7.6 “看门狗”——watchdogd介绍
  • 第8章 支撑Android世界的一极——Zygote进程
  • 8.1 Zygote简介
  • 8.2 Zygote进程的初始化
  • 8.2.1 app_porcess的main函数
  • 8.2.2 启动虚拟机——AndroidRuntime类
  • 8.2.3 启动虚拟机
  • 8.2.4 初始化工作——ZygoteInit类
  • 8.3 Zygote启动应用程序
  • 8.3.1 注册Zygote的socket
  • 8.3.2 请求启动应用
  • 8.3.3 处理启动应用的请求
  • 8.3.4 Fork应用进程
  • 8.3.5 子进程的初始化
  • 8.4 预加载系统类和资源
  • 8.4.1 预加载Java类
  • 8.4.2 preload-classes文件
  • 8.4.3 预加载系统资源
  • 8.4.4 预加载共享库
  • 第9章 精确地控制资源的使用——Android的资源管理
  • 9.1 资源系统简介
  • 9.1.1 缺省资源和候选资源
  • 9.1.2 常用术语和单位
  • 9.1.3 资源类型
  • 9.1.4 系统资源定义
  • 9.2 Android资源的制作
  • 9.2.1 资源的存储目录
  • 9.2.2 候选资源目录的命名规则
  • 9.2.3 资源匹配算法
  • 9.3 Android资源的使用
  • 9.3.1 常规的资源使用方法
  • 9.3.2 使用公开和非公开资源
  • 9.3.3 图片资源的缩放问题
  • 9.4 Android资源管理的实现原理
  • 9.4.1 Resources类的作用
  • 9.4.2 AssetManager类的作用
  • 9.4.3 理解AssetManager的设计
  • 9.5 全新的设计语言——Android5.0的MaterialDesign
  • 9.5.1 MaterialDesign的设计原则
  • 9.5.2 Material主题
  • 9.5.3 View的阴影
  • 第10章 Android系统的核心之一——SystemServer进程
  • 10.1 SystemServer的创建过程
  • 10.1.1 创建SystemServer进程
  • 10.1.2 SystemServer初始化
  • 10.1.3 SystemServer的服务大全
  • 10.2 SystemServer中的Watchdog
  • 10.2.1 启动Watchdog
  • 10.2.2 Watchdog监控的服务和线程
  • 10.2.3 Watchdog监控的原理
  • 第11章 APK包的安装、卸载和优化——Android的应用管理
  • 11.1 了解PackageManagerService
  • 11.1.1 理解Packages.xml和Settings类
  • 11.1.2 服务的初始化过程
  • 11.1.3 处理permission文件
  • 11.1.4 扫描应用目录的过程
  • 11.1.5 解析APK文件
  • 11.2 安装应用
  • 11.2.1 管理“安装会话”——PackageManagerInstallerService
  • 11.2.2 应用安装第一阶段:复制文件
  • 11.2.3 应用安装第二阶段:装载应用
  • 11.3 系统运行时的应用管理
  • 11.3.1 卸载应用
  • 11.3.2 通过Intent查询组件
  • 11.4 守护进程installd
  • 11.4.1 installd的初始化
  • 11.4.2 变更installd进程的权限
  • 11.4.3 installd中支持的命令
  • 11.4.4 分析install(安装)命令
  • 11.4.5 分析patchoat(优化)命令
  • 11.4.6 分析movefiles(移动)命令
  • 第12章 Android的组件管理
  • 12.1 应用进程的组成
  • 12.1.1 ApplicationThread的作用
  • 12.1.2 理解应用的Context
  • 12.1.3 Application类
  • 12.2 Android框架的核心——ActivityManagerService服务
  • 12.2.1 ActivityManagerService的初始化
  • 12.2.2 理解setSystemProcess()方法
  • 12.2.3 理解systemReady()方法
  • 12.3 Process管理
  • 12.3.1 如何启动进程
  • 12.3.2 调整进程的位置
  • 12.3.3 ProcessList的常量
  • 12.3.4 调整进程的oom_adj值
  • 12.4 Activity管理
  • 12.4.1 Activity的生命周期
  • 12.4.2 理解Intent
  • 12.4.3 Task和LauncherMode
  • 12.5 应用的启动过程
  • 12.5.1 启动Activity
  • 12.5.2 resumeTopActivitiesLocked方法
  • 12.5.3 ActivityThread的main方法
  • 12.5.4 AMS的attachApplication方法
  • 12.5.5 应用的handleBindApplication方法
  • 12.6 Service管理
  • 12.6.1 Service的生命周期
  • 12.6.2 理解Service的管理类
  • 12.6.3 Service的启动过程
  • 12.7 提供数据的访问——ContentProvider管理
  • 12.7.1 理解ContentProvider
  • 12.7.2 获取ContentProvider
  • 12.7.3 应用中安装ContentProvider
  • 12.7.4 发布ContentProvider
  • 12.8 广播——BroadcastReceiver管理
  • 12.8.1 理解BroadcastReceiver
  • 12.8.2 广播的种类
  • 12.8.3 广播的数据结构
  • 12.8.4 广播的注册过程
  • 12.8.5 广播的发送过程
  • 第13章 Android的多用户模式
  • 13.1 管理用户的系统服务——UserManagerService服务
  • 13.1.1 初始化
  • 13.1.2 用户的UserInfo定义
  • 13.1.3 用户限制(Restriction)
  • 13.1.4 添加用户
  • 13.1.5 删除用户
  • 13.1.6 Guest用户
  • 13.2 PackageManagerService和多用户
  • 13.2.1 创建用户的应用数据
  • 13.2.2 删除用户的应用数据
  • 13.3 ActivityManagerServier和多用户
  • 13.3.1 用户的状态
  • 13.3.2 切换当前用户
  • 13.3.3 停止用户运行
  • 第14章 Android的图形显示系统
  • 14.1 画布——理解Surface
  • 14.1.1 应用中Surface的创建过程
  • 14.1.2 WMS中Surface的创建过程
  • 14.1.3 单实例模式——ComposerService的作用
  • 14.1.4 SurfaceFlinger中创建Surface
  • 14.1.5 管理图像缓冲区
  • 14.1.6 创建GraphicBuffer对象
  • 14.2 图像显示原理
  • 14.2.1 ProjectBuffer简介
  • 14.2.2 VSync信号的生成
  • 14.2.3 Framebuffer的工作原理
  • 14.2.4 分配图像缓冲区的内存
  • 14.3 SurfaceFlinger服务
  • 14.3.1 SurfaceFlinger的启动过程
  • 14.3.2 消息和事件分发——MessageQueue和EventThread
  • 14.3.3 显示设备——理解DisplayDevice类
  • 14.3.4 VSync信号的分发过程
  • 14.4 图像的输出过程
  • 14.4.1 图像的输出过程
  • 14.4.2 理解handleTransaction函数
  • 14.4.3 理解handlePageFlip函数
  • 14.4.4 理解rebuildLayerStacks函数
  • 14.4.5 更新对象中的图层——理解setUpHWComposer函数
  • 14.4.6 合成所有层的图像——理解doComposition函数
  • 14.4.7 理解postFramebuffer函数
  • 14.5 总结
  • 第15章 Android的窗口系统
  • 15.1 应用进程和WMS的联系
  • 15.1.1 应用中的Window对象
  • 15.1.2 应用中的WindowManager类
  • 15.1.3 建立应用和WMS的联系
  • 15.1.4 WMS中建立和应用的联系
  • 15.1.5 理解DecorView
  • 15.2 WindowManagerService服务
  • 15.2.1 PhoneWindowManager对象
  • 15.2.2 WindowToken对象
  • 15.2.3 窗口类型定义
  • 15.2.4 新增窗口的过程
  • 15.2.5 确定窗口的Z轴位置
  • 15.3 确定窗口尺寸
  • 15.3.1 Overscan区域
  • 15.3.2 表示窗口尺寸的数据结构
  • 15.3.3 计算窗口的尺寸
  • 15.4 窗口动画管理
  • 15.4.1 接收VSync信号
  • 15.4.2 动画的显示过程
  • 15.4.3 窗口的动画对象——WindowStateAnimator
  • 15.4.4 生成动画并显示
  • 15.5 总结
  • 第16章 Android的输入管理
  • 16.1 管理各种输入的服务——InputManagerService
  • 16.1.1 服务的启动过程
  • 16.1.2 把消息统一格式——EventHub的作用
  • 16.1.3 读取RawEvent
  • 16.1.4 处理RawEvent
  • 16.1.5 分发输入消息
  • 16.2 应用进程处理Input消息
  • 16.2.1 理解InputChannel
  • 16.2.2 接收Input消息
  • 16.2.3 理解InputStage
  • 16.2.4 流水线处理Input消息
  • 16.3 总结
  • 第17章 Android的电源管理
  • 17.1 电源管理服务——PowerManagerService
  • 17.1.1 初始化过程
  • 17.1.2 系统准备工作——SystemReady方法
  • 17.1.3 报告用户活动——userActivity接口
  • 17.1.4 强制系统进入休眠模式——gotoSleep接口
  • 17.2 控制系统休眠的机制
  • 17.2.1 PMS中WakeLock相关接口
  • 17.2.2 WakeLock的native层实现
  • 17.2.3 理解updatePowerStateLocked方法
  • 17.2.4 管理显示设备
  • 17.3 电池管理服务
  • 17.3.1 BatteryService类的作用
  • 17.3.2 Healthd守护进程
  • 17.3.3 读取电池的各种参数——BatteryMonitor类
  • 第18章 Android的存储系统
  • 18.1 管理存储设备——Vold守护进程
  • 18.1.1 Vold的main函数
  • 18.1.2 监听驱动发出的消息——Vold的NetlinkManager对象
  • 18.1.3 处理block类型的uevent
  • 18.1.4 处理MountService的命令
  • 18.1.5 VolumeManager的作用——创建实例对象
  • 18.2 对存储设备操作——MountService服务
  • 18.2.1 MountService的启动过程
  • 18.2.2 进行Socket通信——NativeDaemonConnector
  • 18.2.3 OBB文件系统
  • 18.3 其他存储相关的服务
  • 18.3.1 监视存储设备大小——DeviceStorageMonitorService
  • 18.3.2 打印系统分区信息——DiskStatsService
  • 第19章 Android的网络管理框架
  • 19.1 管理各种网络设备——Netd守护进程
  • 19.1.1 Netd的架构
  • 19.1.2 处理net类型的uevent
  • 19.1.3 处理NMS的命令
  • 19.1.4 DNS服务代理
  • 19.1.5 MDnsSdListener的作用——与守护进程进行交互
  • 19.2 网络管理的中心——ConnectivityService服务
  • 19.2.1 初始化过程
  • 19.2.2 网络连接类型
  • 19.2.3 NetworkStateTracker对象的作用——获得网络连接信息
  • 19.3 完成对网络物理接口操作——NetworkManagementService服务
  • 19.4 总结
  • 第20章 Android的音频系统
  • 20.1 音频系统简介
  • 20.1.1 Linux的音频架构
  • 20.1.2 手机中的音频设备
  • 20.1.3 Audio系统的架构
  • 20.2 AudioPolicyService服务——输入输出设备的状态
  • 20.2.1 服务的创建过程
  • 20.2.2 管理音频路由策略
  • 20.2.3 管理输入输出设备
  • 20.3 音频的核心——AudioFlinger服务
  • 20.3.1 AudioFlinger的创建过程
  • 20.3.2 AudioFlinger中的线程
  • 20.3.3 MixerThread线程
  • 20.3.4 打开物理设备——OpenOutput函数
  • 20.4 一次完整的播放过程
  • 20.4.1 创建AudioTrack对象
  • 20.4.2 在native层的AudioTrack
  • 20.4.3 开始播放
  • 20.4.4 传递音频数据
  • 20.4.5 AudioFlinger的播放线程
  • 第21章 让应用更安全——Android的SELinux模块
  • 21.1 安全系统——SELinux简介
  • 21.1.1 安全机制——DAC和MAC
  • 21.1.2 安全模块SELinux的架构
  • 21.1.3 安全上下文
  • 21.1.4 域的转移
  • 21.1.5 常用命令
  • 21.2 安全增强型——SEAndroid简介
  • 21.2.1 SEAndroid的组成
  • 21.2.2 理解各种策略文件
  • 21.3 Android如何使用SELinux
  • 21.3.1 Init进程设置SELinux的Policy
  • 21.3.2 Init进程初始化安全上下文
  • 21.3.3 设置守护进程的安全上下文
  • 21.3.4 设置应用进程的安全上下文
  • 21.4 总结
  • 第22章 Dalvik和ART虚拟机
  • 22.1 Dalvik虚拟机简介
  • 22.1.1 Dalvik虚拟机的特点
  • 22.1.2 即时编译JIT
  • 22.2 Dalvik的启动和初始化
  • 22.2.1 启动的流程分析
  • 22.2.2 重要的全局变量——初始化gDvm
  • 22.3 Dalvik字节码的执行过程
  • 22.3.1 执行流程
  • 22.3.2 代码分析
  • 22.4 Dalvik的内存管理机制
  • 22.4.1 堆的初始化过程
  • 22.4.2 Dalvik内存分配机制
  • 22.4.3 软引用、弱引用和虚引用
  • 22.4.4 Dalvik的内存回收机制
  • 22.5 ART模式简介
  • 22.5.1 两种模式的区别
  • 22.5.2 ART的初始化
  • 22.5.3 ART开始运行
  • 第23章 系统升级模块——Android的Recovery模块
  • 23.1 Recovery模块的执行
  • 23.1.1 Recovery模块的启动
  • 23.1.2 如何传递启动参数
  • 23.1.3 执行菜单命令
  • 23.2 Recovery的升级过程
  • 23.2.1 sideload方式安装
  • 23.2.2 升级的入口函数
  • 23.3 update-binary模块
  • 23.3.1 update-binary的执行流程
  • 23.3.2 update-script的语法规则
  • 第24章 Android的调试方法
  • 24.1 获取和分析系统Log
  • 24.1.1 Logcat使用说明
  • 24.1.2 如何分析AndroidLog
  • 24.1.3 如何分析ANR
  • 24.2 内存泄露的分析方法
  • 24.2.1 分析内存使用情况——DDMS的AllocationTracker
  • 24.2.2 DDMS的DumpHeap工具
  • 24.2.3 使用MAT分析内存泄露
  • 24.2.4 使用Valgrind分析内存泄露
  • 24.3 Android的自动化测试
  • 24.3.1 Monkey
  • 24.3.2 让用户开发控制程序——Monkeyrunner
  • 24.3.3 UI测试工具——uiAutomator工具
  • 参考文献
展开全部

评分及书评

评分不足
1个评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。