Skip to content

Instantly share code, notes, and snippets.

Embed
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

TL;DR

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
    
    skin.name=1080x1920        # proper screen size for emulator
    hw.lcd.density=480
    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 &

About

  • 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

Steps

  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"

LOLLIPOP (5.0) API 21

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

LOLLIPOP (5.1) API 22

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

MARSHMELLOW (6.0) API 23

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.

Other

  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.
@mrk-han

This comment has been minimized.

Copy link
Owner Author

mrk-han commented Apr 2, 2019

alias generic_9.0 ='emulator @generic_9.0 -noaudio -no-boot-anim -netdelay none -accel on -no-snapshot -skin 480x800 &

@mrk-han

This comment has been minimized.

Copy link
Owner Author

mrk-han commented Apr 2, 2019

ZSHRC/BASHRC

# Android SDK
export PATH=$PATH:$ANDROID_HOME/emulator
export ANDROID_HOME=/Users/markhan/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools/
export PATH=$PATH:$ANDROID_HOME/tools/bin/
export PATH=$PATH:$ANDROID_HOME/tools/
PATH=$ANDROID_HOME/emulator:$PATH
@wellavelino

This comment has been minimized.

Copy link

wellavelino commented Nov 26, 2019

Really nice gist!

@gitnepal

This comment has been minimized.

Copy link

gitnepal commented Mar 17, 2020

nice gist, but not helping me , avd error . cannot create devices even downloaded the images from sdkmanager

@kunalvshah

This comment has been minimized.

Copy link

kunalvshah commented Apr 12, 2020

Hi @mrk-han
I am having an issue and thought you might be able to help. I have searched forums for this error, and tried few tricks mentioned there but nothing worked. I am receiving an error
PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value [/Users/kunalshah/android/sdk]!

Can you please help fixing it ?

Here are the details of my steps.

MacBook Air (13-inch, 2017) - macOS Catalina

  1. No android studio
  2. installed jdk 11 from oracle
  3. downloaded commandlinetools-mac-6200805_latest.zip from https://developer.android.com/studio
  4. Extraced it to ~/android
  5. ~/android has following structure
kunalshah@Kunals-MacBook-Air tools % ls -la
total 192
drwxr-xr-x@  7 kunalshah  staff    224 Apr 10 20:38 .
drwxr-xr-x   5 kunalshah  staff    160 Apr 12 15:43 ..
-rw-r--r--@  1 kunalshah  staff   6148 Apr 10 20:38 .DS_Store
-r-xr-xr-x@  1 kunalshah  staff  85128 Jan  1  2010 NOTICE.txt
drwxr-xr-x@  7 kunalshah  staff    224 Apr 10 19:46 bin
drwxr-xr-x@ 22 kunalshah  staff    704 Apr 10 19:46 lib
-r-xr-xr-x@  1 kunalshah  staff     84 Jan  1  2010 source.properties
kunalshah@Kunals-MacBook-Air tools % pwd
/Users/kunalshah/android/tools
  1. added tools/bin directory to Path
    export ANDROID_HOME=/Users/kunalshah/android
    export PATH=$PATH:$ANDROID_HOME/tools/bin

  2. Ran sdkmanager --sdk_root=/Users/kunalshah/android/sdk --install
    this created a directory /Users/kunalshah/android/sdk

  3. ran sdkmanager --sdk_root=/Users/kunalshah/android/sdk --licenses
    accepted all licenses

  4. Installed basic tools
    sdkmanager --sdk_root=/Users/kunalshah/android/sdk --install "platforms;android-R" "platform-tools" "emulator" "cmdline-tools;latest" "system-images;android-R;google_apis_playstore;x86"

  5. new directory structure

kunalshah@Kunals-MacBook-Air android % pwd
/Users/kunalshah/android
kunalshah@Kunals-MacBook-Air android % ls -la
total 0
drwxr-xr-x   4 kunalshah  staff   128 Apr 12 15:55 .
drwxr-xr-x+ 47 kunalshah  staff  1504 Apr 12 15:47 ..
drwxr-xr-x  10 kunalshah  staff   320 Apr 12 16:06 sdk
drwxr-xr-x@  7 kunalshah  staff   224 Apr 10 20:38 tools
kunalshah@Kunals-MacBook-Air android % ls -la ./sdk 
total 0
drwxr-xr-x  10 kunalshah  staff  320 Apr 12 16:06 .
drwxr-xr-x   4 kunalshah  staff  128 Apr 12 15:55 ..
drwxr-xr-x   4 kunalshah  staff  128 Apr 12 16:02 .android
drwxr-xr-x   2 kunalshah  staff   64 Apr 12 16:06 .temp
drwxr-xr-x   3 kunalshah  staff   96 Apr 12 16:04 cmdline-tools
drwxr-xr-x  18 kunalshah  staff  576 Apr 12 16:06 emulator
drwxr-xr-x   9 kunalshah  staff  288 Apr 12 15:43 licenses
drwxr-xr-x   3 kunalshah  staff   96 Apr 12 16:04 patcher
drwxr-xr-x  19 kunalshah  staff  608 Apr 12 16:06 platform-tools
drwxr-xr-x   3 kunalshah  staff   96 Apr 12 16:04 platforms
kunalshah@Kunals-MacBook-Air android % ls -la ./tools 
total 192
drwxr-xr-x@  7 kunalshah  staff    224 Apr 10 20:38 .
drwxr-xr-x   4 kunalshah  staff    128 Apr 12 15:55 ..
-rw-r--r--@  1 kunalshah  staff   6148 Apr 10 20:38 .DS_Store
-r-xr-xr-x@  1 kunalshah  staff  85128 Jan  1  2010 NOTICE.txt
drwxr-xr-x@  7 kunalshah  staff    224 Apr 10 19:46 bin
drwxr-xr-x@ 22 kunalshah  staff    704 Apr 10 19:46 lib
-r-xr-xr-x@  1 kunalshah  staff     84 Jan  1  2010 source.properties
  1. Environment variables```

ANDROID_HOME=/Users/kunalshah/android
ANDROID_SDK_ROOT=/Users/kunalshah/android/sdk
ANDROID_AVD_HOME=/Users/kunalshah/android/sdk/.android/avd
ANDROID_SDK_HOME=/Users/kunalshah/android/sdk


11) creating avd
avdmanager create avd --name testAVD --abi "x86" --package "system-images;android-R;google_apis_playstore;x86"

12) running avd

kunalshah@Kunals-MacBook-Air emulator % ./emulator @testAVD
PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value [/Users/kunalshah/android/sdk]!

@matsp

This comment has been minimized.

Copy link

matsp commented May 15, 2020

Thanks for this gist 💯 It helped me a lot building a flutter docker image with emulator!

@nagdav853

This comment has been minimized.

Copy link

nagdav853 commented May 16, 2020

ZSHRC/BASHRC

# Android SDK
export PATH=$PATH:$ANDROID_HOME/emulator
export ANDROID_HOME=/Users/markhan/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools/
export PATH=$PATH:$ANDROID_HOME/tools/bin/
export PATH=$PATH:$ANDROID_HOME/tools/
PATH=$ANDROID_HOME/emulator:$PATH

do anyone know the linux equivalent for '/Users/markhan/Library/Android/sdk'? i'm looking for it, but can't find the folder...

@giansalex

This comment has been minimized.

Copy link

giansalex commented May 26, 2020

@kunalvshah install : sdkmanager "platform-tools" "platforms;android-28"

@giansalex

This comment has been minimized.

Copy link

giansalex commented May 26, 2020

ZSHRC/BASHRC

# Android SDK
export PATH=$PATH:$ANDROID_HOME/emulator
export ANDROID_HOME=/Users/markhan/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools/
export PATH=$PATH:$ANDROID_HOME/tools/bin/
export PATH=$PATH:$ANDROID_HOME/tools/
PATH=$ANDROID_HOME/emulator:$PATH

do anyone know the linux equivalent for '/Users/markhan/Library/Android/sdk'? i'm looking for it, but can't find the folder...

@nagdav853 is where you uncompress comandline tools.

@sharmaSelenium

This comment has been minimized.

Copy link

sharmaSelenium commented Jun 16, 2020

Hi @mrk , i am installing emulator without android studio , from cmd able to install platform tools , image , however while creating emulator getting this error

:\Users\nitis>echo "no" | avdmanager --verbose create avd --force --name "android-28" --package "system-images;android-28;default;x86"
Warning: Observed package id 'platform-tools' in inconsistent location 'C:\Users\nitis\Downloads\softwares\android-sdk\platform-tools' (Expected 'C:\Users\nitis\Downloads\softwares\platform-tools')
Warning: Observed package id 'platforms;android-28' in inconsistent location 'C:\Users\nitis\Downloads\softwares\android-sdk\platforms\android-28' (Expected 'C:\Users\nitis\Downloads\softwares\platforms\android-28')
Warning: Observed package id 'system-images;android-28;default;x86' in inconsistent location 'C:\Users\nitis\Downloads\softwares\android-sdk\system-images\android-28\default\x86' (Expected 'C:\Users\nitis\Downloads\softwares\system-images\android-28\default\x86')
Warning: Observed package id 'tools' in inconsistent location 'C:\Users\nitis\Downloads\softwares\android-sdk\tools' (Expected 'C:\Users\nitis\Downloads\softwares\tools')
Auto-selecting single ABI x86===========] 100% Fetch remote repository...
Do you wish to create a custom hardware profile? [no] Error: "no" is not a valid reply
null

@mrk-han

This comment has been minimized.

Copy link
Owner Author

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"

@mrk-han

This comment has been minimized.

Copy link
Owner Author

mrk-han commented Jun 18, 2020

@matsp so happy to hear this!

@mrk-han

This comment has been minimized.

Copy link
Owner Author

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. https://developer.android.com/studio/command-line/variables#envar

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.