字符352转化为数字352c语言,深入解析Android虚拟机 (钟世礼) 带目录完整版pdf[131MB]...

深入解析Android虚拟机 (钟世礼) 带目录完整版pdf[131MB]

本书合适Android初学者、Android底层开发人员、源代码剖析人员和虚拟机开发人员学习,也能够作为大专院校相关专业师生的学习用书和训练校园的教材。

666732b296aea0184c689927786e121b.png

第1章 获取并编译Android源码 1

1.1 获取Android源码 1

1.1.1 在Linux体系获取Android

源码 1

1.1.2 在Windows渠道获取Android

源码 2

1.1.3 Windows获取Android L源码 4

1.2 剖析Android源码结构 6

1.3 编译Android源码 8

1.3.1 建立编译环境 8

1.3.2 开端编译 9

1.3.3 在模拟器中运转 10

1.3.4 常见的过错剖析 10

1.3.5 实践演练—演示两种编译Android程序的办法 11

1.4 编译Android Kernel 14

1.4.1 获取Goldfish内核代码 14

1.4.2 获取MSM内核代码 17

1.4.3 获取OMAP内核代码 17

1.4.4 编译Android的Linux内核 17

第2章 Java虚拟机根底 19

2.1 虚拟机的效果 19

2.2 Java虚拟机概述 20

2.2.1 JVM的数据类型 20

2.2.2 Java虚拟机体系结构 21

2.2.3 JVM的生命周期 25

2.3 JVM的安全性 26

2.3.1 JVM的安全模型 26

2.3.2 沙箱模型的4种组件 27

2.3.3 剖析Java的战略机制 28

2.4 网络移动性 29

2.4.1 实际需求网络移动性 29

2.4.2 网络移动性 30

2.5 内存反常和废物处理 31

2.5.1 内存分配中的栈和堆 31

2.5.2 运转时的数据区域 33

2.5.3 方针拜访 34

2.5.4 内存走漏 35

2.5.5 JVM的废物搜集战略 36

2.5.6 废物搜集器 37

2.6 Java内存模型 37

2.6.1 Java内存模型概述 38

2.6.2 主内存与作业内存 38

2.6.3 内存间交互操作 39

第3章 Dalvik和ART根底 40

3.1 Dalvik VM和JVM的差异 40

3.2 Dalvik虚拟机的首要特征 41

3.3 Dalvik VM架构 42

3.3.1 Dalvik虚拟机的代码结构 42

3.3.2 dx东西 44

3.3.3 Dalvik VM的进程办理 44

3.3.4 Android的初始化流程 44

3.4 Dalvik VM操控VM指令详解 45

3.4.1 根本指令 45

3.4.2 扩展的JNI检测 45

3.4.3 断语 46

3.4.4 字节码校验和优化 46

3.4.5 Dalvik VM的运转形式 47

3.4.6 死锁猜测 47

3.4.7 dump仓库追寻 48

3.4.8 dex文件和校验 48

3.4.9 发作标志位 48

3.5 ART机制根底 48

3.5.1 什么是ART形式 48

3.5.2 ART优化机制根底 50

第4章 剖析JNI 52

4.1 JNI的实质 52

4.2 剖析Java层 54

4.2.1 加载JNI库 54

4.2.2 完结扫描作业 55

4.2.3 读取并保存信息 56

4.2.4 删去SD卡外的信息 58

4.2.5 直接转向JNI 58

4.2.6 扫描函数scanFile 59

4.2.7 JNI中的反常处理 59

4.3 剖析JNI层 60

4.3.1 将Native方针的指针保存到

Java方针 60

4.3.2 创立Native层的MediaScanner

方针 60

4.4 Native(本地)层 61

4.4.1 注册JNI函数 61

4.4.2 完结注册作业 63

4.4.3 动态注册 64

4.4.4 处理途径参数 65

4.4.5 扫描文件 66

4.4.6 增加TAG信息 66

4.4.7 总结函数JNI_OnLoad()与函数JNI_OnUnload()的用处 67

4.4.8 Java与JNI根本数据类型

转化 67

4.4.9 JNIEnv接口 69

4.4.10 JNI中的环境变量 70

第5章 剖析内存体系 71

5.1 剖析Android的进程通讯机制 71

5.1.1 Android的进程间通讯(IPC)

机制Binder 71

5.1.2 Service Manager是Binder

机制的上下文办理者 72

5.1.3 Service Manager服务 86

5.2 匿名同享内存子体系详解 89

5.2.1 根底数据结构 89

5.2.2 初始化处理 90

5.2.3 翻开匿名同享内存设备文件 91

5.2.4 内存映射 93

5.2.5 读写操作 94

5.2.6 确定和解锁 95

5.2.7 收回内存块 100

5.3 C++拜访接口层详解 101

5.3.1 接口MemoryBase 101

5.3.2 接口MemoryBase 108

5.4 Java拜访接口层详解 111

第6章 Android程序的生命周期办理 115

6.1 Android程序的生命周期 115

6.1.1 进程和线程 115

6.1.2 进程的类型 116

6.2 Activity的生命周期 116

6.2.1 Activity的几种状况 117

6.2.2 分化剖析Activity 117

6.2.3 几个典型的场景 119

6.2.4 办理Activity的生命周期 119

6.2.5 Activity的实例化与发动 120

6.2.6 Activity的暂停与继续 120

6.2.7 Activity的封闭/毁掉与

从头运转 121

6.2.8 Activity的发动形式 121

6.3 进程与线程 122

6.3.1 进程 122

6.3.2 线程 123

6.3.3 线程安全的办法 123

6.3.4 Android的线程模型 123

6.4 测验生命周期 125

6.5 Service的生命周期 129

6.5.1 Service的根本概念和用处 129

6.5.2 Service的生命周期详解 129

6.5.3 Service与Activity通讯 129

6.6 Android播送的生命周期 133

6.6.1 Android 的播送机制 133

6.6.2 编写播送程序 133

6.7 ART进程办理 135

第7章 IPC进程通讯机制 147

7.1 Binder机制概述 147

7.2 Service Manager是Binder机制的

上下文办理者 148

7.2.1 进口函数 148

7.2.2 翻开Binder设备文件 149

7.2.3 创立设备文件 149

7.2.4 办理内存映射地址空间 154

7.2.5 发作告诉 156

7.2.6 循环等候 161

7.3 内存映射 162

7.3.1 完结内存分配功用 162

7.3.2 分配物理内存 164

7.3.3 开释物理页面 166

7.3.4 分配内核缓冲区 167

7.3.5 开释内核缓冲区 168

7.3.6 查询内核缓冲区 170

第8章 init进程详解 171

8.1 init根底 171

8.2 剖析进口函数 172

8.3 装备文件详解 174

8.3.1 init.rc简介 174

8.3.2 剖析init.rc的进程 176

8.4 解析service 179

8.4.1 Zygote对应的service action 179

8.4.2 init安排service 180

8.4.3 函数parse_service和parse_line_service 181

8.5 字段on 184

8.5.1 Zygote对应的on action 184

8.5.2 init安排on 185

8.5.3 解析on用到的函数 186

8.6 在init操控service 186

8.6.1 发动Zygote 186

8.6.2 发动service 187

8.6.3 4种发动service的办法 191

8.7 操控特点服务 194

8.7.1 引进特点 194

8.7.2 初始化特点服务 197

8.7.3 发动特点服务 197

8.7.4 处理设置特点的恳求 200

第9章 Dalvik VM的进程体系 202

9.1 Zygote(孕育)进程详解 202

9.1.1 Zygote根底 202

9.1.2 剖析Zygote的发动进程 203

9.2 System进程详解 216

9.2.1 发动System进程前的预备

作业 216

9.2.2 剖析SystemServer 217

9.2.3 剖析EntropyService 220

9.2.4 剖析DropBoxManagerService 222

9.2.5 剖析DiskStatsService 227

9.2.6 剖析DeviceStorageManager Service 231

9.2.7 剖析SamplingProfilerService 233

9.2.8 剖析ClipboardService 241

9.3 运用程序进程详解 247

9.3.1 创立运用程序 247

9.3.2 发动线程池 256

9.3.3 创立信息循环 257

第10章 Dalvik VM运作流程详解 259

10.1 Dalvik VM相关的可履行程序 259

10.1.1 dalvikvm、dvz和app_process

简介 259

10.1.2 比照app_process和dalvikvm的

履行进程 260

10.2 初始化Dalvik虚拟机 262

10.2.1 开端虚拟机的预备作业 262

10.2.2 初始化盯梢显现体系 262

10.2.3 初始化废物收回器 263

10.2.4 初始化线程列表和主线程

环境参数 263

10.2.5 分配内部操作办法的表格

内存 264

10.2.6 初始化虚拟机的指令码相关

的内容 264

10.2.7 分配指令寄存器状况的

内存 264

10.2.8 分配指令寄存器状况的内存

和最根本用的Java库 265

10.2.9 初始化运用的Java类库

线程类 266

10.2.10 初始化虚拟机运用的反常

Java类库 267

10.2.11 初始化其他方针 268

10.3 发动Zygote 276

10.3.1 在init.rc中装备Zygote发动

参数 276

10.3.2 发动Socket服务端口 276

10.3.3 加载preload-classes 277

10.3.4 加载preload-resources 277

10.3.5 运用folk发动新进程 278

10.4 发动SystemServer进程 278

10.4.1 发动各种体系服务线程 279

10.4.2 发动第一个Activity 280

10.5 加载class类文件 281

10.5.1 DexFile在内存中的映射 281

10.5.2 ClassObject—Class在

加载后的表现形式 283

10.5.3 加载Class并生成相应

ClassObject的函数 283

10.5.4 加载根本类库文件 284

10.5.5 加载用户类文件 284

第11章 DEX文件详解 285

11.1 DEX文件介绍 285

11.2 DEX文件的格局 285

11.2.1 map_list 286

11.2.2 string_id_item 288

11.2.3 type_id_item 291

11.2.4 proto_id_item 292

11.2.5 ield_id_item 293

11.2.6 method_id_item 293

11.2.7 class_def_item 294

11.3 DEX文件结构 297

11.3.1 文件头(File Header) 297

11.3.2 魔数字段 298

11.3.3 检验码字段 298

11.3.4 SHA-1签名字段 300

11.3.5 map_off字段 300

11.3.6 string_ids_size和off字段 301

11.4 DEXFile接口详解 303

11.4.1 结构函数 303

11.4.2 公共办法 304

11.5 DEX和动态加载类机制 306

11.5.1 类加载机制 306

11.5.2 详细加载 306

11.5.3 代码加密 308

11.6 动态加载jar和DEX 309

第12章 Dvlik VM内存体系详解 310

12.1 怎么分配内存 310

12.2 内存办理机制详解 312

12.3 优化Dalvik虚拟机的堆内存分配 326

第13章 Dalvik VM废物搜集机制 328

13.1 引证计数算法 328

13.2 Mark Sweep算法 328

13.3 和废物搜集算法有关的函数 330

13.4 废物收回的机遇 346

13.5 调试信息 347

13.6 Dalvik VM和JVM废物搜集机制的

差异 348

第14章 Dalvik VM内存优化机制详解 350

14.1 sp和wp简介 350

14.1.1 sp根底 350

14.1.2 wp根底 351

14.2 智能指针详解 351

14.2.1 智能指针根底 352

14.2.2 轻量级指针 353

14.2.3 强指针 355

14.2.4 弱指针 365

第15章 剖析Dalvik VM的发动进程 369

15.1 Dalvik VM发动流程概览 369

15.2 Dalvik VM发动进程详解 370

15.2.1 创立Dalvik VM实例 370

15.2.2 指定一系列操控选项 371

15.2.3 创立并初始化Dalvik VM

实例 376

15.2.4 创立JNIEnvExt方针 378

15.2.5 设置当时进程和进程组ID 382

15.2.6 注册Android中心类的JNI

办法 382

15.2.7 创立javaCreateThreadEtc

钩子 385

第16章 注册Dalvik VM并创立线程 387

16.1 注册Dalvik VM的JNI办法 387

16.1.1 设置加载程序 387

16.1.2 加载so文件并验证 387

16.1.3 获取描绘类 392

16.1.4 注册JNI办法 392

16.1.5 完结JNI操作 394

16.2 创立Dalvik VM进程 395

16.2.1 剖析底层发动进程 395

16.2.2 创立Dalvik VM进程 395

16.2.3 初始化运转的Dalvik VM 398

16.3 创立Dalvik VM线程 399

16.3.1 检查状况值 399

16.3.2 创立线程 399

16.3.3 剖析发动进程 402

16.3.4 整理线程 404

第17章 Dalvik VM反常处理详解 407

17.1 Java反常处理机制 407

17.1.1 办法调用栈 407

17.1.2 Java供给的反常处理类 409

17.2 Java VM反常处理机制详解 409

17.2.1 Java语言及虚拟机的反常

处理机制 410

17.2.2 COSIX虚拟机反常处理的

规划与完结 410

17.3 剖析Dalvik虚拟机反常处理的

源码 414

17.3.1 初始化虚拟机运用的反常

Java类库 414

17.3.2 抛出一个线程反常 415

17.3.3 继续抛出进程 415

17.3.4 找出反常原因 416

17.3.5 找出反常原因 417

17.3.6 铲除挂起的反常和等候

初始化的反常 420

17.3.7 包装“现在等候”反常的

不同破例 420

17.3.8 输出盯梢当时反常的过错

信息 421

17.3.9 查找和当时反常相匹配的

办法 421

17.3.10 获取匹配的捕获块 423

17.3.11 进行仓库盯梢 424

17.3.12 生成仓库盯梢元素 425

17.3.13 将内容增加到仓库盯梢

日志中 426

17.3.14 将内容增加到仓库盯梢

日志中 427

17.4 常见反常的类型与原因 428

17.4.1 SQLException:操作数据库

反常类 428

17.4.2 ClassCastException:数据

类型转化反常 428

17.4.3 NumberFormatException:

字符串转化为数字类型时

抛出的反常 428

17.5 调用仓库盯梢剖析反常 429

17.5.1 处理段过错 429

17.5.2 盯梢Android Callback调用

仓库 431

第18章 JIT编译 434

18.1 JIT简介 434

18.1.1 JIT概述 434

18.1.2 Java虚拟机首要的优化

技能 436

18.1.3 Dalvik中JIT的完结 436

18.2 Dalvik VM对JIT的支撑 436

18.3 汇编代码和改动 438

18.3.1 汇编部分代码 438

18.3.2 对C文件的改动 438

18.4 Dalvik VM中的JIT源码 439

18.4.1 进口文件 439

18.4.2 中心函数 447

18.4.3 编译文件 450

18.4.4 BasicBlock处理 458

18.4.5 内存初始化 459

18.4.6 对JIT源码的总结 462

第19章 Dalvik VM内存优化 463

19.1 Android内存优化的效果 463

19.2 检查Android内存和CPU运用情况 464

19.2.1 运用Android API函数检查 464

19.2.2 直接对Android文件进行

解析查询 464

19.2.3 经过Runtime类完结 465

19.2.4 运用DDMS东西获取 465

19.2.5 其他办法 469

19.3 Android的内存走漏 472

19.3.1 什么是内存走漏 472

19.3.2 为什么会发作内存走漏 473

19.3.3 shallow size、retained size 474

19.3.4 检查Android内存走漏的

东西——MAT 475

19.3.5 检查Android内存走漏的

办法 478

19.3.6 Android(Java)中常见的简单

引起内存走漏的不良代码 480

19.4 常见的引起内存走漏的坏习惯 480

19.4.1 查询数据库时忘掉

封闭游标 481

19.4.2 结构Adapter时不习惯运用

缓存的convertView 481

19.4.3 没有及时开释方针的引证 482

19.4.4 不在运用Bitmap方针时调用

recycle()开释内存 482

19.5 处理内存走漏实践 483

19.5.1 运用MAT依据heap dump剖析Java代码内存走漏的本源 483

19.5.2 演练Android中内存走漏

代码优化及检测 489

第20章 Dalvik VM功能优化 491

20.1 加载APK/DEX文件优化 491

20.1.1 APK文件介绍 492

20.1.2 DEX文件优化 493

20.1.3 运用类动态加载技能完结

加密优化 493

20.2 SD卡优化 496

20.3 虚拟机优化详解 497

20.3.1 渠道优化—ARM的流水线

技能 497

20.3.2 Android对C库优化 501

20.3.3 优化创立的进程 504

20.3.4 烘托优化 504

第21章 剖析ART的发动进程 508

21.1 运转环境的转化 508

21.2 运转 app_process 进程 509

21.3 预备发动 512

21.4 创立运转实例 518

21.5 注册本地JNI函数 519

21.6 发动看护进程 520

21.7 解析参数 521

21.8 初始化类、办法和域 528

第22章 履行ART主程序 534

22.1 进入main主函数 534

22.2 查找方针类 535

22.2.1 函数LookupClass() 535

22.2.2 函数DefineClass() 537

22.2.3 函数InsertClass() 540

22.2.4 函数LinkClass() 541

22.3 类操作 543

22.4 完结保管操作 544

第23章 装置APK运用程序 549

23.1 PackageManagerService概述 549

23.2 主函数main 549

23.3 调用初始化函数 550

23.4 创立PackageManagerService服务 553

23.5 扫描并解析 554

23.6 保存解析信息 570

第24章 ART环境装置APK运用程序 572

24.1 Android装置APK概述 572

24.2 发动时装置 572

24.3 ART装置 581

24.4 完结dex2oat转化 586

24.4.1 参数解析 586

24.4.2 创立 OAT文件指针 588

24.4.3 dex2oat预备作业 588

24.4.4 提取classes.dex文件 589

24.4.5 创立OAT文件 594

24.5 APK文件的转化 595

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值