1#!/usr/bin/env bash 2# Install the Android SDK packages the build needs into $ANDROID_HOME, with sdkmanager. Idempotent: a 3# package already there is not fetched again. 4# 5# mise run android:sdk 6# 7# Environment (mise.toml sets all of it; set them yourself to run this without mise): 8# ANDROID_HOME the SDK directory (the android-sdk tool's own, under mise) 9# WHISKERS_ANDROID_PLATFORM API level of the platform, e.g. 37.0 (the sdkmanager package android-37.0) 10# WHISKERS_ANDROID_BUILD_TOOLS e.g. 36.0.0 11# WHISKERS_ANDROID_NDK e.g. 29.0.14206865 12# sdkmanager (the command-line tools) and a JDK must be on PATH. 13# 14# On NixOS the downloaded NDK and build tools are ordinary dynamically linked programs: they need nix-ld 15# (programs.nix-ld.enable) or the repository's `nix develop .#fhs` shell. 16set -euo pipefail 17: "${ANDROID_HOME:?set ANDROID_HOME to the SDK directory (mise sets it from the android-sdk tool)}" 18: "${WHISKERS_ANDROID_PLATFORM:?}" "${WHISKERS_ANDROID_BUILD_TOOLS:?}" "${WHISKERS_ANDROID_NDK:?}" 19command -v sdkmanager >/dev/null || { echo "sdkmanager is not on PATH: install the Android command-line tools (mise install) or add them to PATH" >&2; exit 1; } 20 21need=() 22[ -d "$ANDROID_HOME/platforms/android-$WHISKERS_ANDROID_PLATFORM" ] || need+=("platforms;android-$WHISKERS_ANDROID_PLATFORM") 23[ -d "$ANDROID_HOME/build-tools/$WHISKERS_ANDROID_BUILD_TOOLS" ] || need+=("build-tools;$WHISKERS_ANDROID_BUILD_TOOLS") 24[ -d "$ANDROID_HOME/ndk/$WHISKERS_ANDROID_NDK" ] || need+=("ndk;$WHISKERS_ANDROID_NDK") 25[ -d "$ANDROID_HOME/platform-tools" ] || need+=("platform-tools") 26if [ ${#need[@]} -eq 0 ]; then 27 echo "android-sdk: already installed in $ANDROID_HOME" 28 exit 0 29fi 30echo "android-sdk: installing ${need[*]}" 31# sdkmanager asks questions on stdin; answer them. `yes` ends with SIGPIPE, hence the subshell. 32(yes 2>/dev/null || true) | sdkmanager --sdk_root="$ANDROID_HOME" --install "${need[@]}"