Always use x86 emulators (or x86_64 for testing 64-bit APKs). Although arm emulators exist, they are so slow that they are not worth your time.
You need to target the correct architecture via GN args:
target_cpu = "x86" # or "x64" if you have an x86_64 emulator
By far the easiest way to set up emulator images is to use Android Studio. If you don't have an Android Studio project already, you can create a blank one to be able to reach the Virtual Device Manager screen.
Refer to: https://developer.android.com/studio/run/managing-avds.html
Where files live:
~/.android/avd/
.Choose a skin with a small screen for better performance (unless you care about testing large screens).
Android Studio's image labels roughly translate to the following:
AVD “Target” | Virtual Device Configuration tab | GMS? | Build Properties |
---|---|---|---|
Google Play | “Recommended” (the default tab) | This has GMS | user /release-keys |
Google APIs | “x86 Images” | This has GMS | userdebug /dev-keys |
No label | “x86 Images” | AOSP image, does not have GMS | eng /test-keys |
“Show Advanced Settings” > scroll down:
adb -s emulator-5554 shell mount
(look for /sdcard)~/.android/avd/YOUR_DEVICE/config.ini
.hw.sdCard=no
and set it to yes
Refer to: https://developer.android.com/studio/run/emulator-commandline.html.
$ # List virtual devices that you've created: $ ~/Android/Sdk/emulator/emulator -list-avds $ # Start a named device: $ ~/Android/Sdk/emulator/emulator @EMULATOR_ID
You can run an emulator without creating a window on your desktop (useful for ssh
):
$ ~/Android/Sdk/emulator/emulator -no-window @EMULATOR_ID $ # This also works for new enough emulator builds: $ ~/Android/Sdk/emulator/emulator-headless @EMULATOR_ID
Tests are automatically sharded amongst available devices. If you run multiple emulators, then running test suites becomes much faster. Refer to the “Multiple AVD instances” section of these emulator release notes for more about how this works.
$ # Start 8 emulators. Press Ctrl-C to stop them all. $ ( for i in $(seq 8); do ~/Android/Sdk/emulator/emulator @EMULATOR_ID -read-only & done; wait ) $ # Start 12 emulators. More than 10 requires disabling audio on some OS's. Reducing cores increases parallelism. $ ( for i in $(seq 12); do ~/Android/Sdk/emulator/emulator @EMULATOR_ID -read-only -no-audio -cores 2 & done; wait )
Unlike physical devices, an emulator's /system
partition cannot be modified by default (even on rooted devices). If you need to do so (such as to remove a system app), you can start your emulator like so:
$ ~/Android/Sdk/emulator/emulator -writable-system @EMULATOR_ID
adb devices