《深入理解Android内核设计思想 上 第2版》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:林学森著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2017
  • ISBN:7115452636
  • 页数:613 页
图书介绍:本书以最新的Android版本为写作的蓝图,深入浅出的讲解了Android系统的应用开发、底层开发,通过案例分析阐述了Android应用开发的技巧,以及Android运行的原理,让读者更好地了解Android的运行机制,以便开发出更好的应用。

第1篇Android编译篇 2

第1章Android系统简介 2

1.1 Android系统发展历程 2

1.2 Android系统特点 4

1.3 Android系统框架 8

第2章Android源码下载及编译 11

2.1 Android源码下载指南 11

2.1.1基于Repo和Git的版本管理 11

2.1.2 Android源码下载流程 12

2.2原生Android系统编译指南 16

2.2.1建立编译环境 16

2.2.2编译流程 19

2.3定制产品的编译与烧录 22

2.3.1定制新产品 22

2.3.2 Linux内核编译 26

2.3.3烧录/升级系统 27

2.4 Android Multilib Build 28

2.5 Android系统映像文件 31

2.5.1 boot.img 32

2.5.2 ramdisk.img 34

2.5.3 system.img 35

2.5.4 Verifiied Boot 35

2.6 ODEX流程 37

2.7 OTA系统升级 39

2.7.1生成升级包 39

2.7.2获取升级包 40

2.7.3 OTA升级——Recovery模式 41

2.8 Android反编译 44

2.9 NDK Build 46

2.10第三方ROM的移植 48

第3章Android编译系统 50

3.1 Makefiile入门 50

3.2 Android编译系统 52

3.2.1 Makefiile依赖树的概念 53

3.2.2 Android编译系统抽象模型 53

3.2.3树根节点droid 54

3.2.4 main.mk解析 55

3.2.5 droidcore节点 59

3.2.6 dist fiiles 61

3.2.7 Android.mk的编写规则 61

3.3 Jack Toolchain 64

3.4 SDK的编译过程 68

3.4.1 envsetup.sh 68

3.4.2 lunch sdk-eng 70

3.4.3 make sdk 75

3.5 Android系统GDB调试 85

第2篇Android原理篇 90

第4章 操作系统基础 90

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

4.1.1冯·诺依曼结构 90

4.1.2哈佛结构 90

4.2什么是操作系统 91

4.3进程间通信的经典实现 93

4.3.1共享内存 (Shared Memory) 94

4.3.2管道(Pipe) 95

4.3.3 UNIX Domain Socket 97

4.3.4 RPC(Remote Procedure Calls) 99

4.4同步机制的经典实现 100

4.4.1信号量(Semaphore) 100

4.4.2 Mutex 101

4.4.3管程(Monitor) 101

4.4.4 Linux Futex 102

4.4.5同步范例 103

4.5 Android中的同步机制 104

4.5.1进程间同步——Mutex 104

4.5.2条件判断———Condition 105

4.5.3“栅栏、障碍”—— Barrier 107

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

4.5.5读写锁——Reader WriterMutex 109

4.6操作系统内存管理基础 110

4.6.1虚拟内存 (Virtual Memory) 110

4.6.2内存保护 (Memory Protection) 113

4.6.3内存分配与回收 113

4.6.4进程间通信——mmap 114

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

4.7 Android中的Low Memory Killer 115

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

4.8.1 Ashmem设备 118

4.8.2 Ashmem应用实例 122

4.9 JNI 127

4.9.1 Java函数的本地实现 127

4.9.2本地代码访问 JVM 130

4.10 Java中的反射机制 132

4.11学习Android系统的两条线索 133

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

5.1 Android进程和线程 134

5.2 Handler, MessageQueue,Runnable与Looper 140

5.3 UI主线程——Activity Thread 147

5.4 Thread类 150

5.4.1 Thread类的内部原理 150

5.4.2 Thread休眠和唤醒 151

5.4.3 Thread实例 155

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

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

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

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

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

第6章 进程间通信——Binder 166

6.1智能指针 169

6.1.1智能指针的设计理念 169

6.1.2强指针sp 172

6.1.3弱指针wp 173

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

6.3 Binder驱动与协议 187

6.3.1打开Binder驱动 —— binder open 188

6.3.2 binder mmap 189

6.3.3 binder ioctl 192

6.4 “DNS”服务器——Service Manager(Binder Server) 193

6.4.1 ServiceManager的启动 193

6.4.2 ServiceManager的构建 194

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

6.4.4 ServiceManagerProxy 203

6.4.5 IBinder和BpBinder 205

6.4.6 ProcessState和IPCThreadState 207

6.5 Binder客户端Binder Client 237

6.6 Android接口描述语言——AIDL 242

6.7匿名Binder Server 254

第7章Android启动过程 257

7.1第一个系统进程(init) 257

7.1.1 init.rc语法 257

7.1.2 init.rc实例分析 260

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

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

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

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

7.2.4 Vold和External Storage存储设备 276

7.3多用户管理 282

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

8.1 AMS功能概述 284

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

8.3 startActivity流程 288

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

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

8.4.2管理Activity Task 298

8.5 Instrumentation机制 300

第9章GUI系统——SurfaceFlinger 305

9.1 OpenGL ES与EGL 305

9.2 Android的硬件接口——HAL 307

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

9.4 Android中的本地窗口 313

9.4.1 FramebufferNativeWindow 315

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

9.5 Buffer Queue详解 325

9.5.1 Buffer Queue的内部原理 325

9.5.2 Buffer Queue中的缓冲区分配 328

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

9.5.4应用程序与Buffer Queue的关系 339

9.6 SurfaceFlinger 343

9.6.1“黄油计划”——Project Butter 343

9.6.2 SurfaceFlinger的启动 347

9.6.3接口的服务端——Client 351

9.7 VSync的产生和处理 355

9.7.1 VSync信号的产生和分发 355

9.7.2 VSync信号的处理 361

9.7.3 handleMessageTransaction 363

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

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

9.7.6可见区域 ——rebui 1 dLayerStacks 371

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

9.7.8 doDebugFlashRegions 377

9.7.9 doComposition 377

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

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

10.1.1 WMS的启动 388

10.1.2 WMS的基础功能 388

10.1.3 WMS的工作方式 389

10.1.4 WMS, AMS与Activity间的联系 390

10.2窗口属性 392

10.2.1窗口类型与层级 392

10.2.2窗口策略 (Window Policy) 396

10.2.3窗口属性 (LayoutParams) 398

10.3窗口的添加过程 400

10.3.1系统窗口的添加过程 400

10.3.2 Activity窗口的添加过程 409

10.3.3窗口添加实例 412

10.4 Surface管理 416

10.4.1 Surface申请流程 (relayout) 416

10.4.2 Surface的跨进程传递 420

10.4.3 Surface的业务操作 422

10.5 performLayoutAndPlace SurfacesLockedInner 423

10.6窗口大小的计算过程 424

10.7启动窗口的添加与销毁 433

10.7.1启动窗口的添加 433

10.7.2启动窗口的销毁 437

10.8窗口动画 438

10.8.1窗口动画类型 439

10.8.2动画流程跟踪——Window StateAnimator 440

10.8.3 AppWindowAnimator 444

10.8.4动画的执行过程 446

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

11.1应用程序中的View框架 452

11.2 Activity中View Tree的创建过程 455

11.3在WMS中注册窗口 461

11.4 ViewRoot的基本工作方式 463

11.5 View Tree的遍历时机 464

11.6 View Tree的遍历流程 468

11.7 View和ViewGroup属性 477

11.7.1 View的基本属性 477

11.7.2 ViewGroup的属性 482

11.7.3 View、ViewGroup和ViewParent 482

11.7.4 Callback接口 482

11.8“作画”工具集——Canvas 484

11.8.1“绘制UI”——Skia 485

11.8.2数据中介——Surface.lockCanvas 486

11.8.3解锁并提交结果——unlock CanvasAndPost 490

11.9 draw和onDraw 491

11.10 View中的消息传递 497

11.10.1 View中TouchEvent的投递流程 497

11.10.2 ViewGoup中Touch-Event的投递流程 500

11.11 View动画 504

11.12 UiAutomator 509

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

12.1事件的分类 514

12.2事件的投递流程 517

12.2.1 InputManagerService 518

12.2.2 InputReaderThread 519

12.2.3 InputDispatcherThread 519

12.2.4 ViewRootImpl对事件的派发 523

12.3事件注入 524

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

13.1音频基础 527

13.1.1声波 527

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

13.1.3音频采样 528

13.1.4 Nyquist-Shannon采样定律 530

13.1.5声道和立体声 530

13.1.6声音定级 Weber-Fechner law 531

13.1.7音频文件格式 532

13.2音频框架 532

13.2.1 Linux中的音频框架 532

13.2.2 TinyAlsa 534

13.2.3 Android系统中的音频框架 536

13.3音频系统的核心——Audio- Flinger 538

13.3.1 AudioFlinger服务的启动和运行 538

13.3.2 AudioFlinger对音频设备的管理 540

13.3.3 PlaybackThread的循环主体 547

13.3.4 AudioMixer 551

13.4策略的制定者—Audio-PolicyService 553

13.4.1 AudioPolicyService概述 554

13.4.2 AudioPolicyService的启动过程 556

13.4.3 AudioPolicyService与音频设备 558

13.5音频流的回放——AudioTrack 560

13.5.1 AudioTrack应用实例 560

13.5.2 AudioPolicyService的路由实现 567

13.6音频数据流 572

13.6.1 AudioTrack中的音频流 573

13.6.2 AudioTrack和AudioFlinger间的数据交互 576

13.6.3 AudioMixer中的音频流 582

13.7音量控制 584

13.8音频系统的上层建筑 588

13.8.1从功能入手 588

13.8.2 MediaPlayer 589

13.8.3 MediaRecorder 592

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

13.8.5 MediaRecorder源码解析 596

13.8.6 MediaPlayerService简析 598

13.9 Android支持的媒体格式 600

13.9.1音频格式 600

13.9.2视频格式 601

13.9.3图片格式 601

13.9.4网络流媒体 602

13.10 ID3信息简述 602

13.11 Android多媒体文件管理 606

13.11.1 MediaStore 607

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

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