3

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

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

在我读过的一些关于传闻中的变化的文章中,我看到有人说“我喜欢 ART,如果 X 应用程序支持它,我现在就使用它”。(我记得提到的一个应用是 Xposed)

我已将手机切换到 ART,并且我的应用程序似乎运行良好,所以我猜标题问题的答案是否定的,但我很好奇 Xposed 应用程序是如何不兼容的。他们做了什么(或没有做什么)使他们的应用无法在 ART 中运行?

4

2 回答 2

3

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

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

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

与 Dalvik相比, ART 提供了几个优势:

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

它还应该有助于解决DEX 限制等问题。

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

Google 在 2014 年 Google I/O 上宣布,在 Android “L” 及以后的版本中,ART 将取代 Dalvik。

于 2014-06-20T13:37:04.030 回答
0

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

于 2015-04-08T06:28:57.267 回答