2017-08-30 31 views
4

我不太确定在android平台上的linux进程中加载​​哪种代码。android platfrom,Dalvik字节码或本地机器代码的过程中的哪种代码?

如果android采用Dalvik,该进程包含一个Dalvik VM和应用程序的代码,是Dalvik字节码形式的代码吗?如果是,那么代码是否与.apk文件中的classes.dex相同?

如果android采用Android Runtime(ART),因为classes.dex已被翻译成本地机器代码,所以我认为Linux进程中的应用代码不会是Dalvik字节码,而是本机机器码。如果我的理解是正确的,那么Dalvik虚拟机仍然包含在这个过程中?

+0

Dalvik不再使用,ART使用AOT编译,所以我认为这个二进制文件是原生的。 –

+0

意思是,你想知道在采用ART之后Android所使用的VM,因为ART只是一个运行环境? –

+0

@AnkurSamarya我想知道如果使用ART,VM仍然是必需的。 –

回答

1

就Android 5.0 (棒棒糖)的,Dalvik的已完全与Android运行时(ART),其处理天然二进制文件代替。

Verifying App Behavior on the Android Runtime

Android的运行时(ART)是用于运行Android 5.0(API级21)和更高设备的默认运行时。


在安装时,ART使用设备上的dex2oat工具编译应用程序。此实用工具接受DEX文件作为输入并产生一个已编译的应用程序可执行用于目标设备

更具体地,Dalvik的提倡使用ODEX文件,这些文件是在地塞米松的预处理优化版本Dalvik文件解释或JIT编译。

ART促进使用ELF文件,这是一种通用格式,可指导将某些功能和对象链接到设备的本机指令,并在安装时执行。

Wikipedia - Android Runtime

不同于Dalvik的,ART推出由使用名列前茅的时间(AOT)编译的在他们安装编译整个应用程序到本地机器代码。


ART使用相同的输入字节码的Dalvik,通过标准.DEX文件中提供的作为文件APK部分,而.odex文件与可执行和链接格式(ELF)可执行替换。一旦应用程序是通过使用设备上的dex2oat效用ART的编译,它从已编译的ELF可执行单独运行

Executable and Linkable Format - Applications

Android使用ELF的.so(共享对象)库的Java本地接口。借助Android运行时(ART),由于Android 5.0“棒棒糖”在默认情况下,所有的应用程序被编译成ELF格式的二进制文件上安装

ART不包含的Dalvik的一个实例,虽然大多compatable,它提到了一些ART不支持Dalvik支持的功能。

Verifying App Behavior on the Android Runtime

然而,一些技术,对Dalvik的工作,不上的艺术作品。本文档让您了解在迁移现有应用程序以与ART兼容时需要注意的事项。使用ART运行时,大多数应用程序应该可以工作

+0

谢谢你的明确答案。 –