Android 11 x86 system images for the Android Emulator support ARM ABIs
Google released the Android 11 Developer Preview 2 earlier this month. With this release, Google made a key change to enable more efficient app debugging on Android Emulator within Android Studio. The Android 11 system images for x86 CPUs now allow applications with C or C++ dependencies to run more smoothly without full ARM emulation and utilizing hardware acceleration and CPU virtualization of x86 hardware.
Android apps written in native code (i.e. C or C++) must be compiled with different CPU architectures in mind. There must be different versions of the app targetting different CPU architectures such as ARM, ARM64, x86, or x86-64. This is because native code is directly compiled into the machine instructions for the specific architecture as opposed to Kotlin or Java apps which execute on the Android Runtime (ART).
In order to test your app via Android Emulator running on an x86-based computer, you need a different version for x86 CPU. The x86 version of the app won’t work on smartphones since they are typically based on ARM or ARM64 CPUs. Until now, the only resolution to this problem was to either use a physical Android device or install emulator images with full ARM emulation for x86 CPUs. The latter option is performance-intensive and cannot take full advantage of the hardware acceleration and CPU virtualization that x86 CPUs offer.
To settle this, Google has now released the new Android 11 x86 system images with ARM compatibility. These system images utilize ABIs (application binary interfaces) that intermediate between apps written in different languages or between apps and the operating system. The ARM instructions within the ARM binary are exclusively translated to x86 while the remaining of the code continues to be executed in x86. Due to this isolation of ARM binaries, the process is less performance-intensive and runs even on low-level hardware.
Besides enabling easier debugging of Android apps using C++ dependencies, it will also allow developers to just publish the ARM version of their apps along with ABIs instead of an x86 version for Chromebooks in the future. This will spur support for more Android 11-targeted apps on a variety of Chromebooks.