【发布时间】:2013-11-13 11:03:30
【问题描述】:
Google 在 Android 4.4 中添加了一个新的 ART 运行时。如何将我的 apk 定位到 ART 运行时和 Dalvik 运行时?
【问题讨论】:
标签: android dalvik art-runtime
Google 在 Android 4.4 中添加了一个新的 ART 运行时。如何将我的 apk 定位到 ART 运行时和 Dalvik 运行时?
【问题讨论】:
标签: android dalvik art-runtime
此更改对开发人员没有任何影响。您的应用程序保持不变,无事可做。只需确保您以 API 19 为目标,以便您的应用可供 KitKat 用户使用。他们将在手机中决定是否要使用 ART 或 Dalvik。
【讨论】:
这是一个老问题,但非常关键。我今天确认,我所有的应用程序都在 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?”是一个关键且非常关键的问题。时间已经证明,给出的建议“对开发人员没有区别”的回答显然是不正确的。在我们的情况下当然是这样。
记录了两个具体问题,我引用了“Verifying App Behavior on the Android Runtime (ART)”:
1) " 检查 JNI 代码是否存在垃圾收集问题 ART 在 Android 开源项目 (AOSP) 上开发了一个压缩垃圾收集器。一旦使用了压缩垃圾收集器,就可以在内存中移动对象。如果您使用 C/C++ 代码,请不要执行与压缩 GC 不兼容的操作。我们增强了 CheckJNI 以识别一些潜在问题(如 ICS 中的 JNI 本地引用更改中所述)。”换句话说,新的 ART 内存管理模型可能会破坏您现有的(和可操作的)本机代码。
2) " 错误处理 ART 的 JNI 在 Dalvik 没有的情况下会抛出错误。”。
在http://developer.android.com/guide/practices/verifying-apps-art.html#JNI_Issues中提供了一些会导致 Android 5.x ART 引发错误的问题的有限解释
目前运行 ART 和 5.x 并面临非运行应用程序的 Android 设备用户采用的向前兼容解决方案是降级到 Android 4.4.4,通过解锁引导加载程序、擦除设备内存和在运行 Nexus 系列平板电脑的情况下安装系统映像“Hammerhead”。对于三星平板电脑,可通过以下网址获得教程:http://forums.androidcentral.com/samsung-galaxy-s5/489071-tutorial-downgrade-samsung-galaxy-s5-5-0-4-4-kitkat.html
【讨论】:
dalvik 或 ART 只是 Android 中的 runtime。作为应用程序开发人员,您不必关心这些差异。您只需要关心应用的 API 级别,它描述了 Android 操作系统版本的依赖性。
并且在 Android 4.4 中,ART 只是一种开发,它不是默认运行时,即使描述 ART 的发行说明将使应用程序使用更少的内存并快速运行。如果你想找到不一样的,你可以等待安卓的下一个版本。在开源中发现ART一直在设置默认运行时选择。
【讨论】:
【讨论】: