Android应用开发中的ART与Dalvik bytecode关系探讨
在Android系统中,Dalvik虚拟机和随后的Android Runtime (ART) 是两个重要的组成部分。
Dalvik虚拟机及其字节码
最初的Dalvik虚拟机使用Dalvik字节码作为其唯一指令集。Android应用程序打包为APK文件时,其中包含一系列名为DEX( Dalvik Executable)的格式化的Dalvik字节码文件。这些文件在运行时被解释器加载并执行。
Dalvik VM的主要问题是它的性能不佳以及对于大规模应用的支持有限。因此,谷歌引入了ART来改善。
ART与Dalvik bytecode的关系
保留对DEX的支持
即使是ART,它依然必须能够支持所有的Dalvik指令集及其格式(即DEX)。这是因为Android系统允许开发者用任何工具创建的任何形式的APK进行安装和运行。因此,ART必须兼容Dalvik虚拟机及其字节码。Dalvik与ART的并行关系
在转换过程中,可以将一些原始的Dalvik字节码编译成本机代码(Native code),而剩余部分则继续由虚拟机解释执行。这种混合模型有助于提高应用性能,并保持原有的兼容性。安装时DEX到oat文件的转换
使用dex2oat工具,运行在Android设备上的ART能够在应用安装时或首次执行前将DEX文件转换为可执行格式(oat文件)。此过程会生成针对特定硬件架构优化后的代码版本,并在必要时对所有有效的DEX文件进行编译处理。Dalvik至ART的兼容性
尽管ART与早期的Dalvik运行时具有不同的实施方式,但它们都基于相同的指令格式——即上述提到的Dalvik字节码。这意味着开发的应用程序不需要重新编写即可迁移到ART上运行,尽管某些针对旧版本的技术可能在新环境中不再适用。
综上所述,虽然ART采用了不同的执行机制与架构设计,但它依旧保留了对原始Dalvik Executable DEX byte code的支持这一基础属性,使得开发者在向新版系统迁移时可以顺利进行,并且应用能够以接近原生的性能水平运行。