Skip to content

Instantly share code, notes, and snippets.

@jfstenuit
Created March 21, 2025 14:20
Show Gist options
  • Save jfstenuit/528a81761c0ba1d01340e5e121144e20 to your computer and use it in GitHub Desktop.
Save jfstenuit/528a81761c0ba1d01340e5e121144e20 to your computer and use it in GitHub Desktop.
Android sandboxing in a web browser

πŸ§ͺ Headless Android Emulator with VNC + Web Access (Ubuntu 24.04+)

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.


βœ… Step 1: Install the Android SDK

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

βœ… Step 3: Install VNC & GUI Tools

sudo apt install tigervnc-standalone-server tigervnc-common fluxbox xterm libpulse0

Start the virtual desktop:

vncserver :1 -geometry 1280x720 -depth 24
export DISPLAY=:1

βœ… Step 4: Run the Android Emulator

# 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 &

βœ… Step 5: Serve the Emulator via Web (NoVNC)

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

βœ… Step 6: Open ADB Shell in a Side Terminal

xterm -T "adb shell" -e "$ANDROID_HOME/platform-tools/adb shell" &

πŸŽ‰ Done!

You now have a headless Android 15 emulator accessible via:

  • VNC client
  • Any web browser (NoVNC)
  • ADB shell window inside the virtual desktop
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment