shi*_*hao 5 java linux android dalvik android-runtime
我不太确定将哪种代码加载到 android 平台上的 linux 进程中。
如果android采用Dalvik,进程包含一个Dalvik VM和应用程序的代码,代码是Dalvik字节码的形式吗?如果是,代码是否与.apk文件中的classes.dex相同?
如果android采用Android Runtime(ART),由于classes.dex已经被翻译成原生机器码,所以我认为Linux进程中app的代码不会是Dalvik字节码,而是原生机器码。如果我的理解是正确的,那么Dalvik VM是否仍然包含在进程中?
从 Android 5.0 (Lollipop)开始,Dalvik 已完全被 Android Runtime (ART)取代,后者处理本机二进制文件。
Android 运行时(ART) 是运行 Android 5.0(API 级别 21)及更高版本的设备的默认运行时。
在安装时,ART 使用设备上的 dex2oat 工具编译应用程序。该实用程序接受 DEX 文件作为输入,并为目标设备生成编译后的应用程序可执行文件
更具体地说,Dalvik 提倡使用 odex 文件,这些文件是 dex 文件的预处理优化版本,供 Dalvik 解释或 JIT 编译。
ART 提倡使用 ELF 文件,这是一种通用格式,可指导将某些功能和对象链接到设备的本机指令(在安装时执行)。
与 Dalvik 不同,ART通过在安装时将整个应用程序编译为本机机器代码,引入了提前 (AOT) 编译的使用。
ART 使用与 Dalvik 相同的输入字节码,通过标准 .dex 文件作为 APK 文件的一部分提供,而 .odex 文件则替换为可执行和可链接格式 (ELF) 可执行文件。使用 ART 的设备上 dex2oat 实用程序编译应用程序后,它将仅从编译后的 ELF 可执行文件运行
Android 使用 ELF .so(共享对象)库作为 Java 本机接口。使用 Android Runtime (ART)(自 Android 5.0“Lollipop”以来的默认设置),所有应用程序在安装时都会编译为本机 ELF 二进制文件
ART 不包含 Dalvik 实例,虽然大部分兼容,但提到 ART 不支持 Dalvik 支持的某些功能。
然而,一些适用于 Dalvik 的技术不适用于 ART。本文档让您了解在迁移现有应用程序以与 ART 兼容时需要注意的事项。大多数应用程序在使用 ART 运行时应该可以正常工作。