软件是怎么运行,下载的软件怎样运行

首页 > 实用技巧 > 作者:YD1662023-12-21 21:45:28

一、虚拟机流程

Android App的运行首先要从虚拟机说起。从Android4.4开始,谷歌在原有以Dalvik虚拟机方式运行App的基础上,新增了ART模式。两者的优缺点在于:

1、Dalvik模式下,App每次运行都需要通过即时编译器将dex文件字节码转换为机器码(转换加运行),虽然会加快安装过程,但是会拖慢每次启动运行的效率。

2、ART模式下,App在第一次安装的时候,就会进行预编译,将字节码编译成机器码,机器码保存了下来。这样会使设备和app的安装与首次变慢,但后续每次启动运行都省去了转换机器码的工作,提高了运行效率。

下面来看一下JVM、Dalvik、ART虚拟机的整体流程如下图所示。

软件是怎么运行,下载的软件怎样运行(1)

虚拟机整体流程

二、ART模式下app运行过程

下面着重介绍一下ART模式下app运行的一般过程:

Zygote进程是Android系统的第一个进程,用来孵化和启动其他app。但是Zygote其实是一个不完整的Android程序进程,虽然它的内存空间包含了app所需要的所有核心库文件,但它并不具有特定app代码。

Zygote进程通过调用系统fork()函数来快速创建自身的副本进程。之所以通过Zygote进程复制新的进程是因为其比从主系统文件中加载新进程要快得多。也就是说,通过Zygote复制可以使app的启动速度更快。

软件是怎么运行,下载的软件怎样运行(2)

Zygote复制进程

新的app进程生成后,就需要加载属于本app的程序代码,这些程序代码就存储在apk文件包的classes.dex文件中。在ART模式下,通过dex2oat命令将dex文件中的字节码转为本地oat格式文件。oat格式文件是一种Android系统自带的elf文件格式,不仅包含dex文件内容,而且还包含有dex转换的机器指令。因此系统在app每次运行时不需要每次重新转换机器指令,用oat文件中已经转好的机器指令直接运行app。

软件是怎么运行,下载的软件怎样运行(3)

将dex字节码转换为oat格式文件

转换后的oat文件存储在操作系统的/data/dalvik-cache目录下。形式如下:

/data/dalvik-cache/arm/data/data@App@com.demo.test-1@test.apk@classes.dex

该路径包含包名,不与其他app隔离开。还包含cup架构,转换后的机器代码与cpu架构是相关的。

系统将oat文件和相关库文件加载到内存,并且直接映射到app进程的内存区域,app的初始化从这里开始。

软件是怎么运行,下载的软件怎样运行(4)

app初始化

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.