图书介绍
深入解析ANDROID虚拟机PDF|Epub|txt|kindle电子书版本网盘下载
![深入解析ANDROID虚拟机](https://www.shukui.net/cover/6/31932365.jpg)
- 钟世礼编著 著
- 出版社: 北京:人民邮电出版社
- ISBN:7115423535
- 出版时间:2016
- 标注页数:598页
- 文件大小:103MB
- 文件页数:610页
- 主题词:
PDF下载
下载说明
深入解析ANDROID虚拟机PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第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 Kernel14
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章 分析JNI52
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 直接转向JNI58
4.2.6 扫描函数scanFile59
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)机制Binder71
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 接口MemoryBase101
5.3.2 接口MemoryBase108
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 分解剖析Activity117
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章 I PC进程通信机制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 解析service179
8.4.1 Zygote对应的service action179
8.4.2 init组织service180
8.4.3 函数parse_ service和parse_line_service181
8.5 字段on184
8.5.1 Zygote对应的on actio184
8.5.2 init组织on185
8.5.3 解析on用到的函数186
8.6 在init控制service186
8.6.1 启动Zygote186
8.6.2 启动service187
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 分析SystemServer217
9.2.3 分析EntropyService220
9.2.4 分析DropBoxManagerService222
9.2.5 分析DiskStatsService227
9.2.6 分析DeviceStorageManager Service231
9.2.7 分析SamplingProfilerService233
9.2.8 分析ClipboardService241
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 启动Zygote276
10.3.1 在init.rc中配置Zygote启动参数276
10.3.2 启动Socket服务端口276
10.3.3 加载preload-classes277
10.3.4 加载preload-resources277
10.3.5 使用folk启动新进程278
10.4 启动SystemServer进程278
10.4.1 启动各种系统服务线程279
10.4.2 启动第一个Activity280
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_list286
11.2.2 string_id_item288
11.2.3 type_id_item291
11.2.4 proto_ id_ item292
11.2.5 ield_id_item293
11.2.6 method_id_item293
11.2.7 class_def_item294
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和DEX309
第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 设置当前进程和进程组ID382
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 VM398
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 size474
19.3.4 查看Android内存泄露的工具——MAT475
19.3.5 查看Android内存泄露的 方法478
19.3.6 Android ( Java)中常见的容易引起内存泄漏的不良代码480
19.4 常见的引起内存泄露的坏习惯480
19.4.1 查询数据库时忘记关闭游标481
19.4.2 构造Adapter时不习惯使用缓存的convertView481
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 主函数main549
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