Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Run a Headless Android Device on Ubuntu server (no GUI)
#!/bin/bash -i
#using shebang with -i to enable interactive mode (auto load .bashrc)
set -e #stop immediately if any error happens
# Install Open SDK
apt update
apt install openjdk-8-jdk -y
update-java-alternatives --set java-1.8.0-openjdk-amd64
java -version
# Install SDK Manager
# you can find this file at https://developer.android.com/studio/index.html#downloads - section command line only
cd ~ && wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
ANDROID_HOME=/opt/androidsdk
mkdir -p $ANDROID_HOME
apt install unzip -y && unzip sdk-tools-linux-4333796.zip -d $ANDROID_HOME
echo "export ANDROID_HOME=$ANDROID_HOME" >> ~/.bashrc
echo 'export SDK=$ANDROID_HOME' >> ~/.bashrc
echo 'export PATH=$SDK/emulator:$SDK/tools:$SDK/tools/bin:$SDK/platform-tools:$PATH' >> ~/.bashrc
source ~/.bashrc
# Install Android Image version 28
yes | sdkmanager "platform-tools" "platforms;android-28" "emulator"
yes | sdkmanager "system-images;android-28;google_apis;x86_64"
emulator -version
echo "INSTALL ANDROID SDK DONE!"
echo "run 01.emulator-up.sh [new device name] to start emulator"
#!/bin/bash -i
#using shebang with -i to enable interactive mode (auto load .bashrc)
#this script was inspired from https://docs.travis-ci.com/user/languages/android/
set -e #stop immediately if any error happens
avd_name=$1
if [[ -z "$avd_name" ]]; then
avd_name="avd28"
fi
#check if emulator work well
emulator -version
# create virtual device, default using Android 9 Pie image (API Level 28)
echo no | avdmanager create avd -n avd28 -k "system-images;android-28;google_apis;x86_64"
# start the emulator
emulator -avd avd28 -no-audio -no-window &
# show connected virtual device
adb devices
@Zebiano

This comment has been minimized.

Copy link

@Zebiano Zebiano commented Mar 12, 2021

I'm surprised this actually worked, thank you very much!

I did get a warning saying the emulator is out of date. Is there an easy way to update it?

I also installed adb with apt install adb as I wasn't being able to test for devices. After installing it I saw the emulator, but when I tried to run 01.emulator-up.sh again, I got a emulator: command not found error. Any idea on how to fix that?

And lastly, how can I actually turn the emulator off?

EDIT: I'm an idiot, forgot to run commands with sudo. That fixed the emulator: command not found error. Yet running 01.emulator-up.sh yields

Error: Android Virtual Device 'avd28' already exists.remote repository...
Use --force if you want to replace it.
null

Any idea on what's going on here? I've since killed the emulator with sudo kill <pid>.

@nhtua

This comment has been minimized.

Copy link
Owner Author

@nhtua nhtua commented Mar 12, 2021

you can add --force to line 17 to delete the existing one and create another new one. It will a little slow you down but it should work.

To stop, you need command

# get emulator name
adb devices

# stop emulator
adb -s emulator-name emu kill

REF https://stackoverflow.com/a/20155436/1235074

@armatix

This comment has been minimized.

Copy link

@armatix armatix commented Jul 2, 2021

For the future:
if you get this error:
emulator: ERROR: x86_64 emulation currently requires hardware acceleration!
add -no-accel to your command:
emulator -avd avd28 -no-audio -no-window -no-accel &

@duhd1993

This comment has been minimized.

Copy link

@duhd1993 duhd1993 commented Sep 20, 2021

Thanks for putting this together. Is it possible to start an Android GUI that I can connect to with something like VNC?

@rcrandall72

This comment has been minimized.

Copy link

@rcrandall72 rcrandall72 commented Oct 8, 2021

-no-accel

Thank you armatix! This saved me a few headaches today!

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