Google 在 Android 4.4 中添加了一个新的 ART 运行时。如何将我的 apk 定位到 ART 运行时和 Dalvik 运行时?
4 回答
此更改对开发人员没有任何影响。您的应用程序保持不变,无事可做。只需确保您以 API 19 为目标,以便您的应用可供 KitKat 用户使用。他们将在手机中决定是否要使用 ART 或 Dalvik。
这是一个古老的问题,但非常关键。我今天确认,我所有的应用程序都在 Nexus-x 平板电脑上与 ART+Android-5 中断。ART 会进行更严格的 JNI 检查,因此如果您的应用程序使用 java 加原生代码,则从 Dalvik 迁移到 ART 可能会破坏应用程序的运行。对我来说,这是一个完整的表演站。我在 Google Store 中有 6 个应用程序,现在在运行 Android 5.x 的 Nexus 设备上都失败了,但它们在所有 4.xx (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 没有。”。
一些会导致 Android 5.x ART 引发错误的问题的有限解释见:http: //developer.android.com/guide/practices/verifying-apps-art.html#JNI_Issues
目前运行 ART 和 5.x 且面向非运行应用程序的 Android 设备用户采用的前向兼容解决方案是降级到 Android 4.4.4,通过解锁引导加载程序、擦除设备内存和安装系统映像“Hammerhead”,在那些运行 Nexus 系列平板电脑的情况下。对于三星平板电脑,可在以下网址找到教程:http ://forums.androidcentral.com/samsung-galaxy-s5/489071-tutorial-downgrade-samsung-galaxy-s5-5-0-4-4-kitkat.html
dalvik或ART只是Android 中的运行时。作为应用程序开发人员,您不必关心这些差异。您只需要关心您的应用程序的 API 级别,它描述了 Android 操作系统版本的依赖性。
在 Android 4.4 中,ART只是一种开发,它不是默认运行时,即使发布说明描述ART将使应用程序使用更少的内存并快速运行。如果你想找到不一样的,你可以等待安卓的下一个版本。在开源中,我发现ART一直在设置默认的运行时选择。