对于ART和Dalvik,我是否需要以不同的方式编码?

时间:2014-06-20 13:27:51

标签: android art-runtime

我一直在看到报道(谣言)很快Android将从Dalvik切换到ART,因为它是默认运行时。我不知道这意味着什么,我猜运行时是(有点像?),就像操作系统一样。

我的应用程序没有做任何特别特殊/独特的事情,主要是它发出数据的HTTP请求,并且使用了几次LocationListeners。

在一些我读过有关谣言变化的文章中,我看到有些人说“我喜欢ART,如果X app支持它,我会立即使用它”。 (我记得被提及的一个应用程序是Xposed)

我已将手机切换为ART,我的应用程序似乎工作正常,所以我猜测标题问题的答案是否定的,但我很好奇Xposed应用程序是如何兼容的。他们做了什么(或没做过)使他们的应用程序不能用于ART?

2 个答案:

答案 0 :(得分:3)

ART是Android应用程序的不同运行时。所有Android应用程序都在虚拟机内部运行,就像在Java VM中运行Java代码一样。

经典地,当您编译Android应用程序时,它将编译为Dalvik字节代码,旨在在Dalvik运行时(虚拟机)中运行。

在Android Kitkat中,Google引入了一个名为Android Runtime或ART的新实验运行时。这是一个不同的虚拟机,是Android应用程序运行时的重新实现,有助于修复原始设计中的一些基本缺陷。

ART在Dalvik上提供several advantages

  • 提前(AOT)编辑
  • 改进垃圾收集
  • 开发和调试改进
    • 支持采样分析器
    • 支持更多调试功能
    • 改进了例外和崩溃报告中的诊断细节

它还应该有助于DEX limit

之类的东西

关于你的问题,你不需要做任何开发人员的事情。谷歌明确表示“Dalvik必须保持默认运行时,否则你可能会破坏Android实施和第三方应用程序”。

Google已在Google I / O 2014上宣布,在Android“L”版及更高版本中,ART将取代Dalvik。

答案 1 :(得分:0)

ART已经在Nexus设备上取代了Dalvik,而我在谷歌商店中提供的六个现有应用程序现在都无法运行。我看到有关ART导致应用失败的多个问题列表。我怀疑"新的和改进的"内存管理垃圾收集是其中很多的根本原因。我的三星设备没有选择ART而不是Dalvik的选项,所以我现在只收到Android 5.x下失败的用户报告。据报道,本机接口的实现明显不那么宽容,并且需要不同的和更明确定义的全局指针,其中先前的本地指针将正确地操作。这意味着任何使用本机代码和JNI(本机接口)的人都可能需要重新编写应用程序代码,或者使用更稳定的系统架构来定位不同的平台。