将Android apk编译为ART运行时和Dalvik运行时

10

谷歌在 Android 4.4 中添加了新的 ART 运行时。我如何将我的 apk 面向 ART 和 Dalvik 两种运行时?

4个回答

5

这个变化对开发者没有影响。你的应用程序保持不变,无需进行任何操作。只需确保你的目标 API 版本为 19,这样你的应用程序就可以供 KitKat 用户使用。他们可以在手机上决定是否使用 ART 或 Dalvik。


4
错误。WhatsApp 无法在 ART 上运行。 - user577898
3
请注意,ART仍在开发中。因此,WhatsApp无法在其上运行并不一定意味着您有特殊的事情要做。 - k3v1n4ud3
这不是完全跨平台的事情..如果你的应用程序直接与虚拟机行为交互的话.. - user577898
1
注意:您不需要针对API 19进行定位,即可使应用程序可供KitKat用户使用。 - JesusFreke
同意k3v1n4ud3的观点。我引用了AOSP成员在Google Code线程中关于WhatsApp问题的发言:“我要重申,这不是WhatsApp应用程序的错。ART验证器阻止了该应用程序的安装,但我们将修复ART以解决此问题。当修复在AOSP中时,我会更新此错误。” 详情请见:https://code.google.com/p/android/issues/detail?id=61792&q=whatsapp&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars - Abhijeet Apsunde

1
这是一个老问题,但非常关键。我今天确认,在Nexus-x平板上使用ART+Android-5时,我的所有应用程序都会崩溃。 ART执行更严格的JNI检查,因此,如果您的应用程序使用Java和本地代码,则从Dalvik到ART的转换可能会破坏应用程序操作。对我来说,这是一个完全的停展。我在Google Store中有6个应用程序,现在在运行Android 5.x的Nexus设备上全部失败,但在所有4.x.x(Kitkat)系列设备上都可以正确运行。这非常令人沮丧。我正在浏览本网站上所有关于ART / Dalvik的问题和答案。 ART和Android-5.x是非常重要的变化,因此在这里提出的问题“如何将我的apk定位到Dalvik和ART?”是一个关键和非常重要的问题。时间已经证明,给出的回答建议“开发者没有区别”显然是不正确的。在我们的情况下,它肯定是错误的。
两个具体问题已经记录下来,我引用自“在Android Runtime(ART)上验证应用程序行为”: 1)“检查JNI代码的垃圾回收问题 ART正在开发一种紧凑型垃圾回收器,该回收器在Android开放源代码项目(AOSP)中。一旦使用了压缩垃圾回收器,对象可能会在内存中移动。如果您使用C / C ++代码,请勿执行与压缩GC不兼容的操作。我们已经增强了CheckJNI以识别一些潜在问题(如ICS中描述的JNI本地引用更改)。 ”换句话说,新的ART内存管理模型可能会破坏您现有的(且可运行的)本机代码。 2)“错误处理 ART的JNI在许多情况下抛出错误,而Dalvik没有。” 提供了一些导致Android 5.x ART抛出错误的问题的有限解释:http://developer.android.com/guide/practices/verifying-apps-art.html#JNI_Issues 目前在运行ART和5.x的Android设备用户之间采用的向前兼容性解决方案,并面对非操作性应用程序,是通过解锁启动加载程序,擦除设备内存并安装系统映像“ Hammerhead”将其降级到Android 4.4.4,在那些运行Nexus系列平板电脑的情况下。对于三星平板电脑,可在以下位置找到教程:http://forums.androidcentral.com/samsung-galaxy-s5/489071-tutorial-downgrade-samsung-galaxy-s5-5-0-4-4-kitkat.html

0

对于大多数应用程序,ART都可以正常工作。

然而,它并不是100%兼容的,因为在Dalvik上运行的某些内容可能无法在ART上运行。

请访问link以获取更多信息。


0

DalvikART只是Android中的运行时。作为应用程序开发人员,您不必关心这些差异。您需要关注的是您的应用程序的API级别,它描述了Android操作系统版本的依赖关系。

在Android 4.4中,ART只是一个开发版本,并非默认运行时,即使发布说明描述了ART将使应用程序使用更少的内存并快速运行。如果您想找到不同之处,可以等待下一个Android版本。在开源中,我发现ART已经设置为默认运行时选择。


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