#!/usr/bin/env bash # Locate Android NDK root for the project. Source this file. # Usage: export ANDROID_NDK_HOME="$(androidcast_find_ndk_root "$ROOT")" androidcast_find_ndk_root() { local project_root="${1:-$PWD}" local lp="$project_root/local.properties" # Prefer local.properties ndk.dir if [[ -f "$lp" ]]; then local ndk_dir ndk_dir="$(grep '^ndk\.dir=' "$lp" 2>/dev/null | cut -d= -f2 | tr -d '[:space:]')" if [[ -n "$ndk_dir" && -d "$ndk_dir" ]]; then echo "$ndk_dir" return 0 fi fi # ANDROID_NDK_HOME / ANDROID_NDK_ROOT env for v in "${ANDROID_NDK_HOME:-}" "${ANDROID_NDK_ROOT:-}"; do if [[ -n "$v" && -d "$v" ]]; then echo "$v" return 0 fi done # Search SDK local sdk_root="${ANDROID_HOME:-${ANDROID_SDK_ROOT:-$HOME/Android/Sdk}}" if [[ -d "$sdk_root/ndk" ]]; then # Prefer NDK 29, then highest available for preferred in 29 28 27 26; do local match match="$(ls "$sdk_root/ndk" 2>/dev/null | grep "^${preferred}\." | sort -V | tail -1)" if [[ -n "$match" && -d "$sdk_root/ndk/$match" ]]; then echo "$sdk_root/ndk/$match" return 0 fi done local latest latest="$(ls "$sdk_root/ndk" 2>/dev/null | sort -V | tail -1)" if [[ -n "$latest" && -d "$sdk_root/ndk/$latest" ]]; then echo "$sdk_root/ndk/$latest" return 0 fi fi echo "ERROR: Android NDK not found. Install via Android Studio SDK Manager or set ANDROID_NDK_HOME." >&2 return 1 }