Android Emulator vom Terminal starten

Ich brauchte einen Weg den Android Emulator zu starten ohne Android Studio öffnen zu müssen. Zuerst hab ich das Standard-Emulator-Command versucht aber das hat nicht funktioniert.

$ emulator -avd Pixel_XL_API_25
PANIC: Missing emulator engine program for 'x86' CPU.

Also hab ich im Web gesucht und rausgefunden dass ich einen anderen Emulator starten und irgendwo anders symlinken muss. Die Idee hat mir nicht gefallen. Mein nächster Gedanke war "Was macht Android Studio?". Hab meine Prozesse beobachtet und den Emulator aus Android Studio gestartet.

$ ps aux | grep qemu
... /usr/lib/android-sdk/emulator/qemu/linux-x86_64/qemu-system-x86_64 -netdelay none -netspeed full -no-snapshot-load -avd Pixel_XL_API_25

Nice, das sieht vielversprechend aus.

$ /usr/lib/android-sdk/emulator/qemu/linux-x86_64/qemu-system-x86_64 -netdelay none -netspeed full -no-snapshot-load -avd Pixel_XL_API_25
/usr/lib/android-sdk/emulator/qemu/linux-x86_64/qemu-system-x86_64: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory

Sieht so aus als ob Android Studio seine eigenen Libraries mitbringt und wir unser Environment vorbereiten müssen damit der Emulator richtig startet.

$ xargs --null --max-args=1 < /proc/ID_THE_OUR_QEMU_PROCESS/environ
# I will only show you the necessary lines
# ...
LD_LIBRARY_PATH=/usr/lib/android-sdk/emulator/lib64/qt/lib:/usr/lib/android-sdk/emulator/lib64/libstdc++:/usr/lib/android-sdk/emulator/lib64/gles_angle11:/usr/lib/android-sdk/emulator/lib64/gles_angle9:/usr/lib/android-sdk/emulator/lib64/gles_angle:/usr/lib/android-sdk/emulator/lib64/gles_swiftshader:/usr/lib/android-sdk/emulator/lib64
ANDROID_EMULATOR_LAUNCHER_DIR=/usr/lib/android-sdk/emulator
# ...

Mit diesen Infos hab ich ein Launch-Script für meinen Emulator erstellt.

#!/usr/bin/env bash
export ANDROID_EMULATOR_LAUNCHER_DIR=/usr/lib/android-sdk/emulator
export LD_LIBRARY_PATH=/usr/lib/android-sdk/emulator/lib64/qt/lib:/usr/lib/android-sdk/emulator/lib64/libstdc++:/usr/lib/android-sdk/emulator/lib64/gles_angle11:/usr/lib/android-sdk/emulator/lib64/gles_angle9:/usr/lib/android-sdk/emulator/lib64/gles_angle:/usr/lib/android-sdk/emulator/lib64/gles_swiftshader:/usr/lib/android-sdk/emulator/lib64

EMULATOR86="$ANDROID_HOME/emulator/qemu/linux-x86_64/qemu-system-x86_64"
EMULATOR="$ANDROID_HOME/tools/emulator"
DEVICE=`$EMULATOR -list-avds | tail -1`

RUN="$EMULATOR86 -netdelay none -netspeed full -no-snapshot-load -avd $DEVICE"

echo "Run $RUN"

$RUN