万本电子书0元读

万本电子书0元读

顶部广告

深入解析Android 5.0系统电子书

基于**的Android 5.0版本分析   随书赠送“极客学院”2个月全部课程免费VIP学习卡(获取方式见本书封底)   小米电视系统软件部总监、原Motorola软件总监、德信无线软件部经理等专家鼎力推荐   全面细致讲解了系统调用、内存管理、管道、线程管理、同步机制、Log模块、Binder驱动、同步和消息机制、Init程、Zygote程、资源管理、应用管理、组件管理、管理程、图形显示系统、窗口系统、输管理系统、电源管理、存储系统、网络系统、音频系统、SELinux模块、**ART虚拟机、垃圾回收、Recovery模块、内存泄露等核心模块在Android系统中的原理。

售       价:¥

纸质售价:¥68.30购买纸书

142人正在读 | 3人评论 6.2

作       者:刘超

出  版  社:人民邮电出版社

出版时间:2015-04-01

字       数:106.4万

所属分类: 科技 > 计算机/网络 > 软件系统

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(2条)
  • 读书简介
  • 目录
  • 累计评论(2条)
《深解析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)的发工程师。本书也可以作为大专院校相关专业师生的学习用书及培训学校教材。<br/>【推荐语】<br/>基于**的Android 5.0版本分析 随书赠送“极客学院”2个月全部课程免费VIP学习卡(获取方式见本书封底) 小米电视系统软件部总监、原Motorola软件总监、德信无线软件部经理等专家鼎力推荐 全面细致讲解了系统调用、内存管理、管道、线程管理、同步机制、Log模块、Binder驱动、同步和消息机制、Init程、Zygote程、资源管理、应用管理、组件管理、管理程、图形显示系统、窗口系统、输管理系统、电源管理、存储系统、网络系统、音频系统、SELinux模块、**ART虚拟机、垃圾回收、Recovery模块、内存泄露等核心模块在Android系统中的原理。 书中尽可能详细地给出了主要模块的架构、原理和主干实现,很多模块前后能相互印证用以帮助读者学习,希望通过本书帮助读者快速理解内核的设计思想、获得对Android系统行二次发的能力。<br/>【作者】<br/>刘超,资深Android专家,系统架构师。曾任职于四通利方,Motorola,小米TV等多家著名公司。国内早的Android系统发者之一,研究Android内核多年。主持研发过天语W606,酷派W711,华为T8301等多款Android手机。<br/>
目录展开

推荐序

前言

第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工具

参考文献

累计评论(2条) 3个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部