《深入解析Android虚拟机》[52M]百度网盘|亲测有效|pdf下载
深入解析Android虚拟机
更新日期:2024-07-23 22:19:31
书店:博库网旗舰店
出版时间:2016-09
浏览量:60
价格:0.0¥

书籍下载
内容介绍

基本信息

  • 商品名称:深入解析Android虚拟机
  • 作者:编者:钟世礼
  • 定价:99
  • 出版社:人民邮电
  • ISBN号:9787115423535

其他参考信息(以实物为准)

  • 出版时间:2016-09-01
  • 印刷时间:2016-09-01
  • 版次:1
  • 印次:1
  • 开本:16开
  • 包装:平装
  • 页数:595
  • 字数:1004千字

内容提要

Android系统从诞生到现在的短短几年时间里, 凭借其易用性和开发的简洁性,赢得了广大开发者的 支持。在整个Android系统中,Dalvik VM一直是贯穿 从底层内核到高层应用开发的核心。钟世礼编著的《 深入解析Android虚拟机》循序渐进地讲解了Android 虚拟机系统的基本知识,并剖析了其整个内存系统的 进程和运作流程,并对虚拟机系统优化和异常处理的 知识进行了详细讲解。本书几乎涵盖了Dalvik VM系 统的所有主要内容,并且讲解方法通俗易懂,特别有 利于读者学习并消化。
     本书适合Android初学者、Android底层开发人 员、源代码分析人员和虚拟机开发人员学习,也可以 作为大专院校相关专业师生的学习用书和培训学校的 教材。
    

作者简介

钟世礼,计算机硕士,精通C、C++、Linux、Java开发技术,擅长多媒体硬件处理、多媒体信号采集、嵌入式系统集成、物联网、大数据等开发技术,对蓝牙技术、传感器、NFC数据传播、红外传输技术有独特的见解。毕业后就职于施耐德公司,负责智能家居系统的研究、开发和产品设计工作,和开发团队一起研究出多款功能强大的智能家居、健康仪器、智能电视、车载设备等大型系统。在Android底层架构和驱动开发方面有着丰富的经验,**的硬件驱动开发专家。

目录

**章 获取并编译Android源码
1.1 获取Android源码
1.1.1 在Linux系统获取Android
源码
1.1.2 在Windows平台获取Android
源码
1.1.3 Windows获取Android L源码
1.2 分析Android源码结构
1.3 编译Android源码
1.3.1 搭建编译环境
1.3.2 开始编译
1.3.3 在模拟器中运行
1.3.4 常见的错误分析
1.3.5 实践演练—演示两种编译Android程序的方法
1.4 编译Android Kernel
1.4.1 获取Goldfish内核代码
1.4.2 获取MSM内核代码
1.4.3 获取OMAP内核代码
1.4.4 编译Android的Linux内核
第2章 Java虚拟机基础
2.1 虚拟机的作用
2.2 Java虚拟机概述
2.2.1 JVM的数据类型
2.2.2 Java虚拟机体系结构
2.2.3 JVM的生命周期
2.3 JVM的安全性
2.3.1 JVM的安全模型
2.3.2 沙箱模型的4种组件
2.3.3 分析Java的策略机制
2.4 网络移动性
2.4.1 现实需要网络移动性
2.4.2 网络移动性
2.5 内存异常和垃圾处理
2.5.1 内存分配中的栈和堆
2.5.2 运行时的数据区域
2.5.3 对象访问
2.5.4 内存泄露
2.5.5 JVM的垃圾收集策略
2.5.6 垃圾收集器
2.6 Java内存模型
2.6.1 Java内存模型概述
2.6.2 主内存与工作内存
2.6.3 内存间交互操作
第3章 Dalvik和ART基础
3.1 Dalvik VM和JVM的差异
3.2 Dalvik虚拟机的主要特征
3.3 Dalvik VM架构
3.3.1 Dalvik虚拟机的代码结构
3.3.2 dx工具
3.3.3 Dalvik VM的进程管理
3.3.4 Android的初始化流程
3.4 Dalvik VM控制VM命令详解
3.4.1 基本命令
3.4.2 扩展的JNI检测
3.4.3 断言
3.4.4 字节码校验和优化
3.4.5 Dalvik VM的运行模式
3.4.6 死锁预测
3.4.7 dump堆栈追踪
3.4.8 dex文件和校验
3.4.9 产生标志位
3.5 ART机制基础
3.5.1 什么是ART模式
3.5.2 ART优化机制基础
第4章 分析JNI
4.1 JNI的本质
4.2 分析Java层
4.2.1 加载JNI库
4.2.2 实现扫描工作
4.2.3 读取并保存信息
4.2.4 删除SD卡外的信息
4.2.5 直接转向JNI
4.2.6 扫描函数scanFile
4.2.7 JNI中的异常处理
4.3 分析JNI层
4.3.1 将Native对象的指针保存到
Java对象
4.3.2 创建Native层的MediaScanner
对象
4.4 Native(本地)层
4.4.1 注册JNI函数
4.4.2 完成注册工作
4.4.3 动态注册
4.4.4 处理路径参数
4.4.5 扫描文件
4.4.6 添加TAG信息
4.4.7 总结函数JNI_OnLoad()与函数JNI_OnUnload()的用途
4.4.8 Java与JNI基本数据类型
转换
4.4.9 JNIEnv接口
4.4.10 JNI中的环境变量
第5章 分析内存系统
5.1 分析Android的进程通信机制
5.1.1 Android的进程间通信(IPC)
机制Binder
5.1.2 Service Manager是Binder
机制的上下文管理者
5.1.3 Service Manager服务
5.2 匿名共享内存子系统详解
5.2.1 基础数据结构
5.2.2 初始化处理
5.2.3 打开匿名共享内存设备文件
5.2.4 内存映射
5.2.5 读写操作
5.2.6 锁定和解锁
5.2.7 回收内存块
5.3 C++访问接口层详解
5.3.1 接口MemoryBase
5.3.2 接口MemoryBase
5.4 Java访问接口层详解
第6章 Android程序的生命周期管理
6.1 Android程序的生命周期
6.1.1 进程和线程
6.1.2 进程的类型
6.2 Activity的生命周期
6.2.1 Activity的几种状态
6.2.2 分解剖析Activity
6.2.3 几个典型的场景
6.2.4 管理Activity的生命周期
6.2.5 Activity的实例化与启动
6.2.6 Activity的暂停与继续
6.2.7 Activity的关闭/销毁与
重新运行
6.2.8 Activity的启动模式
6.3 进程与线程
6.3.1 进程
6.3.2 线程
6.3.3 线程安全的方法
6.3.4 Android的线程模型
6.4 测试生命周期
6.5 Service的生命周期
6.5.1 Service的基本概念和用途
6.5.2 Service的生命周期详解
6.5.3 Service与Activity通信
6.6 Android广播的生命周期
6.6.1 Android 的广播机制
6.6.2 编写广播程序
6.7 ART进程管理
第7章 IPC进程通信机制
7.1 Binder机制概述
7.2 Service Manager是Binder机制的
上下文管理者
7.2.1 入口函数
7.2.2 打开Binder设备文件
7.2.3 创建设备文件
7.2.4 管理内存映射地址空间
7.2.5 发生通知
7.2.6 循环等待
7.3 内存映射
7.3.1 实现内存分配功能
7.3.2 分配物理内存
7.3.3 释放物理页面
7.3.4 分配内核缓冲区
7.3.5 释放内核缓冲区
7.3.6 查询内核缓冲区
第8章 init进程详解
8.1 init基础
8.2 分析入口函数
8.3 配置文件详解
8.3.1 init.rc简介
8.3.2 分析init.rc的过程
8.4 解析service
8.4.1 Zygote对应的service action
8.4.2 init组织service
8.4.3 函数parse_service和parse_line_service
8.5 字段on
8.5.1 Zygote对应的on action
8.5.2 init组织on
8.5.3 解析on用到的函数
8.6 在init控制service
8.6.1 启动Zygote
8.6.2 启动service
8.6.3 种启动service的方式
8.7 控制属性服务
8.7.1 引入属性
8.7.2 初始化属性服务
8.7.3 启动属性服务
8.7.4 处理设置属性的请求
第9章 Dalvik VM的进程系统
9.1 Zygote(孕育)进程详解
9.1.1 Zygote基础
9.1.2 分析Zygote的启动过程
9.2 System进程详解
9.2.1 启动System进程前的准备
工作
9.2.2 分析SystemServer
9.2.3 分析EntropyService
9.2.4 分析DropBoxManagerService
9.2.5 分析DiskStatsService
9.2.6 分析DeviceStorageManager Service
9.2.7 分析SamplingProfilerService
9.2.8 分析ClipboardService
9.3 应用程序进程详解
9.3.1 创建应用程序
9.3.2 启动线程池
9.3.3 创建信息循环
**0章 Dalvik VM运作流程详解
10.1 Dalvik VM相关的可执行程序
10.1.1 dalvikvm、dvz和app_process
简介
10.1.2 对比app_process和dalvikvm的
执行过程
10.2 初始化Dalvik虚拟机
10.2.1 开始虚拟机的准备工作
10.2.2 初始化跟踪显示系统
10.2.3 初始化垃圾回收器
10.2.4 初始化线程列表和主线程
环境参数
10.2.5 分配内部操作方法的表格
内存
10.2.6 初始化虚拟机的指令码相关
的内容
10.2.7 分配指令寄存器状态的
内存
10.2.8 分配指令寄存器状态的内存
和ZUI基本用的Java库
10.2.9 初始化使用的Java类库
线程类
10.2.10 初始化虚拟机使用的异常
Java类库
10.2.11 初始化其他对象
10.3 启动Zygote
10.3.1 在init.rc中配置Zygote启动
参数
10.3.2 启动Socket服务端口
10.3.3 加载preload-classes
10.3.4 加载preload-resources
10.3.5 使用folk启动新进程
10.4 启动SystemServer进程
10.4.1 启动各种系统服务线程
10.4.2 启动DIYI个Activity
10.5 加载class类文件
10.5.1 DexFile在内存中的映射
10.5.2 ClassObject—Class在
加载后的表现形式
10.5.3 加载Class并生成相应
ClassObject的函数
10.5.4 加载基本类库文件
10.5.5 加载用户类文件
**1章 DEX文件详解
11.1 DEX文件介绍
11.2 DEX文件的格式
11.2.1 map_list
11.2.2 string_id_item
11.2.3 type_id_item
11.2.4 proto_id_item
11.2.5 ield_id_item
11.2.6 method_id_item
11.2.7 class_def_item
11.3 DEX文件结构
11.3.1 文件头(File Header)
11.3.2 魔数字段
11.3.3 检验码字段
11.3.4 SHA-1签名字段
11.3.5 map_off字段
11.3.6 string_ids_size和off字段
11.4 DEXFile接口详解
11.4.1 构造函数
11.4.2 公共方法
11.5 DEX和动态加载类机制
11.5.1 类加载机制
11.5.2 具体加载
11.5.3 代码加密
11.6 动态加载jar和DEX
**2章 Dvlik VM内存系统详解
12.1 如何分配内存
12.2 内存管理机制详解
12.3 优化Dalvik虚拟机的堆内存分配
**3章 Dalvik VM垃圾收集机制
13.1 引用计数算法
13.2 Mark Sweep算法
13.3 和垃圾收集算法有关的函数
13.4 垃圾回收的时机
13.5 调试信息
13.6 Dalvik VM和JVM垃圾收集机制的
区别
**4章 Dalvik VM内存优化机制详解
14.1 sp和wp简介
14.1.1 sp基础
14.1.2 wp基础
14.2 智能指针详解
14.2.1 智能指针基础
14.2.2 轻量级指针
14.2.3 强指针
14.2.4 弱指针
**5章 分析Dalvik VM的启动过程
15.1 Dalvik VM启动流程概览
15.2 Dalvik VM启动过程详解
15.2.1 创建Dalvik VM实例
15.2.2 指定一系列控制选项
15.2.3 创建并初始化Dalvik VM
实例
15.2.4 创建JNIEnvExt对象
15.2.5 设置当前进程和进程组ID
15.2.6 注册Android核心类的JNI
方法
15.2.7 创建javaCreateThreadEtc
钩子
**6章 注册Dalvik VM并创建线程
16.1 注册Dalvik VM的JNI方法
16.1.1 设置加载程序
16.1.2 加载so文件并验证
16.1.3 获取描述类
16.1.4 注册JNI方法
16.1.5 实现JNI操作
16.2 创建Dalvik VM进程
16.2.1 分析底层启动过程
16.2.2 创建Dalvik VM进程
16.2.3 初始化运行的Dalvik VM
16.3 创建Dalvik VM线程
16.3.1 检查状态值
16.3.2 创建线程
16.3.3 分析启动过程
16.3.4 清理线程
**7章 Dalvik VM异常处理详解
17.1 Java异常处理机制
17.1.1 方法调用栈
17.1.2 Java提供的异常处理类
17.2 Java VM异常处理机制详解
17.2.1 Java语言及虚拟机的异常
处理机制
17.2.2 COSIX虚拟机异常处理的
设计与实现
17.3 分析Dalvik虚拟机异常处理的
源码
17.3.1 初始化虚拟机使用的异常
Java类库
17.3.2 抛出一个线程异常
17.3.3 持续抛出进程
17.3.4 找出异常原因
17.3.5 找出异常原因
17.3.6 清除挂起的异常和等待
初始化的异常
17.3.7 包装“现在等待”异常的
不同例外
17.3.8 输出跟踪当前异常的错误
信息
17.3.9 搜索和当前异常相匹配的
方法
17.3.10 获取匹配的捕获块
17.3.11 进行堆栈跟踪
17.3.12 生成堆栈跟踪元素
17.3.13 将内容添加到堆栈跟踪
日志中
17.3.14 将内容添加到堆栈跟踪
日志中
17.4 常见异常的类型与原因
17.4.1 SQLException:操作数据库
异常类
17.4.2 ClassCastException:数据
类型转换异常
17.4.3 NumberFormatException:
字符串转换为数字类型时
抛出的异常
17.5 调用堆栈跟踪分析异常
17.5.1 解决段错误
17.5.2 跟踪Android Callback调用
堆栈
**8章 JIT编译
18.1 JIT简介
18.1.1 JIT概述
18.1.2 Java虚拟机主要的优化
技术
18.1.3 Dalvik中JIT的实现
18.2 Dalvik VM对JIT的支持
18.3 汇编代码和改动
18.3.1 汇编部分代码
18.3.2 对C文件的改动
18.4 Dalvik VM中的JIT源码
18.4.1 入口文件
18.4.2 核心函数
18.4.3 编译文件
18.4.4 BasicBlock处理
18.4.5 内存初始化
18.4.6 对JIT源码的总结
**9章 Dalvik VM内存优化
19.1 Android内存优化的作用
19.2 查看Android内存和CPU使用情况
19.2.1 利用Android API函数查看
19.2.2 直接对Android文件进行
解析查询
19.2.3 通过Runtime类实现
19.2.4 使用DDMS工具获取
19.2.5 其他方法
19.3 Android的内存泄露
19.3.1 什么是内存泄漏
19.3.2 为什么会发生内存泄露
19.3.3 shallow size、retained size
19.3.4 查看Android内存泄露的
工具——MAT
19.3.5 查看Android内存泄露的
方法
19.3.6 Android(Java)中常见的容易
引起内存泄漏的不良代码
19.4 常见的引起内存泄露的坏习惯
19.4.1 查询数据库时忘记
关闭游标
19.4.2 构造Adapter时不习惯使用
缓存的convertView
19.4.3 没有及时释放对象的引用
19.4.4 不在使用Bitmap对象时调用
recycle()释放内存
19.5 解决内存泄露实践
19.5.1 使用MAT根据heap dump分析Java代码内存泄漏的根源
19.5.2 演练Android中内存泄露
代码优化及检测
第20章 Dalvik VM性能优化
20.1 加载APK/DEX文件优化
20.1.1 APK文件介绍
20.1.2 DEX文件优化
20.1.3 使用类动态加载技术实现
加密优化
20.2 SD卡优化
20.3 虚拟机优化详解
20.3.1 平台优化—ARM的流水线
技术
20.3.2 Android对C库优化
20.3.3 优化创建的进程
20.3.4 渲染优化
第21章 分析ART的启动过程
21.1 运行环境的转换
21.2 运行 app_process 进程
21.3 准备启动
21.4 创建运行实例
21.5 注册本地JNI函数
21.6 启动守护进程
21.7 解析参数
21.8 初始化类、方法和域
第22章 执行ART主程序
22.1 进入main主函数
22.2 查找目标类
22.2.1 函数LookupClass()
22.2.2 函数DefineClass()
22.2.3 函数InsertClass()
22.2.4 函数LinkClass()
22.3 类操作
22.4 实现托管操作
第23章 安装APK应用程序
23.1 PackageManagerService概述
23.2 主函数main
23.3 调用初始化函数
23.4 创建PackageManagerService服务
23.5 扫描并解析
23.6 保存解析信息
第24章 ART环境安装APK应用程序
24.1 Android安装APK概述
24.2 启动时安装
24.3 ART安装
24.4 实现dex2oat转换
24.4.1 参数解析
24.4.2 创建 OAT文件指针
24.4.3 dex2oat准备工作
24.4.4 提取classes.dex文件
24.4.5 创建OAT文件
24.5 APK文件的转换