Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Installing and creating Emulators with AVDMANAGER (For Continuous Integration Server or Local Use)

Install and Create Emulators using AVDMANAGER and SDKMANAGER


For generic skin emulator with default apis (without google apis):

  1. List All System Images Available for Download: sdkmanager --list | grep system-images

  2. Download Image: sdkmanager --install "system-images;android-29;default;x86"

  3. Create Emulator: echo "no" | avdmanager --verbose create avd --force --name "generic_10" --package "system-images;android-29;default;x86" --tag "default" --abi "x86"

    I recommend adding these lines to: ~/.android/avd/generic_10.avd/config.ini        # proper screen size for emulator
    hw.keyboard=yes            # enables keys from your laptop to be sent to the emulator
    If you cannot do this, you can still pass -skin 1080x1920 as an argument when starting the emulator. 
  4. Run Emulator: emulator @generic_10 &


  • The goal of this gist is to quickly pre-install a range of system images to provide our project teams the ability to run emulators on a range of API levels, from API 19 to API 28.
    • These can be run locally or on the base build agent.
  • Note: X86 is the fastest architecture for emulators, though x86_64 would probably be better to test against because most phones are 64 bit now.
  • We create two sets of emulators here, one set with pixel hardware emulation and one set with default oem emulation.

See: Google Documentation on Start the emulator from the command line for more info


  1. Run the sdkmanager --install commands.
  2. Run the avdmanager commands.

Extra Steps

  • Add aliases to run the emulators with parameters more easily. Or add these parameters to your build steps in TeamCity.
    • Instead of using emulator @{EMULATOR NAME} to run devices, you can use the aliases if they are added.
  • If you run this locally, you can use the -read-only parameter to run multiple devices at the same time. You can then manually run automation against various APIs for added device coverage during regression.

Step 1 - Run the sdkmanager commands

KITKAT (4.4) API 19

sdkmanager --install "system-images;android-19;google_apis;x86"


sdkmanager --install "system-images;android-21;google_apis;x86"


sdkmanager --install "system-images;android-22;google_apis;x86"


sdkmanager --install "system-images;android-23;google_apis;x86"

NOUGAT (7.0) API 24

sdkmanager --install "system-images;android-24;google_apis;x86"

NOUGAT (7.1) API 25

sdkmanager --install "system-images;android-25;google_apis;x86"

OREO (8.0) API 26

sdkmanager --install "system-images;android-26;google_apis;x86"

OREO (8.1) API 27

sdkmanager --install "system-images;android-27;google_apis;x86"

PIE (9.0) API 28

sdkmanager --install "system-images;android-28;google_apis;x86"

Step 2 - Use AVDMANAGER to create emulators

Pixel Emulator with Google Apis and x86 architecture

echo "no" | avdmanager --verbose create avd --force --name "pixel_4.4" --device "pixel" --package "system-images;android-19;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "pixel_5.0" --device "pixel" --package "system-images;android-21;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "pixel_5.1" --device "pixel" --package "system-images;android-22;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "pixel_6.0" --device "pixel" --package "system-images;android-23;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "pixel_7.0" --device "pixel" --package "system-images;android-24;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "pixel_7.1" --device "pixel" --package "system-images;android-25;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "pixel_8.0" --device "pixel" --package "system-images;android-26;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "pixel_8.1" --device "pixel" --package "system-images;android-27;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "pixel_9.0" --device "pixel" --package "system-images;android-28;google_apis;x86" --tag "google_apis" --abi "x86"

Generic Emulator with Google Apis

echo "no" | avdmanager --verbose create avd --force --name "generic_4.4" --package "system-images;android-19;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "generic_5.0" --package "system-images;android-21;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "generic_5.1" --package "system-images;android-22;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "generic_6.0" --package "system-images;android-23;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "generic_7.0" --package "system-images;android-24;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "generic_7.1" --package "system-images;android-25;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "generic_8.0" --package "system-images;android-26;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "generic_8.1" --package "system-images;android-27;google_apis;x86" --tag "google_apis" --abi "x86"

echo "no" | avdmanager --verbose create avd --force --name "generic_9.0" --package "system-images;android-28;google_apis;x86" --tag "google_apis" --abi "x86"

Extra Steps - Aliases and notes on resolutions

Aliases to run emulators more optimally

Note: Add this alias to ~/.bashrc or ~/.zshrc, or just run using these parameters for best results. -skin 768x1280 is useful to run default emulators successfully because they have a very low resolution out-of-the-box.

alias generic_4.4='emulator @generic_4.4 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 768x1280 &'

alias generic_5.0='emulator @generic_5.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 768x1280 &'

alias generic_5.1='emulator @generic_5.1 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 768x1280 &'

alias generic_6.0='emulator @generic_6.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 768x1280 &'

alias generic_7.0='emulator @generic_7.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 768x1280 &'

alias generic_7.1='emulator @generic_7.1 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 768x1280 &'

alias generic_8.0='emulator @generic_8.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 768x1280 &'

alias generic_8.1='emulator @generic_8.1 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 768x1280 &'

alias generic_9.0='emulator @generic_9.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 768x1280 &'

Note: Add this alias to ~/.bashrc or ~/.zshrc, or just run using these parameters for results. Pixel emulators should run at default resolution of 1080x1920 by default, but can specify this just in-case with the parameter: -skin 1080x1920

alias pixel_4.4 ='emulator @pixel_4.4 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 1080x1920 &'

alias pixel_5.0 ='emulator @pixel_5.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 1080x1920 &'

alias pixel_5.1 ='emulator @pixel_5.1 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 1080x1920 &'

alias pixel_6.0 ='emulator @pixel_6.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 1080x1920 &'

alias pixel_7.0 ='emulator @pixel_7.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 1080x1920 &'

alias pixel_7.1 ='emulator @pixel_7.1 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 1080x1920 &'

alias pixel_8.0 ='emulator @pixel_8.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 1080x1920 &'

alias pixel_8.1 ='emulator @pixel_8.1 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 1080x1920 &'

alias pixel_9.0 ='emulator @pixel_9.0 -no-boot-anim -netdelay none -no-snapshot -wipe-data -skin 1080x1920 &'

Note You can run all of the emulators above with a -read-only parameter to run multiple emulators at the same time, but this is an experimental feature right now.


  1. Certain emulators, like Pixel, need to be started at a higher resolution than default oem emulators. Either define this in the ~/.android/avd/{name of avd}/config.ini file, or start emulator with -skin {RESOLUTION} as seen above.
  2. emulator -list-avds will print list of available devices
  3. avdmanager list , avdmanager list target, avdmanager list devices , avdmanager list avd
-   avdmanager list              : Lists existing targets or virtual devices.
-   avdmanager list avd          : Lists existing Android Virtual Devices.
-   avdmanager list target       : Lists existing targets.
-   avdmanager list device       : Lists existing devices.
Copy link

mrk-han commented Jun 18, 2020

@sharmaSelenium try just running it like this avdmanager --verbose create avd --force --name "android-28" --package "system-images;android-28;default;x86"

Copy link

mrk-han commented Jun 18, 2020

@matsp so happy to hear this!

Copy link

mrk-han commented Jun 18, 2020

@kunalvshah ANDROID_SDK_ROOT and ANDROID_HOME should be set to the same thing, but I think you only need to set one. Try setting one and make sure it is the true home, or path to your SDK installation. I see you have both of them set to different places which I think may be causing your problem.

Copy link

robotickamote commented Oct 20, 2020

I tried to create an avd using android-tv system images for android-29. Seems it can't run the google playstore app. Is this the case for earlier versions of the platform (android-28/27/26)?

Copy link

josevelasdev commented Dec 22, 2020

I created an avd but when i tried to run:


the problem is in wsl when write this command:

egrep -c '(vmx|svm)' /proc/cpuinfo

launch 0 it means that my CPU doesn't support hardware virtualization. any idea?

Copy link

mahdizolqadr commented Jan 21, 2021

how install "arm64-v8a" ? :((

Copy link

pen-pal commented Mar 1, 2021

is there a way you map your currently running emulator with avd ??

Copy link

staff0rd commented Mar 19, 2021

After running this i see the following, what causes it to be offline?

λ adb devices
List of devices attached
emulator-5554   offline

Copy link

sGuid commented Apr 9, 2021

For @Josevelasquez above - looks like latest android platform tools (like android 26+ when they started only allowing x86/x86_64 and not arm/arm64 emulators) automatically require hardware acceleration (which does not always work with docker and other vms). Use the emulator option "-no-accel" to start emulator without hardware acceleration.
ie. emulator @android-29-x86_64-test -no-audio -no-window -no-accel

@mahdizolqadr - you want to avdmanager create avd - and look for the abi option "x86_64" option for x86_v8a - and you'll need to download the right system image for that
ie. sdkmanager --install "system-images;android-29;google_apis;x86_64"
ie. avdmanager create avd --name android29-x86_64-test --abi "x86_64" --package "system-images;android-29;google_apis;x86_64"
Basically use sdkmanager --list. to see all the available options. and can also use avdmanager --list will also show you all the available emulator options (that you've custom made or that are default profiles and can be made).

offline in a real device usually means not hitting the security popup approval when you plug in the device. In emulator, it might be that you are running newer emulator with old tools, so it's not properly able to talk to the device (which is done via the android debugger bridge aka adb). try adb --version to see what tool version is using to talk to device, and then restart adb connection with adb kill-server and then adb start-server. (ie. if your adb version is 1.0.36, which is like andorid 5, then you can't talk to an android 29 device that's has adb 1.0.41 or something like that). adb is located in platform-tools (to update check options in sdkmanager --list, but will probably want sdmanager "platform-tools")

I currently have the problem with the emulator is up and running, but my unit tests run via gradlew won't run on the device, "Found 1 connected device(s), 0 of which were compatible. ... Skipping device 'android-29-x86_64-test(AVD)' for 'test:': Unknown API Level". I am using --abi "x86_64" when i create the emulator so the API level should be known. I'm sure I'm using an older version tool on newer device issue, but I can't tell what's not updated as I thought I updated everything, if anyone has ideas I would love to hear them. (I always wish android would give less vague error logs).

@mrk-han - your gist was really good and clear - thanks!

Copy link

joe733 commented Apr 12, 2021

@mrk-han thank you for this gist.

This is what I have:

~ via 🐍 v3.6.9 
➜ sdkmanager --list | sed -e '/Available Packages/q'
Installed packages:=====================] 100% Computing updates...             
  Path                 | Version | Description                    | Location             
  -------              | ------- | -------                        | -------              
  build-tools;28.0.3   | 28.0.3  | Android SDK Build-Tools 28.0.3 | build-tools/28.0.3/  
  build-tools;29.0.2   | 29.0.2  | Android SDK Build-Tools 29.0.2 | build-tools/29.0.2/  
  build-tools;29.0.3   | 29.0.3  | Android SDK Build-Tools 29.0.3 | build-tools/29.0.3/  
  emulator             | 30.4.5  | Android Emulator               | emulator/            
  patcher;v4           | 1       | SDK Patch Applier v4           | patcher/v4/          
  platform-tools       | 31.0.0  | Android SDK Platform-Tools     | platform-tools/      
  platforms;android-28 | 6       | Android SDK Platform 28        | platforms/android-28/
  platforms;android-29 | 5       | Android SDK Platform 29        | platforms/android-29/
  platforms;android-30 | 3       | Android SDK Platform 30        | platforms/android-30/

Available Updates:
  ID             | Installed | Available
  -------        | -------   | -------  
  emulator       | 30.4.5    | 30.5.4   
  platform-tools | 31.0.0    | 31.0.1 

But when I run either of these:

~ via 🐍 v3.6.9 
➜ avdmanager create avd --name android29 --package "system-images;android-29;google_apis_playstore;x86_64"
Error: Package path is not valid. Valid system image paths are:ository...       

~ via 🐍 v3.6.9 
➜ avdmanager create avd --name android29 --package "system-images;android-29;google_apis;x86_64"
Error: Package path is not valid. Valid system image paths are:ository...       

It could be an architecture error, or something else but how do I figure that out, please?

Copy link

badsyntax commented Apr 16, 2021

Thanks for the gist. I've created another gist showing how i do this in CI:

Copy link

SameerYoussef commented Apr 20, 2021


=yes didn't work for me with API S

Copy link

sostenesapollo commented Jun 8, 2021

Mine Stays in this part : *Loading local repository... * when I try to create an avd

Copy link

huseyinbarin commented Jul 13, 2021

Is there any possibility to create emulator with a default language other than English by using avdmanager?
I searched a bit about this but no luck.

Copy link

Layer-wang commented Sep 3, 2021

sdkmanager --list | grep system-images 'grep' 不是内部或外部命令,也不是可运行的程序
how to solve

Copy link

Sandy-Garrido commented Nov 5, 2021

how install "arm64-v8a" ? :((


Copy link

SohanTirpude commented Dec 18, 2021

Well everything worked but when I launched the emulator this is the error I got

C:\Android\emulator>emulator.exe @generic_10 & INFO | Android emulator version (build_id 7920983) (CL:N/A) WARNING | unexpected system image feature string, emulator might not function correctly, please try updating the emulator. ERROR | Not enough space to create userdata partition. Available: 6726.316406 MB at C:\Users\CK\.android\avd\generic_10.avd, need 7372.800000 MB.

Copy link

hini-manan commented Jan 24, 2022

Screenshot 2022-01-24 at 3 14 38 PM

I'm getting 'unknown skin name' error. How to solve this issue?

Copy link

ArjunTejaswi commented Feb 23, 2022

@josevelasdev I too am stuck in the same error, got any solution?

Copy link

neilnicoli-mosca commented Jun 13, 2022

I am having an error with sdkmanager --install, with error


Copy link

mrk-han commented Jun 13, 2022

@neilnicoli-mosca Make sure you're passing in an argument after --install. e.g. sdkmanager --install "system-images;android-29;default;x86"

Copy link

neilnicoli-mosca commented Jun 14, 2022

@neilnicoli-mosca Make sure you're passing in an argument after --install. e.g. sdkmanager --install "system-images;android-29;default;x86"

Yup, does this had something to do with the version of sdkmanager? I found another tutorial that doesn't use --install for installing system-images and just sdkmanager "system-images;android-29;default;x86" and when I followed it and remove --install, it is was successful.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment