compose-lobsters/scripts/boot-emulator.py

71 lines
1.7 KiB
Python
Executable file

#!/usr/bin/env python3
import signal
import subprocess
import os
from pathlib import Path
emu_process = None
def signal_handler(sig, frame):
if emu_process is not None:
emu_process.signal(signal.SIGINT)
def make_cmdline_tools_path(android_home: Path) -> str:
return android_home / "cmdline-tools" / "latest" / "bin"
def main():
signal.signal(signal.SIGINT, signal_handler)
android_home = os.getenv("ANDROID_HOME")
if not android_home:
raise RuntimeError("$ANDROID_HOME must be set to use this script")
android_home = Path(android_home)
api_level = os.getenv("ANDROID_API_LEVEL")
if not api_level:
print("$ANDROID_API_LEVEL not defined; defaulting to 33")
api_level = "33"
cmdline_path = make_cmdline_tools_path(android_home)
image_package = f"system-images;android-{api_level};google_apis;x86_64"
subprocess.run(
[
cmdline_path / "sdkmanager",
image_package,
],
check=True,
)
subprocess.run(
[
cmdline_path / "avdmanager",
"create",
"avd",
"--force",
"-n",
f"Pixel_XL_API_{api_level}",
"--abi",
"google_apis/x86_64",
"--package",
image_package,
"--device",
"pixel_xl",
],
check=True,
)
emu_process = subprocess.Popen(
[
android_home / "emulator" / "emulator",
"-avd",
f"Pixel_XL_API_{api_level}",
"-gpu",
"swiftshader_indirect",
"-noaudio",
],
)
emu_process.wait()
if __name__ == "__main__":
main()