YrXtals/scripts/android/build.sh

49 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# compiles the aarch64-linux-android cdylib into jniLibs and assembles the apk via gradle.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/_env.sh"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
GRADLE_TYPE="${1:-release}"
case "$GRADLE_TYPE" in
debug|release|release-debug) ;;
*) echo "unknown gradle type: $GRADLE_TYPE (debug|release|release-debug)" >&2; exit 2 ;;
esac
# YRXTALS_ANDROID_CARGO_PROFILE overrides the rust profile, defaulting to the gradle type
CARGO_PROFILE="${YRXTALS_ANDROID_CARGO_PROFILE:-}"
if [[ -z "$CARGO_PROFILE" ]]; then
case "$GRADLE_TYPE" in
debug) CARGO_PROFILE="dev" ;;
release) CARGO_PROFILE="release" ;;
release-debug) CARGO_PROFILE="release-debug" ;;
esac
fi
bash "$SCRIPT_DIR/generate-icons.sh"
JNILIBS="$REPO_ROOT/android/app/src/main/jniLibs"
mkdir -p "$JNILIBS/arm64-v8a"
CARGO_NDK_FLAGS=( -t arm64-v8a -P 28 -o "$JNILIBS" build )
[[ "$CARGO_PROFILE" != "dev" ]] && CARGO_NDK_FLAGS+=( --profile "$CARGO_PROFILE" )
echo "→ cargo ndk ${CARGO_NDK_FLAGS[*]} (profile=$CARGO_PROFILE)"
( cd "$REPO_ROOT" && cargo ndk "${CARGO_NDK_FLAGS[@]}" )
case "$GRADLE_TYPE" in
debug) GRADLE_TASK="assembleDebug"; APK_VARIANT_DIR="debug" ;;
release) GRADLE_TASK="assembleRelease"; APK_VARIANT_DIR="release" ;;
release-debug) GRADLE_TASK="assembleReleaseDebug"; APK_VARIANT_DIR="releaseDebug" ;;
esac
echo "→ gradlew $GRADLE_TASK"
( cd "$REPO_ROOT/android" && ./gradlew "$GRADLE_TASK" )
APK_DIR="$REPO_ROOT/android/app/build/outputs/apk/$APK_VARIANT_DIR"
echo "apk at: $(find "$APK_DIR" -name '*.apk' | head -1)"