《Android内核设计思想》

《Android内核设计思想》

立即阅读
手机扫码
  • 微信扫一扫

    关注微信公众号

编辑推荐

  ·基于AndroidSDK新版本

  ·全面剖析了进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统等核心知识在Android中的实现原理Android安全机制虚拟内存优化性能优化

  ·通过大量图片与实例来引导读者学习,以求尽量在源码分析外,为读者提供更易于理解的思维路径

  ·由浅入深,由总体框架再到细节实现,让读者尽快了解Android内核的设计思想

内容简介

全书从操作系统的基础知识入手,全面剖析进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统、虚拟机等核心技术在Android中的实现原理。书中讲述的知识点大部分来源于工程项目研发,因而具有较强的实用性,希望可以让读者“知其然,更知其所以然”。本书分为编译篇、系统原理篇、应用原理篇、系统工具篇,共4篇25章,基本涵盖了参与Android开发所需具备的知识,并通过大量图片与实例来引导读者学习,以求尽量在源码分析外为读者提供更易于理解的思维方式。

本书既适合Android系统工程师,也适合于应用开发工程师来阅读,从而提升Android开发能力。读者可以在本书潜移默化的学习过程中更深刻地理解Android系统,并将所学知识自然地应用到实际开发难题的解决中。

作者简介

林学森,曾于多家跨国企业担任研发和管理工作,并已在国内外会议、杂志上发表多篇文章,获得多个发明专利。现为某世界500强科技公司高级专家、资深架构师。

章节目录

版权信息

内容提要

第1版前言

第2版前言

第1篇 Android编译篇

第1章 Android系统简介

1.1 Android系统发展历程

1.2 Android系统特点

1.3 Android系统框架

第2章 Android源码下载及编译

2.1 Android源码下载指南

2.1.1 基于Repo和Git的版本管理

2.1.2 Android源码下载流程

2.2 原生Android系统编译指南

2.2.1 建立编译环境

2.2.2 编译流程

2.3 定制产品的编译与烧录

2.3.1 定制新产品

2.3.2 Linux内核编译

2.3.3 烧录/升级系统

2.4 Android Multilib Build

2.5 Android系统映像文件

2.5.1 boot.img

2.5.2 ramdisk.img

2.5.3 system.img

2.5.4 Verified Boot

2.6 ODEX流程

2.7 OTA系统升级

2.7.1 生成升级包

2.7.2 获取升级包

2.7.3 OTA升级——Recovery模式

2.8 Android反编译

2.9 NDK Build

2.10 第三方ROM的移植

第3章 Android编译系统

3.1 Makefile入门

3.2 Android编译系统

3.2.1 Makefile依赖树的概念

3.2.2 Android编译系统抽象模型

3.2.3 树根节点droid

3.2.4 main.mk解析

3.2.5 droidcore节点

3.2.6 dist_files

3.2.7 Android.mk的编写规则

3.3 Jack Toolchain

3.4 SDK的编译过程

3.4.1 envsetup.sh

3.4.2 lunch sdk-eng

3.4.3 make sdk

3.5 Android系统GDB调试

第2篇 Android原理篇

第4章 操作系统基础

4.1 计算机体系结构(Computer Architecture)

4.1.1 冯·诺依曼结构

4.1.2 哈佛结构

4.2 什么是操作系统

4.3 进程间通信的经典实现

4.3.1 共享内存(Shared Memory)

4.3.2 管道(Pipe)

4.3.3 UNIX Domain Socket

4.3.4 RPC(Remote Procedure Calls)

4.4 同步机制的经典实现

4.4.1 信号量(Semaphore)

4.4.2 Mutex

4.4.3 管程(Monitor)

4.4.4 Linux Futex

4.4.5 同步范例

4.5 Android中的同步机制

4.5.1 进程间同步——Mutex

4.5.2 条件判断——Condition

4.5.3 “栅栏、障碍”——Barrier

4.5.4 加解锁的自动化操作——Autolock

4.5.5 读写锁——ReaderWriterMutex

4.6 操作系统内存管理基础

4.6.1 虚拟内存(Virtual Memory)

4.6.2 内存保护(Memory Protection)

4.6.3 内存分配与回收

4.6.4 进程间通信——mmap

4.6.5 写时拷贝技术(Copy on Write)

4.7 Android中的Low Memory Killer

4.8 Android匿名共享内存(Anonymous Shared Memory)

4.8.1 Ashmem设备

4.8.2 Ashmem应用实例

4.9 JNI

4.9.1 Java函数的本地实现

4.9.2 本地代码访问JVM

4.10 Java中的反射机制

4.11 学习Android系统的两条线索

第5章 Android进程/线程和程序内存优化

5.1 Android进程和线程

5.2 Handler, MessageQueue, Runnable与Looper

5.3 UI主线程——ActivityThread

5.4 Thread类

5.4.1 Thread类的内部原理

5.4.2 Thread休眠和唤醒

5.4.3 Thread实例

5.5 Android应用程序如何利用CPU的多核处理能力

5.6 Android应用程序的典型启动流程

5.7 Android程序的内存管理与优化

5.7.1 Android系统对内存使用的限制

5.7.2 Android中的内存泄露与内存监测

第6章 进程间通信——Binder

6.1 智能指针

6.1.1 智能指针的设计理念

6.1.2 强指针sp

6.1.3 弱指针wp

6.2 进程间的数据传递载体——Parcel

6.3 Binder驱动与协议

6.3.1 打开Binder驱动——binder_open

6.3.2 binder_mmap

6.3.3 binder_ioctl

6.4 “DNS”服务器——ServiceManager(Binder Server)

6.4.1 ServiceManager的启动

6.4.2 ServiceManager的构建

6.4.3 获取ServiceManager服务——设计思考

6.4.4 ServiceManagerProxy

6.4.5 IBinder和BpBinder

6.4.6 ProcessState和IPCThreadState

6.5 Binder客户端——Binder Client

6.6 Android接口描述语言——AIDL

6.7 匿名Binder Server

第7章 Android启动过程

7.1 第一个系统进程(init)

7.1.1 init.rc语法

7.1.2 init.rc实例分析

7.2 系统关键服务的启动简析

7.2.1 Android的“DNS服务器”——ServiceManager

7.2.2 “孕育”新的线程和进程——Zygote

7.2.3 Android的“系统服务”——SystemServer

7.2.4 Vold和External Storage存储设备

7.3 多用户管理

第8章 管理Activity和组件运行状态的系统进程——ActivityManagerService(AMS)

8.1 AMS功能概述

8.2 管理当前系统中Activity状态——Activity Stack

8.3 startActivity流程

8.4 完成同一任务的“集合”——Activity Task

8.4.1 “后进先出”——Last In,First Out

8.4.2 管理Activity Task

8.5 Instrumentation机制

第9章 GUI系统——SurfaceFlinger

9.1 OpenGL ES与EGL

9.2 Android的硬件接口——HAL

9.3 Android终端显示设备的“化身”——Gralloc与Framebuffer

9.4 Android中的本地窗口

9.4.1 FramebufferNativeWindow

9.4.2 应用程序端的本地窗口——Surface

9.5 BufferQueue详解

9.5.1 BufferQueue的内部原理

9.5.2 BufferQueue中的缓冲区分配

9.5.3 应用程序的典型绘图流程

9.5.4 应用程序与BufferQueue的关系

9.6 SurfaceFlinger

9.6.1 “黄油计划”——Project Butter

9.6.2 SurfaceFlinger的启动

9.6.3 接口的服务端——Client

9.7 VSync的产生和处理

9.7.1 VSync信号的产生和分发

9.7.2 VSync信号的处理

9.7.3 handleMessageTransaction

9.7.4 “界面已经过时/无效,需要重新绘制”——handleMessageInvalidate

9.7.5 合成前的准备工作——preComposition

9.7.6 可见区域——rebuildLayerStacks

9.7.7 为“Composition”搭建环境——setUpHWComposer

9.7.8 doDebugFlashRegions

9.7.9 doComposition

第10章 GUI系统之“窗口管理员”——WMS

10.1 “窗口管理员”——WMS综述

10.1.1 WMS的启动

10.1.2 WMS的基础功能

10.1.3 WMS的工作方式

10.1.4 WMS,AMS与Activity间的联系

10.2 窗口属性

10.2.1 窗口类型与层级

10.2.2 窗口策略(Window Policy)

10.2.3 窗口属性(LayoutParams)

10.3 窗口的添加过程

10.3.1 系统窗口的添加过程

10.3.2 Activity窗口的添加过程

10.3.3 窗口添加实例

10.4 Surface管理

10.4.1 Surface申请流程(relayout)

10.4.2 Surface的跨进程传递

10.4.3 Surface的业务操作

10.5 performLayoutAndPlaceSurfacesLockedInner

10.6 窗口大小的计算过程

10.7 启动窗口的添加与销毁

10.7.1 启动窗口的添加

10.7.2 启动窗口的销毁

10.8 窗口动画

10.8.1 窗口动画类型

10.8.2 动画流程跟踪——WindowStateAnimator

10.8.3 AppWindowAnimator

10.8.4 动画的执行过程

第11章 让你的界面炫彩起来的GUI系统——View体系

11.1 应用程序中的View框架

11.2 Activity中View Tree的创建过程

11.3 在WMS中注册窗口

11.4 ViewRoot的基本工作方式

11.5 View Tree的遍历时机

11.6 View Tree的遍历流程

11.7 View和ViewGroup属性

11.7.1 View的基本属性

11.7.2 ViewGroup的属性

11.7.3 View、ViewGroup和ViewParent

11.7.4 Callback接口

11.8 “作画“工具集——Canvas

11.8.1 “绘制UI”——Skia

11.8.2 数据中介——Surface.lockCanvas

11.8.3 解锁并提交结果——unlockCanvasAndPost

11.9 draw和onDraw

11.10 View中的消息传递

11.10.1 View中TouchEvent的投递流程

11.10.2 ViewGoup中TouchEvent的投递流程

11.11 View动画

11.12 UiAutomator

第12章 “问渠哪得清如许,为有源头活水来”——InputManagerService与输入事件

12.1 事件的分类

12.2 事件的投递流程

12.2.1 InputManagerService

12.2.2 InputReaderThread

12.2.3 InputDispatcherThread

12.2.4 ViewRootImpl对事件的派发

12.3 事件注入

第13章 应用不再同质化——音频系统

13.1 音频基础

13.1.1 声波

13.1.2 音频的录制、存储与回放

13.1.3 音频采样

13.1.4 Nyquist–Shannon采样定律

13.1.5 声道和立体声

13.1.6 声音定级——Weber–Fechner law

13.1.7 音频文件格式

13.2 音频框架

13.2.1 Linux中的音频框架

13.2.2 TinyAlsa

13.2.3 Android系统中的音频框架

13.3 音频系统的核心——AudioFlinger

13.3.1 AudioFlinger服务的启动和运行

13.3.2 AudioFlinger对音频设备的管理

13.3.3 PlaybackThread的循环主体

13.3.4 AudioMixer

13.4 策略的制定者——AudioPolicyService

13.4.1 AudioPolicyService概述

13.4.2 AudioPolicyService的启动过程

13.4.3 AudioPolicyService与音频设备

13.5 音频流的回放——AudioTrack

13.5.1 AudioTrack应用实例

13.5.2 AudioPolicyService的路由实现

13.6 音频数据流

13.6.1 AudioTrack中的音频流

13.6.2 AudioTrack和AudioFlinger间的数据交互

13.6.3 AudioMixer中的音频流

13.7 音量控制

13.8 音频系统的上层建筑

13.8.1 从功能入手

13.8.2 MediaPlayer

13.8.3 MediaRecorder

13.8.4 一个典型的多媒体录制程序

13.8.5 MediaRecorder源码解析

13.8.6 MediaPlayerService简析

13.9 Android支持的媒体格式

13.9.1 音频格式

13.9.2 视频格式

13.9.3 图片格式

13.9.4 网络流媒体

13.10 ID3信息简述

13.11 Android多媒体文件管理

13.11.1 MediaStore

13.11.2 多媒体文件信息的存储“仓库”——MediaProvider

13.11.3 多媒体文件管理中的“生产者”——MediaScanner

第3篇 应用原理篇

第14章 Intent的匹配规则

14.1 Intent属性

14.2 Intent的匹配规则

14.3 Intent匹配源码简析

第15章 APK应用程序的资源适配

15.1 资源类型

15.1.1 状态颜色资源

15.1.2 图形资源

15.1.3 布局资源

15.1.4 菜单资源

15.1.5 字符串资源

15.1.6 样式资源

15.1.7 其他资源

15.1.8 属性资源

15.2 提供可选资源

15.3 最佳资源的匹配流程

15.4 屏幕适配

15.4.1 屏幕适配的重要参数

15.4.2 如何适配多屏幕

15.4.3 横竖屏切换的处理

第16章 Android字符编码格式

16.1 字符编码格式背景

16.2 ISO/IEC 8859

16.3 ISO/IEC 10646

16.4 Unicode

16.5 String类型

16.5.1 构建String

16.5.2 String对多种编码的兼容

第17章 Android和OpenGL ES

17.1 3D图形学基础

17.1.1 计算机3D图形

17.1.2 图形管线

17.2 Android中的OpenGL ES简介

17.3 图形渲染API——EGL

17.3.1 EGL与OpenGL ES

17.3.2 egl.cfg

17.3.3 EGL接口解析

17.3.4 EGL实例

17.4 简化OpenGL ES开发——GLSurfaceView

17.5 OpenGL分析利器——GLTracer

第18章 “系统的UI”——SystemUI

18.1 SystemUI的组成元素

18.2 SystemUI的实现

18.3 Android壁纸资源——WallpaperService

18.3.1 WallPaperManagerService

18.3.2 ImageWallpaper

第19章 Android常用的工具“小插件”——Widget机制

19.1 “功能的提供者”——AppWidgetProvider

19.2 AppWidgetHost

第20章 Android应用程序的编译和打包

20.1 “另辟蹊径”采用第三方工具——Ant

20.2 通过命令行编译和打包APK

20.3 APK编译过程详解

20.4 信息安全基础概述

20.5 应用程序签名

20.6 应用程序签名源码简析

20.7 APK重签名实例

第21章 Android虚拟机

21.1 Android虚拟机基础知识

21.1.1 Java虚拟机核心概念

21.1.2 LLVM编译器框架

21.1.3 Android中的经典垃圾回收算法

21.1.4 Art和Dalvik之争

21.1.5 Art虚拟机整体框架

21.1.6 Android应用程序与虚拟机

21.1.7 Procedure Call Standard for Arm Architecture(过程调用标准)

21.1.8 C++ 11标准中的新特性

21.2 Android虚拟机核心文件格式—— Dex字节码

21.3 Android虚拟机核心文件格式——可执行文件的基石ELF

21.3.1 ELF文件格式

21.3.2 Linux平台下ELF文件的加载和动态链接过程

21.3.3 Android Linker和动态链接库

21.3.4 Signal Handler和Fault Manager

21.4 Android虚拟机核心文件格式——“主宰者”OAT

21.4.1 OAT文件格式解析

21.4.2 OAT的两个编译时机

21.5 Android虚拟机的典型启动流程

21.6 堆管理器和堆空间释义

21.7 Android虚拟机中的线程管理

21.7.1 Java线程的创建过程

21.7.2 线程的挂起过程

21.8 Art虚拟机中的代码执行方式综述

21.9 Art虚拟机的“中枢系统”——执行引擎之Interpreter

21.10 Art虚拟机的“中枢系统”——执行引擎之JIT

21.10.1 JIT重出江湖的契机

21.10.2 Android N版本中JIT的设计目标及策略

21.10.3 Profile Guided Compilation(追踪技术)

21.10.4 AOT Compilation Daemon

21.11 Art虚拟机的“中枢系统”——执行引擎之本地代码

21.12 Android x86版本兼容ARM二进制代码——Native Bridge

21.13 Android应用程序调试原理解析

21.13.1 Java代码调试与JDWP协议

21.13.2 Native代码调试

21.13.3 利用GDB调试Android Art虚拟机

第22章 Android安全机制透析

22.1 Android Security综述

22.2 SELinux

22.2.1 DAC

22.2.2 MAC

22.2.3 基于MAC的SELinux

22.3 Android系统安全保护的三重利剑

22.3.1 第一剑:Permission机制

22.3.2 加强剑:DAC(UGO)保护

22.3.3 终极剑:SEAndroid

22.4 SEAndroid剖析

22.4.1 SEAndroid的顶层模型

22.4.2 SEAndroid相关的核心源码

22.4.3 SEAndroid标签和规则

22.4.5 TE文件的语法规则

22.4.6 SEAndroid中的核心主体——init进程

22.4.7 SEAndroid中的客体

22.5 Android设备Root简析

22.6 APK的加固保护分析

第4篇 Android系统工具

第23章 IDE和Gradle

23.1 Gradle的核心要点

23.1.1 Groovy与Gradle

23.1.2 Gradle的生命周期

23.2 Gradle的Console语法

23.3 Gradle Wrapper和Cache

23.4 Android Studio和Gradle

23.4.1 Gradle插件基础知识

23.4.2 Android Studio中的Gradle编译脚本

第24章 软件版本管理

24.1 版本管理简述

24.2 Git的安装

24.2.1 Linux环境下安装Git

24.2.2 Windows环境下安装Git

24.3 Git的使用

24.3.1 基础配置

24.3.2 新建仓库

24.3.3 文件状态

24.3.4 忽略某些文件

24.3.5 提交更新

24.3.6 其他命令

24.4 Git原理简析

24.4.1 分布式版本系统的特点

24.4.2 安全散列算法——SHA-1

24.4.3 4个重要对象

24.4.4 三个区域

24.4.5 分支的概念与实例

第25章 系统调试辅助工具

25.1 万能模拟器——Emulator

25.1.1 QEMU

25.1.2 Android工程中的QEMU

25.1.3 模拟器控制台(Emulator Console)

25.1.4 实例:为Android模拟器添加串口功能

25.2 此Android非彼Android

25.3 快速建立与模拟器或真机的通信渠道——ADB

25.3.1 ADB的使用方法

25.3.2 ADB的组成元素

25.3.3 ADB源代码解析

25.3.4 ADB Protocol

25.4 SDK Layoutlib

25.5 TraceView和Dmtracedump

25.6 Systrace

25.7 代码覆盖率统计

25.8 模拟GPS位置

欢迎来到异步社区!

《Android内核设计思想》是2017年由人民邮电出版社出版,作者林学森。

得书感谢您对《《Android内核设计思想》》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

你可能喜欢
小程序开发原理与实战 电子书
腾讯一线专家联合著作,通过云开发具体案例+完整项目实战,详解小程序开发原理、运行机制、避坑指南。
鲲鹏生态应用开发 电子书
本书系统、详细地介绍了鲲鹏计算产业的现状及应用。
Android 源码设计模式解析与实战 电子书
本书适合的读者为初、中、高级Android工程师,也可以作为大专院校相关师生的学习用书和培训学校的教材。
微信小程序开发图解案例教程(第3版) 电子书
传统开发+海量商业案例详解,图文快速理解基本方法,详细代码说明。
FlutterApp开发:从入门到实战 电子书
本书系统讲解使用Flutter进行跨平台开发应具备的知识,包含丰富的代码示例与效果图片,组件功能一目了然。