计算机
类型
8.6
豆瓣评分
可以朗读
语音朗读
1352千字
字数
2015-04-01
发行日期
展开全部
主编推荐语
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工具
- 参考文献
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。