《深入理解Android内核设计思想》-程序员宅基地

技术标签: git  ui  移动开发  

《深入理解Android内核设计思想》

基本信息

作者: 林学森   

出版社:人民邮电出版社

ISBN:9787115348418

上架时间:2014-4-25

出版日期:2014 年5月

开本:16开

页码:687

版次:1-1

所属分类:计算机 > 软件与程序设计 > 移动开发 > Android

更多关于》》》《深入理解Android内核设计思想》

 

 

编辑推荐 

    基于Android SDK最新版本

  全面细致地剖析了进程/线程模型、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统等核心模块在Android操作系统中的设计思想

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

  由浅入深,由总体框架再到细节实现,让读者在学习中潜移默化地彻底理解Android内核的实现原理

 

内容简介

    书籍

    计算机书籍

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

《深入理解android内核设计思想》既适合android系统工程师,也适合于应用开发工程师来阅读提升android开发能力。读者可以在《深入理解android内核设计思想》潜移默化的学习过程中更深刻地理解android系统,并将所学知识自然地应用到实际开发难题的解决中。

 

目录

《深入理解android内核设计思想》

第1篇 android编译篇

第1章 android系统简介 2

1.1 android系统发展历程 2

1.2 android系统特点 4

1.3 android系统框架 8

第2章 android源码下载及编译 10

2.1 android源码下载指南 10

2.1.1 基于repo和git的版本管理 10

2.1.2 android源码下载流程 11

2.2 原生态系统编译指南 12

2.2.1 建立编译环境 13

2.2.2 编译流程 15

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

2.3.1 定制新产品 17

2.3.2 linux内核编译 21

2.3.3 烧录 22

2.4 android系统映像文件 23

2.4.1 boot.img 23

2.4.2 ramdisk.img 25

2.4.3 system.img 26

2.5 ota系统升级 26

2.5.1 生成升级包 27

2.5.2 获取升级包 28

2.5.3 ota升级-recoverymode 29

2.6 android反编译 31

第3章 android编译系统 34

3.1 makefile入门 34

3.2 android编译系统 35

3.2.1 makefile依赖树的概念 36

3.2.2 树根节点droid 36

3.2.3 main.mk解析 38

3.2.4 droidcore节点 39

3.2.5 dist_files 41

3.2.6 android.mk的编写规则 42

第2篇 android原理篇

第4章 操作系统基础 48

4.1 计算机体系结构(computer architecture) 48

4.1.1 冯·诺依曼结构 48

4.1.2 哈佛结构 48

4.2 什么是操作系统 49

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

4.3.1 共享内存(shared memory) 52

4.3.2 管道(pipe) 54

4.3.3 unix domain socket 55

4.3.4 rpc(remoteprocedure calls) 58

4.4 同步机制的经典实现 58

4.4.1 信号量(semaphore) 58

4.4.2 mutex 59

4.4.3 管程(monitor) 59

4.4.4 同步范例 60

4.5 android中的同步机制 61

4.5.1 进程间同步——mutex 61

4.5.2 条件判断——condition 62

4.5.3 “栅栏、障碍”——barrier 64

4.5.4 加解锁的自动化操作——autolock 66

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

4.6.1 虚拟内存(virtual memory) 66

4.6.2 内存保护(memory protection) 69

4.6.3 内存分配与回收 69

4.6.4 进程间通信——mmap 70

4.7 android中的low memory killer 71

4.8 android匿名共享内存(anonymous shared memory) 74

4.8.1 ashmem设备 74

4.8.2 ashmem应用实例 78

4.9 jni 83

4.9.1 java函数的本地实现 83

4.9.2 本地代码访问jvm 86

4.10 学习android系统的两条线索 88

第5章 android进程/线程管理 89

5.1 android进程和线程 89

5.2 handler, messagequeue,runnable与looper 95

5.3 ui主线程——activitythread 102

5.4 thread类 105

5.4.1 thread类的内部原理 105

5.4.2 thread休眠和唤醒 106

5.4.3 thread实例 110

5.5 android应用程序的典型启动流程 112

第6章 进程间通信——binder 114

6.1 智能指针 117

6.1.1 智能指针的设计理念 117

6.1.2 强指针sp 120

6.1.3 弱指针wp 121

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

6.3 binder驱动与协议 135

6.3.1 打开binder驱动——binder_open 136

6.3.2 binder_mmap 137

6.3.3 binder_ioctl 140

6.4 “dns”服务器——servicemanager(binder server) 141

6.4.1 servicemanager的启动 141

6.4.2 servicemanager的构建 142

6.4.3 获取servicemanager服务——设计思考 147

6.4.4 servicemanagerproxy 151

6.4.5 ibinder和bpbinder 153

6.4.6 processstate和ipcthreadstate 155

6.5 binder客户端——binder client 185

6.6 android接口描述语言——aidl 190

6.7 匿名binder server 202

第7章 android启动过程简析 205

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

7.1.1 init.rc语法 205

7.1.2 init.rc实例分析 208

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

7.2.1 android的“dns服务器”——servicemanager 209

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

7.2.3 android的“系统服务”——systemserver 211

第8章 管理activity和组件运行状态的系统进程——activity managerservice (ams) 213

8.1 ams功能概述 213

8.2 管理当前系统中activity状态——activity stack 215

8.3 startactivity流程 217

8.4 完成同一任务的“集合”——activity task 224

8.4.1 “后进先出”——last in,first out 225

8.4.2 管理activity task 226

第9章 gui系统之surfaceflinger 229

9.1 opengl es与egl 229

9.2 android的硬件接口——hal 231

9.3 android终端显示设备的“化身”——gralloc与framebuffer 233

9.4 android中的本地窗口 237

9.4.1 framebuffernativewindow 239

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

9.5 bufferqueue详解 249

9.5.1 bufferqueue的内部原理 249

9.5.2 bufferqueue中的缓冲区分配 252

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

9.5.4 应用程序与bufferqueue的关系 263

9.6 surfaceflinger 267

9.6.1 “黄油计划”——project butter 267

9.6.2 surfaceflinger的启动 271

9.6.3 接口的服务端——client 275

9.7 vsync的产生和处理 279

9.7.1 vsync信号的产生和分发 279

9.7.2 vsync信号的处理 285

9.7.3 handlemessagetransaction 287

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

9.7.5 合成前的准备工作——precomposition 293

9.7.6 可见区域——rebuildlayerstacks 295

9.7.7 为“composition”搭建环境——setuphwcomposer 299

9.7.8 dodebugflashregions 301

9.7.9 docomposition 302

第10章 gui系统之“窗口管理员”——wms 309

10.1 “窗口管理员”——wms综述 310

10.1.1 wms的启动 312

10.1.2 wms的基础功能 312

10.1.3 wms的工作方式 313

10.1.4 wms,ams与activity间的联系 314

10.2 窗口属性 316

10.2.1 窗口类型与层级 316

10.2.2 窗口策略(window policy) 320

10.2.3 窗口属性(layoutparams) 322

10.3 窗口的添加过程 324

10.3.1 系统窗口的添加过程 324

10.3.2 activity窗口的添加过程 333

10.3.3 窗口添加实例 337

10.4 surface管理 340

10.4.1 surface申请流程(relayout) 341

10.4.2 surface的跨进程传递 344

10.4.3 surface的业务操作 347

10.5 performlayoutandplacesurfaceslockedinner 347

10.6 窗口大小的计算过程 349

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

10.7.1 启动窗口的添加 358

10.7.2 启动窗口的销毁 362

10.8 窗口动画 363

10.8.1 窗口动画类型 364

10.8.2 动画流程跟踪——windowstateanimator 365

10.8.3 appwindowanimator 368

10.8.4 动画的执行过程 370

第11章 让你的界面炫彩起来的gui系统之view体系 377

11.1 应用程序中的view框架 377

11.2 activity中view tree的创建过程 380

11.3 在wms中注册窗口 386

11.4 viewroot的基本工作方式 388

11.5 view tree的遍历时机 389

11.6 view tree的遍历流程 393

11.7 view和viewgroup属性 402

11.7.1 view的基本属性 402

11.7.2 viewgroup的属性 408

11.7.3 view,viewgroup和viewparent 408

11.7.4 callback接口 408

11.8 “作画“工具集——canvas 411

11.8.1 “绘制ui”——skia 412

11.8.2 数据中介——surface.lockcanvas 413

11.8.3 解锁并提交结果——unlockcanvasandpost 417

11.9 draw和ondraw 417

11.10 view中的消息传递 423

11.10.1 view中touchevent的投递流程 423

11.10.2 viewgoup中touchevent的投递流程 427

11.11 view动画 430

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

12.1 事件的分类 436

12.2 事件的投递流程 439

12.2.1 inputmanagerservice 440

12.2.2 inputreaderthread 441

12.2.3 inputdispatcherthread 441

12.2.4 viewrootimpl对事件的派发 445

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

13.1 音频基础 448

13.1.1 声波 448

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

13.1.3 音频采样 449

13.1.4 nyquist–shannon采样定律 451

13.1.5 声道和立体声 451

13.1.6 声音定级——weber–fechner law 452

13.1.7 音频文件格式 453

13.2 音频框架 454

13.2.1 linux中的音频框架 454

13.2.2 tinyalsa 456

13.2.3 android系统中的音频框架 457

13.3 音频系统的核心——audioflinger 459

13.3.1 audioflinger服务的启动和运行 460

13.3.2 audioflinger对音频设备的管理 461

13.3.3 playbackthread的循环主体 468

13.3.4 audiomixer 473

13.4 策略的制定者——audiopolicyservice 475

13.4.1 audiopolicyservice概述 475

13.4.2 audiopolicyservice的启动过程 477

13.4.3 audiopolicyservice与音频设备 480

13.5 音频流的回放——audiotrack 482

13.5.1 audiotrack应用实例 482

13.5.2 audiopolicyservice的路由实现 489

13.6 音频数据流 494

13.6.1 audiotrack中的音频流 495

13.6.2 audiotrack和audioflinger间的数据交互 498

13.6.3 audiomixer中的音频流 504

13.7 音量控制 506

13.8 音频系统的上层建筑 510

13.8.1 从功能入手 510

13.8.2 mediaplayer 511

13.8.3 mediarecorder 514

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

13.8.5 mediarecorder源码解析 518

13.8.6 mediaplayerservice简析 520

13.9 android支持的媒体格式 523

13.9.1 音频格式 523

13.9.2 视频格式 523

13.9.3 图片格式 524

13.9.4 网络流媒体 524

13.10 id3信息简述 525

13.11 android多媒体文件管理 528

13.11.1 mediastore 529

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

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

第3篇 应用原理篇

第14章 intent的匹配规则 538

14.1 intent属性 538

14.2 intent的匹配规则 540

14.3 intent匹配源码简析 546

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

15.1 资源类型 552

15.1.1 状态颜色资源 553

15.1.2 图形资源 554

15.1.3 布局资源 555

15.1.4 菜单资源 556

15.1.5 字符串资源 556

15.1.6 样式资源 557

15.1.7 其他资源 558

15.1.8 属性资源 558

15.2 提供可选资源 561

15.3 最佳资源的匹配流程 565

15.4 屏幕适配 567

15.4.1 屏幕适配的重要参数 567

15.4.2 如何适配多屏幕 569

第16章 android字符编码格式 572

16.1 字符编码格式背景 572

16.2 iso/iec 8859 573

16.3 iso/iec 10646 573

16.4 unicode 574

16.5 string类型 577

16.5.1 构建string 578

16.5.2 string对多种编码的兼容 579

第17章 android和opengl es 583

17.1 3d图形学基础 584

17.1.1 计算机3d图形 584

17.1.2 图形管线 585

17.2 android中的opengl es简介 587

17.3 图形渲染api—egl 588

17.3.1 egl与opengl es 588

17.3.2 egl.cfg 588

17.3.3 egl接口解析 590

17.3.4 egl实例 593

17.4 简化opengl es开发——glsurfaceview 593

第18章 “系统的ui”——systemui 601

18.1 systemui的组成元素 601

18.2 systemui的实现 603

18.3 android壁纸资源——wallpaperservice 610

18.3.1 wallpapermanagerservice 611

18.3.2 imagewallpaper 613

第19章 android常用的工具“小插件”——widget机制 616

19.1 “功能的提供者”——appwidgetprovider 616

19.2 appwidgethost 618

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

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

20.2 通过命令行编译和打包apk 625

20.3 apk编译过程详解 626

20.4 信息安全基础概述 628

20.5 应用程序签名 633

20.6 应用程序签名源码简析 636

第4篇 android系统工具

第21章 软件版本管理 642

21.1 版本管理简述 642

21.2 git的安装 643

21.2.1 linux环境下安装git 643

21.2.2 windows环境下安装git 644

21.3 git的使用 644

21.3.1 基础配置 644

21.3.2 新建仓库 646

21.3.3 文件状态 647

21.3.4 忽略某些文件 649

21.3.5 提交更新 649

21.3.6 其他命令 650

21.4 git原理简析 650

21.4.1 分布式版本系统的特点 651

21.4.2 安全散列算法——sha-1 652

21.4.3 四个重要对象 653

21.4.4 三个区域 657

21.4.5 分支的概念与实例 658

第22章 系统调试辅助工具 662

22.1 万能模拟器——emulator 662

22.1.1 qemu 662

22.1.2 android工程中的qemu 667

22.1.3 模拟器控制台(emulator console) 670

22.1.4 实例:为android模拟器添加串口功能 672

22.2 此android非彼android 674

22.3 快速建立与模拟器或真机的通信渠道——adb 676

22.3.1 adb的使用方法 676

22.3.2 adb的组成元素 678

22.3.3 adb源代码解析 679

22.3.4 adb protocol 684

 

本图书信息来源:互动出版网

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34194702/article/details/86058610

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签