我需要为ART和Dalvik编写不同的代码吗?

3
我看到一些报道(谣言)称,安卓很快就会从Dalvik切换到ART作为默认运行时。我不太清楚这意味着什么,我猜运行时有点像操作系统。
我的应用程序在某种程度上并没有做什么特别的/独特的事情,大多数情况下它只是请求数据的HTTP请求,并且偶尔使用LocationListeners。
在一些关于这个传闻变化的文章中,我看到一些人说类似于“我喜欢ART,如果X应用程序支持它,我会立即使用它”。 (我记得提到过的一个应用程序是Xposed)
我已经将我的手机切换到ART,我的应用程序似乎工作正常,所以我猜标题问题的答案是否定的,但我很好奇Xposed应用程序为什么不兼容。他们做了什么(或者没做)使他们的应用程序无法在ART中工作?

3
应用程序应继续无需更改地运行。如果安卓/谷歌不这样做,他们就会自断双脚...尽管这种事以前也曾发生过。 - 323go
Xposed是一款相当专业的应用程序。基本上使用代码注入来自定义系统级功能,而无需安装新的ROM。普通应用程序很少会出现与ART相关的问题,但您可以在https://developer.android.com/guide/practices/verifying-apps-art.html上查看检查清单。 - matiash
2个回答

3
ART是Android应用的一种不同运行时。所有Android应用都在虚拟机内运行,就像Java代码在Java虚拟机中运行一样。
经典地,当您编译Android应用程序时,它会编译为Dalvik字节码,设计为在Dalvik运行时(虚拟机)中运行。
然而,在Android Kitkat中,谷歌推出了一个名为Android Runtime(ART)的新实验性运行时。这是一个不同的虚拟机,重新实现了Android应用程序的运行时,以帮助修复原始设计中的一些基本缺陷。
ART相对于Dalvik提供了几个优点:
- 预先编译(AOT) - 改进的垃圾回收 - 开发和调试改进 - 支持抽样分析器 - 支持更多的调试功能 - 在异常和崩溃报告中提供了更好的诊断细节
它还应该有助于解决DEX限制等问题。
关于你的问题,作为开发者,你无需做任何事情。Google已经明确表示,“Dalvik必须保持默认运行时,否则您会破坏您的Android实现和第三方应用程序”。
Google在2014年的Google I/O大会上宣布,在Android“L”版本及以后,ART将取代Dalvik。

好的,谢谢 :). 我现在会阅读你发布的链接。 - TMH
关于DEX限制,请参见:https://dev59.com/gWEi5IYBdhLWcg3wNqLN - Morrison Chang

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接