深入解析Android虚拟机

深入解析Android虚拟机

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

掌握Android虚拟机:深入剖析Dalvik VM

内容简介

本书循序渐进的讲解了Android虚拟机系统的基本知识,并剖析了其整个内存系统的进程和运作流程,并对虚拟机系统优化和异常处理的知识进行了详细讲解。遵循由浅入深的写作方法,按照运作流程逐步分析了Dalvik VM系统的方方面面。本书几乎涵盖了Dalvik VM系统的所有主要内容,并且全书内容言简意赅,讲解方法通俗易懂、详细,不但适合应用高手们的学习,也特别有利于初学者学习并消化。

章节目录

版权信息

内容提要

前言

第1章 获取并编译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 4种启动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 分析DeviceStorageManagerService

9.2.7 分析SamplingProfilerService

9.2.8 分析ClipboardService

9.3 应用程序进程详解

9.3.1 创建应用程序

9.3.2 启动线程池

9.3.3 创建信息循环

第10章 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 分配指令寄存器状态的内存和最基本用的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 启动第一个Activity

10.5 加载class类文件

10.5.1 DexFile在内存中的映射

10.5.2 ClassObject——Class在加载后的表现形式

10.5.3 加载Class并生成相应ClassObject的函数

10.5.4 加载基本类库文件

10.5.5 加载用户类文件

第11章 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

第12章 Dvlik VM内存系统详解

12.1 如何分配内存

12.2 内存管理机制详解

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

第13章 Dalvik VM垃圾收集机制

13.1 引用计数算法

13.2 Mark Sweep算法

13.3 和垃圾收集算法有关的函数

13.4 垃圾回收的时机

13.5 调试信息

13.6 Dalvik VM和JVM垃圾收集机制的区别

第14章 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 弱指针

第15章 分析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钩子

第16章 注册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 清理线程

第17章 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

深入解析Android虚拟机是2016年由人民邮电出版社出版,作者钟世礼 。

得书感谢您对《深入解析Android虚拟机》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
精通Android网络开发 电子书
实例丰富,按照Android 5 新版本编写。 涵盖了Android网络应用中的所有主要内容: HTTP数据通信、URL处理数据、使用Socket实现数据通信、使用WebKit浏览网页数据、WiFi系统应用、蓝牙系统应用、邮件应用、RSS应用、网络视频处理、网络流量监控、网络RSS阅读器 通过案例让读者学以致用,如开发一个邮件系统、网络防火墙系统开发、开发Web版的电话本管理系统等
Android开发进阶 电子书
阿里巴巴高级工程师、CSDN博客专家、畅销书作者撰写,百度、腾讯等专家推荐的精品图书 一本只有干货,绝无赘述的好书 结合作者多年开发经验的总结,把作者以前开发走过的坑和陷阱讲解出来,看了以后可以少走很多弯路,提升自己的开发能力很快,抓住开发的痛点和需求讲解内容,使读者阅读后很有成就感。 除了全面讲解了Android开发知识外,还对单元测试、代码规范、版本控制、重构、架构等重要知识点进行了讲解,使得读者在深入技术的同时开阔眼界,能够以更专业的方式设计应用软件,完成从只会实现功能的“码农”到软件工程师、设计师的过渡。
Android 移动应用开发 电子书
本书由浅入深、系统全面地讲解了Android软件开发的基本方法和常用技能。全书分为11章,首先概述Android系统的特点和架构,并带领读者搭建Android开发环境,完成第一个Android程序;第3到10章完整地讲解了Android开发中的各种基本知识和关键技术,包括四大组件、界面布局、UI控件与事件响应、组件通信、广播机制、线程与UI通信、服务、数据存储、网络开发、传感器以及地图的使用等,通
Android应用案例开发大全 电子书
技术新颖,贴近实战:本书涵盖了现实中几乎所有的流行技术,如3D、传感器、OpenGL ES 2.0、动态壁纸、LBS百度地图的二次开发、移动办公、实时流体仿真计算引擎、服务端和Android端的交互等。 实例丰富,讲解详细:本书既包括单机版客户端项目,也有服务端和Android端的结合开发;既包括典型的商业软件,也包括休闲娱乐项目,还有流行的3D热门案例以及借助OpenGL ES 2.0渲染的逼真场景。 案例经典,含金量高:以真实的项目开发为讲解背景,包括大型商务软件、3D游戏等,无论做项目还是进行毕业设计,都可以在本书找到相同的案例,非常适合各类读者学习。
Android从入门到精通 电子书
本书以零基础讲解为宗旨,用实例引导读者学习,深入浅出地介绍了Andriod开发的相关知识和实战技能。本书第1篇【基础知识】主要讲解Android开发环境的搭建方法和应用开发基础知识等内容;第2篇【核心技术】主要讲解UI界面布局、核心组件、事件处理、Activity界面表现、Intent和IntentFilter、Service和BroadcastReceiver、应用资源管理机制、数据存储等内容;