【问题标题】:Do I need to code things differently for ART vs Dalvik?我需要为 ART 和 Dalvik 编写不同的代码吗?
【发布时间】:2014-06-20 13:27:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • 应用程序应该继续工作而无需更改。如果他们不这样做,Android/Google 将集体自责……这不是以前没有发生过的。
  • Xposed 是一个相当专业的应用程序。基本上使用代码注入来自定义系统级功能,而无需安装新的 ROM。 “普通”应用不太可能在 ART 上出现问题,但您可以在 developer.android.com/guide/practices/verifying-apps-art.html 上查看清单

标签: android art-runtime


【解决方案1】:

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

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

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

ART 通过 Dalvik 提供 several advantages

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

它还应该有助于处理 DEX limit 之类的事情。

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2017-02-13
    相关资源
    最近更新 更多