在android platfrom,Dalvik字节码或本机机器代码的过程中哪种代码?

时间:2017-08-30 03:05:51

标签: java android linux dalvik android-runtime

我不太确定在Android平台上的linux进程中加载​​了哪种代码。

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

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

1 个答案:

答案 0 :(得分:1)

自Android 5.0 (Lollipop) 起,Dalvik已完全被Android Runtime取代 (ART) ,它处理 native 二进制文件。

<子> Verifying App Behavior on the Android Runtime

  

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

           

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

更具体地说,Dalvik推广使用odex文件,这些文件是Dalvik的dex文件的预处理优化版本,可以解释或JIT编译。

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

<子> Wikipedia - Android Runtime

  

与Dalvik不同,ART通过在安装时将整个应用程序编译为本机机器代码来介绍使用提前(AOT)编译。            

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

<子> Executable and Linkable Format - Applications

  

Android为Java Native Interface使用ELF .so(共享对象)库。使用Android Runtime(ART),自Android 5.0“Lollipop”以来的默认设置,所有应用程序在安装时都会编译为本机ELF二进制文件

ART不包含Dalvik的实例,虽然大多数都是兼容的,但是提到了不支持Dalvik支持的某些功能。

<子> Verifying App Behavior on the Android Runtime

  

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