描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787115384560
产品特色
编辑推荐
基于**的Android 5.0版本分析
随书赠送“极客学院”2个月全部课程免费VIP学习卡(获取方式见本书封底)
小米电视系统软件部总监、原Motorola软件总监、德信无线软件部经理等专家鼎力推荐
全面细致讲解了系统调用、内存管理、管道、线程管理、同步机制、Log模块、Binder驱动、同步和消息机制、Init进程、Zygote进程、资源管理、应用管理、组件管理、管理进程、图形显示系统、窗口系统、输入管理系统、电源管理、存储系统、网络系统、音频系统、SELinux模块、**ART虚拟机、垃圾回收、Recovery模块、内存泄露等核心模块在Android系统中的原理。
书中尽可能详细地给出了主要模块的架构、原理和主干实现,很多模块前后能相互印证用以帮助读者学习,希望通过本书帮助读者快速理解内核的设计思想、获得对Android系统进行二次开发的能力。
随书赠送“极客学院”2个月全部课程免费VIP学习卡(获取方式见本书封底)
小米电视系统软件部总监、原Motorola软件总监、德信无线软件部经理等专家鼎力推荐
全面细致讲解了系统调用、内存管理、管道、线程管理、同步机制、Log模块、Binder驱动、同步和消息机制、Init进程、Zygote进程、资源管理、应用管理、组件管理、管理进程、图形显示系统、窗口系统、输入管理系统、电源管理、存储系统、网络系统、音频系统、SELinux模块、**ART虚拟机、垃圾回收、Recovery模块、内存泄露等核心模块在Android系统中的原理。
书中尽可能详细地给出了主要模块的架构、原理和主干实现,很多模块前后能相互印证用以帮助读者学习,希望通过本书帮助读者快速理解内核的设计思想、获得对Android系统进行二次开发的能力。
内容简介
《深入解析Android 5.0系统》详细剖析了*Android 5.0 系统主要框架的原理和具体实现。本书共24章,覆盖了Android 5.0 系统中、下层重要的模块,对于每个模块都详细介绍了它们的架构、原理及代码实现等各个方面,尽量让读者知其然,又知其所以然,达到学以致用的目的。主要内容为:
Android Build系统核心、Android的Bionic、系统调用的实现方法、Android的Binder、Binder应用层的核心类、Android 的JNI、Android的同步和消息机制、进程间的消息传递、Android的Init进程、Android的Zygote进程、Android的资源管理、Android的SystemServer进程、Android的应用管理、Android的组件管理、Android的多用户模式、Android的图形显示系统、Android的窗口系统、Android 的输入管理、Android的电源管理、Android的存储系统、Android的网络管理框架、Android的音频系统、Android的SELinux模块、Dalvik和ART虚拟机、Android的Recovery模块、Android的调试方法、内存泄露的分析、Android的自动化测试等系统的核心知识。
在书中尽可能详细地给出了代码的注释、各种属性和常量的解释,以及各种系统中使用的文件格式的介绍,希望读者能通过本书,获得对Android 5.0系统进行二次开发的能力,本书是进行系统开发人员的案头书。
《深入解析Android 5.0系统》面向的读者主要是进行系统开发的工程师,包括应用开发工程师、ROM开发工程师和各种使用Android作为开发平台的TV和可穿戴式设备(Wear)的开发工程师。本书也可以作为大专院校相关专业师生的学习用书及培训学校教材。
Android Build系统核心、Android的Bionic、系统调用的实现方法、Android的Binder、Binder应用层的核心类、Android 的JNI、Android的同步和消息机制、进程间的消息传递、Android的Init进程、Android的Zygote进程、Android的资源管理、Android的SystemServer进程、Android的应用管理、Android的组件管理、Android的多用户模式、Android的图形显示系统、Android的窗口系统、Android 的输入管理、Android的电源管理、Android的存储系统、Android的网络管理框架、Android的音频系统、Android的SELinux模块、Dalvik和ART虚拟机、Android的Recovery模块、Android的调试方法、内存泄露的分析、Android的自动化测试等系统的核心知识。
在书中尽可能详细地给出了代码的注释、各种属性和常量的解释,以及各种系统中使用的文件格式的介绍,希望读者能通过本书,获得对Android 5.0系统进行二次开发的能力,本书是进行系统开发人员的案头书。
《深入解析Android 5.0系统》面向的读者主要是进行系统开发的工程师,包括应用开发工程师、ROM开发工程师和各种使用Android作为开发平台的TV和可穿戴式设备(Wear)的开发工程师。本书也可以作为大专院校相关专业师生的学习用书及培训学校教材。
目 录
第1章 建立Android系统开发环境
1.1 安装操作系统
1.1.1 安装方式的选择
1.1.2 下载和安装Ubuntu
1.1.3 使用Ubuntu遇到的问题
1.2 安装开发包
1.2.1 安装JDK 1.6
1.2.2 安装OpenJDK 1.7
1.2.3 安装编译需要的开发包
1.3 安装一些有用的工具
1.3.1 安装Android SDK
1.3.2 安装Android Studio
1.3.3 安装Source Insight
1.3.4 安装比较工具Meld
1.4 下载源码
1.4.1 Git and Repo简介
1.4.2 源码版本历史
1.4.3 下载Android源码
1.4.4 下载Kernel源码
第2章 Android的编译环境——
Build系统
2.1 Android Build系统核心
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 Android 5.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和Hook API
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 Android native层的同步方法
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函数的流程
……
1.1 安装操作系统
1.1.1 安装方式的选择
1.1.2 下载和安装Ubuntu
1.1.3 使用Ubuntu遇到的问题
1.2 安装开发包
1.2.1 安装JDK 1.6
1.2.2 安装OpenJDK 1.7
1.2.3 安装编译需要的开发包
1.3 安装一些有用的工具
1.3.1 安装Android SDK
1.3.2 安装Android Studio
1.3.3 安装Source Insight
1.3.4 安装比较工具Meld
1.4 下载源码
1.4.1 Git and Repo简介
1.4.2 源码版本历史
1.4.3 下载Android源码
1.4.4 下载Kernel源码
第2章 Android的编译环境——
Build系统
2.1 Android Build系统核心
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 Android 5.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和Hook API
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 Android native层的同步方法
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函数的流程
……
媒体评论
这本书介绍Android系统的翔实和认真程度可能在市面上无出其右。从JNI/Boinic到Loop/Init,从SystemServer到Provider,从包管理到图形系统,从窗口系统到输入管理,从电源管理到睡眠唤醒机制,从网络管理到音视频系统,甚至从Vold到Recovery,从虚拟机到自动化测试,本书都有详细解释和说明。作为一个工作十多年的资深工程师,作为一个从Android 1.0版本开始接触Android系统的工程师,作为一个量产过多款产品的Android一线架构师,我想没有这样的经历是很难将这本书写得如此详尽。希望读者可以从中得到有益的启发,开启自己完美的Android开发之旅!
—小米电视系统软件部总监,茹忆
这是一本有6年安卓系统开发经验的、中国*Android系统工程师的心血之作!
这是一本可以推荐给任何从事Android系统开发或应用开发工程师看的书!
—原Motorola软件总监,播思通讯CTO,饶宏
一本非常优秀的、介绍Android内部机制的书,详细地分析了Android系统的大部分模块,值得每一个希望深入学习Android系统的工程师拥有。
——德信无线软件部经理 ,陈行星
—小米电视系统软件部总监,茹忆
这是一本有6年安卓系统开发经验的、中国*Android系统工程师的心血之作!
这是一本可以推荐给任何从事Android系统开发或应用开发工程师看的书!
—原Motorola软件总监,播思通讯CTO,饶宏
一本非常优秀的、介绍Android内部机制的书,详细地分析了Android系统的大部分模块,值得每一个希望深入学习Android系统的工程师拥有。
——德信无线软件部经理 ,陈行星
书摘插画
评论
还没有评论。