#!/data/data/com.termux/files/usr/bin/bash set -e ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" AB_HOME="${ANDROID_BUILDER_HOME:-$HOME/android-builder}" SDK="$HOME/android-sdk" PLATFORM="${ANDROID_BUILDER_PLATFORM:-android-33}" GRADLE_VERSION="${ANDROID_BUILDER_GRADLE_VERSION:-8.7}" AGP_VERSION="${ANDROID_BUILDER_AGP_VERSION:-8.5.2}" GRADLE_DISTRIBUTION_SHA256="${ANDROID_BUILDER_GRADLE_DISTRIBUTION_SHA256:-544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d}" TEMPLATE_DIR="$ROOT_DIR/templates/gradle-wrapper" ensure_termux() { if [ -z "${PREFIX:-}" ] || [ ! -d "/data/data/com.termux/files/usr" ]; then echo "Error: this command must be run inside Termux." exit 1 fi } set_gradle_wrapper_sha256() { WRAPPER_PROPERTIES="$1" if grep -q '^distributionSha256Sum=' "$WRAPPER_PROPERTIES"; then sed -i "s/^distributionSha256Sum=.*/distributionSha256Sum=$GRADLE_DISTRIBUTION_SHA256/" "$WRAPPER_PROPERTIES" else printf '\ndistributionSha256Sum=%s\n' "$GRADLE_DISTRIBUTION_SHA256" >> "$WRAPPER_PROPERTIES" fi } get_project_name() { if [ -f settings.gradle ]; then DETECTED_NAME="$(grep -E '^rootProject.name[[:space:]]*=' settings.gradle \ | sed -E 's/.*=[[:space:]]*["'\'']?([^"'\'' ]+)["'\'']?.*/\1/' \ | head -n 1)" [ -n "$DETECTED_NAME" ] && echo "$DETECTED_NAME" && return fi basename "$PWD" } get_build_type() { echo "${ANDROID_BUILDER_BUILD_TYPE:-debug}" } get_apk_path() { case "$(get_build_type)" in debug) echo "app/build/outputs/apk/debug/app-debug.apk" ;; release) echo "app/build/outputs/apk/release/app-release.apk" ;; *) return 1 ;; esac } create_base_project() { NAME="$1" MESSAGE="$2" PACKAGE="com.example.$(echo "$NAME" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9')" PACKAGE_PATH="$(echo "$PACKAGE" | tr '.' '/')" mkdir -p "$NAME/app/src/main/java/$PACKAGE_PATH" mkdir -p "$NAME/app/src/main/res/values" cat > "$NAME/settings.gradle" < "$NAME/build.gradle" <<'EOF2' // Root build file intentionally minimal. EOF2 cat > "$NAME/gradle.properties" < "$NAME/local.properties" < "$NAME/app/build.gradle" < "$NAME/app/src/main/AndroidManifest.xml" <<'EOF2' EOF2 cat > "$NAME/app/src/main/res/values/strings.xml" < $NAME EOF2 cat > "$NAME/app/src/main/res/values/styles.xml" <<'EOF2' EOF2 cat > "$NAME/app/src/main/java/$PACKAGE_PATH/MainActivity.java" < "$NAME/gradle/wrapper/gradle-wrapper.properties" <