您的位置首页>Android>

<img class="yuanchuan_images" title="原创" style="display: none;margin-right: 5px;" src="/d/public/images/yuanchuang.png">Android模拟器执行ARM应用

摘要大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Android模拟器执行ARM应用问题。随着安卓11开发者预览版的发布,我们也推出了安卓11

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Android模拟器执行ARM应用问题。

随着安卓11开发者预览版的发布,我们也推出了安卓11系统镜像。的新系统映像在执行ARM二进制文件方面取得了显著的性能提升。以前依赖ARM库,无法构建x86版本应用的开发人员,只能使用完整的ARM仿真系统镜像(比在x86设备上运行x86系统镜像慢很多)或物理机。安卓11系统镜像可以直接将ARM指令转换成x86指令,不影响整个系统。开发人员可以执行和测试ARM二进制文件,而无需构建高负载的ARM环境。

新的安卓11(谷歌应用编程接口)x86系统映像支持ARM应用程序二进制接口(ABI),旧版本的安卓奥利奥系统映像不支持该接口。

安卓11系统映像https://developer.android.google.cn/studio/releases/emulator #支持_ arm _ binaries _ on _安卓_ 9 _和_ 11 _ system _ images。

技术细节

我们可能需要用具体的场景来说明这项新技术的重要性,尤其是如果您只使用Kotlin或Java编程语言来构建应用程序的话。Kotlin和Java编程语言都是在ART (Android Runtime)上执行的,但是C与它们不同。安卓应用中的所有C指令都是直接编译成机器指令的,也就是说目标设备的平台架构决定了C的编译方式,手机一般都搭载ARM处理器,所以你添加到应用中的很多C依赖(比如摄像头条码扫描库)都只兼容ARM处理器。在这种情况下,如果您使用基于x86处理器的设备进行开发工作,您将会遇到应用程序无法运行的问题。

过去,开发人员需要通过模拟器镜像系统镜像构建完整的ARM环境,才能绕过这一限制,在x86机器上执行ARM应用。但是将整个系统的ARM指令转换为x86指令会造成性能负载过大。因此,与基于x86的系统镜像相比,完整的ARM系统镜像在x86主机上运行速度会慢很多,无法使用x86处理器提供的硬件加速和CPU虚拟化技术。

新的安卓11系统镜像兼容ARM,不仅允许整个系统在本地运行x86指令,还可以照常使用虚拟化技术。当一个应用进程需要使用ARM二进制代码时,该代码在进程中只会被转换为x86指令,其他进程会继续在x86环境中执行,包括Android Runtime (ART)和其他性能关键库,如libGLES和libvulkan。此外,指令转换器不会执行低级硬件特定的库,从而避免了高成本的内存访问检测和相应的性能影响。在ARM的配合下,新的模拟器系统镜像可以在本地和连续的集成框架中运行。

安卓11系统映像https://developer.android.google.cn/studio/releases/emulator #支持_ arm _ binaries _ on _安卓_ 9 _和_ 11 _ system _ images。

libgles 3359 developer . Android . Google.cn/ndk/guides/stable _ API # graphics

libvulkan https://developer . Android . Google.cn/ndk/guides/graphics/design-notes

下一步

如果因为缺乏高性能ARM支持而选择了物理机而不是模拟器,不妨试试安卓11系统镜像。这个图像文件现在可以和安卓11开发者预览版一起下载。您可以通过SDK管理器或安卓虚拟设备管理器将最新的系统映像下载到安卓工作室。

使用安卓虚拟设备管理器创建一个运行安卓11的AVD。

A

ndroid 11 系统映像https://developer.android.google.cn/studio/releases/emulator#support_for_arm_binaries_on_android_9_and_11_system_images

Android Virtual Device Managerhttps://developer.android.google.cn/studio/run/managing-avds#createavd

一旦应用在模拟器中成功运行后,请考虑适配 Chrome OS。Chrome OS 同样也支持在 x86 笔记本上执行 ARM 版本的 Android 应用。通过构建适用于 Chrome OS 的应用,您可以挖掘大屏幕设备生态圈所蕴含的海量机遇,让全球更多的用户认识您的应用。

随着 Android 11 开发者预览版的发布 ,我们同时也推出了 Android 11 系统映像。新的系统映像在执行 ARM 二进制文件方面取得了显著的性能提升。此前,依赖 ARM 库且无法构建 x86 版本应用的开发者只能使用完整的 ARM 模拟系统映像 (其速度远低于在 x86 设备上运行 x86 系统映像) 或者实体机。Android 11 系统映像能够在不影响整个系统的前提下,直接将 ARM 指令转换成 x86 指令。开发者无需搭建高负载的 ARM 环境即可执行 ARM 二进制文件并进行测试。

全新的 Android 11 (Google API) x86 系统映像支持 ARM 应用二进制接口 (ABI),较旧版本的 Android Oreo 系统映像并不提供该支持

Android 11 系统映像 https://developer.android.google.cn/studio/releases/emulator#support_for_arm_binaries_on_android_9_and_11_system_images

技术细节

我们可能需要结合具体情景来说明这项新技术的重要性,尤其是如果您只使用 Kotlin 或 Java 编程语言来构建应用的话。Kotlin 和 Java 编程语言均在 ART (Android 运行时) 上执行,但 C++++ 则与它们不同,Android 应用中的所有 C++ 指令会直接编译为机器指令,也就是说,目标设备的平台架构决定着 C++ 的编译方法。移动手机一般搭载 ARM 处理器,因此,您为应用添加的许多 C++ 依赖项 (例如摄像头条形码扫描库) 仅与 ARM 处理器兼容。在这种情形下,如果您使用基于 x86 处理器的设备进行开发工作,便会遇到应用无法运行的问题。

过去,开发者需要通过模拟器镜系统映像搭建一个完整的 ARM 环境,才能绕过这个限制并在 x86 机器上执行 ARM 应用。但是,把整个系统的 ARM 指令都转换成 x86 指令会造成过高的性能负荷,因此与基于 x86 的系统映像相比,完整的 ARM 系统映像在 x86 宿主机上的运行速度会慢很多,而且它还无法使用 x86 处理器提供的硬件加速和 CPU 虚拟化技术。

全新的Android 11 系统映像与 ARM 兼容,它不仅允许整个系统在本机运行 x86 指令,而且还可以照常使用虚拟化技术。当应用的某个进程需要使用 ARM 二进制代码时,代码仅会在该进程内被转换成 x86 指令,其余进程将继续在 x86 环境内执行,包括 Android 运行时 (ART) 以及其它性能关键库,例如 libGLES和 libvulkan。除此以外,指令转换器也不会执行低层的硬件特定库,从而避免高成本的内存访问检测和相应的性能影响。在 ARM 公司的协作下,新的模拟器系统映像在本地和持续集成框架内均可运行。

Android 11 系统映像https://developer.android.google.cn/studio/releases/emulator#support_for_arm_binaries_on_android_9_and_11_system_images

libGLEShttps://developer.android.google.cn/ndk/guides/stable_apis#graphics

libvulkanhttps://developer.android.google.cn/ndk/guides/graphics/design-notes

下一步

如果您之前由于缺乏高性能的 ARM 支持,去选择了实体机而非模拟器,不妨尝试一下 Android 11 系统映像。此映像文件目前已随 Android 11 开发者预览版一同开放下载。您可通过 SDK Manager 或者 Android Virtual Device Manager将最新版本的系统映像下载至 Android Studio。

使用 Android Virtual Device Manager 创建一个运行 Android 11 的 AVD

Android 11 系统映像https://developer.android.google.cn/studio/releases/emulator#support_for_arm_binaries_on_android_9_and_11_system_images

Android Virtual Device Managerhttps://developer.android.google.cn/studio/run/managing-avds#createavd

一旦应用在模拟器中成功运行后,请考虑适配 Chrome OS。Chrome OS 同样也支持在 x86 笔记本上执行 ARM 版本的 Android 应用。通过构建适用于 Chrome OS 的应用,您可以挖掘大屏幕设备生态圈所蕴含的海量机遇,让全球更多的用户认识您的应用。

.dfma { position: relative; width: 1000px; margin: 0 auto; } .dfma a::after { position: absolute; left: 0; bottom: 0; width: 30px; line-height: 1.4; text-align: center; background-color: rgba(0, 0, 0, .5); color: #fff; font-size: 12px; content:"广告"; } .dfma img { display: block; }
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。