From 85dbec61089b2b7e8f1fcc02551538fc0c36cebb Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Thu, 11 Jun 2026 21:15:50 +0000 Subject: [PATCH] =?UTF-8?q?android-emulator:=20api36-v3=20=E2=80=94=20avdm?= =?UTF-8?q?anager=20must=20run=20from=20inside=20the=20SDK=20root?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v2's marker fix proved the install completes, but avdmanager still saw no system images: it IGNORES ANDROID_SDK_ROOT (and has no --sdk_root), deriving the SDK root from its own toolsdir — /opt/android in our image, while packages live on the PVC at /sdk. v3 seeds cmdline-tools into /sdk/cmdline-tools/latest once and runs avdmanager from there, so it resolves the PVC as the SDK root. --- stacks/android-emulator/docker/Dockerfile | 4 ++-- stacks/android-emulator/docker/entrypoint.sh | 13 +++++++++++-- stacks/android-emulator/variables.tf | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/stacks/android-emulator/docker/Dockerfile b/stacks/android-emulator/docker/Dockerfile index a8372c58..cb3912ea 100644 --- a/stacks/android-emulator/docker/Dockerfile +++ b/stacks/android-emulator/docker/Dockerfile @@ -4,8 +4,8 @@ # cmdline-tools and the native libraries the emulator needs at runtime. # # Rebuild + push (rare — only when tool/library versions bump): -# docker build -t forgejo.viktorbarzin.me/viktor/android-emulator:api36-v2 . -# docker push forgejo.viktorbarzin.me/viktor/android-emulator:api36-v2 +# docker build -t forgejo.viktorbarzin.me/viktor/android-emulator:api36-v3 . +# docker push forgejo.viktorbarzin.me/viktor/android-emulator:api36-v3 FROM eclipse-temurin:17-jdk-jammy ENV DEBIAN_FRONTEND=noninteractive diff --git a/stacks/android-emulator/docker/entrypoint.sh b/stacks/android-emulator/docker/entrypoint.sh index b4b2dceb..3c4e3b57 100644 --- a/stacks/android-emulator/docker/entrypoint.sh +++ b/stacks/android-emulator/docker/entrypoint.sh @@ -40,9 +40,18 @@ if [ ! -f "$MARKER" ]; then fi # --- AVD (idempotent) -------------------------------------------------------- -if ! avdmanager list avd -c | grep -qx "$AVD_NAME"; then +# avdmanager IGNORES ANDROID_SDK_ROOT (and has no --sdk_root): it derives the +# SDK root from its own toolsdir. Run it from a copy of cmdline-tools seeded +# INSIDE /sdk so it resolves the PVC as the root — otherwise it looks under +# /opt/android and reports "Valid system image paths are: null". +if [ ! -x /sdk/cmdline-tools/latest/bin/avdmanager ]; then + mkdir -p /sdk/cmdline-tools + cp -a /opt/android/cmdline-tools/latest /sdk/cmdline-tools/latest +fi +AVDMANAGER=/sdk/cmdline-tools/latest/bin/avdmanager +if ! "$AVDMANAGER" list avd -c | grep -qx "$AVD_NAME"; then echo "Creating AVD '$AVD_NAME' (${SYSTEM_IMAGE}, pixel_7)..." - (echo no || true) | avdmanager create avd -n "$AVD_NAME" -k "$SYSTEM_IMAGE" --device pixel_7 + (echo no || true) | "$AVDMANAGER" create avd -n "$AVD_NAME" -k "$SYSTEM_IMAGE" --device pixel_7 cat >> "${ANDROID_AVD_HOME}/${AVD_NAME}.avd/config.ini" <