This guide sets up a fully headless Android emulator environment on a Linux server using:
- Google SDK tools
- TigerVNC for remote GUI access
- NoVNC to access the emulator via any browser
- ADB shell access in a side terminal
Tested and confirmed working on Ubuntu 24.04.
sudo apt install default-jdk-headless
mkdir ~/android-sdk
cd ~/android-sdk
wget 'https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip'
unzip commandlinetools-linux-*.zip -d cmdline-tools
# Environment variables
echo 'export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
echo 'export ANDROID_HOME=~/android-sdk' >> ~/.bashrc
echo 'export PATH=$ANDROID_HOME/cmdline-tools/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
---
## β
Step 2: Install SDK Components
```bash
$ANDROID_HOME/cmdline-tools/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME --install "emulator" "system-images;android-34;google_apis;x86_64"
$ANDROID_HOME/cmdline-tools/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME "platform-tools"
$ANDROID_HOME/cmdline-tools/cmdline-tools/bin/avdmanager create avd -n pixel15 -k "system-images;android-34;google_apis;x86_64" --device "pixel"
$ANDROID_HOME/platform-tools/adb start-server
sudo apt install tigervnc-standalone-server tigervnc-common fluxbox xterm libpulse0
Start the virtual desktop:
vncserver :1 -geometry 1280x720 -depth 24
export DISPLAY=:1
# Make sure your user can access KVM
sudo usermod -G kvm $USER
# Start the emulator inside the virtual display
$ANDROID_HOME/emulator/emulator -avd pixel15 -gpu swiftshader_indirect -no-audio -no-boot-anim &
sudo apt install novnc websockify
websockify -D --web=/usr/share/novnc/ 6080 localhost:5901
Now visit the emulator from your browser:
http://<server-ip>:6080/vnc.html
xterm -T "adb shell" -e "$ANDROID_HOME/platform-tools/adb shell" &
You now have a headless Android 15 emulator accessible via:
- VNC client
- Any web browser (NoVNC)
- ADB shell window inside the virtual desktop