#!/usr/bin/env bash # Builds FreeMyTV.apk without Gradle: aapt2 -> javac -> d8 -> zipalign -> apksigner. # Needs a JDK (17+) and the Android SDK command-line tools (build-tools 34+, platform android-34). See README.md. set -euo pipefail cd "$(dirname "$0")" # --- Tools SDK="${ANDROID_HOME:-${ANDROID_SDK_ROOT:-}}" if [ -z "$SDK" ]; then for d in "$HOME/Library/Android/sdk" "$HOME/Android/Sdk" /opt/homebrew/share/android-commandlinetools \ /usr/local/share/android-commandlinetools /usr/lib/android-sdk; do if [ -d "$d/build-tools" ]; then SDK="$d"; break; fi done fi [ -n "$SDK" ] && [ -d "$SDK/build-tools" ] || { echo "Android SDK not found. Install it and set ANDROID_HOME (see README)."; exit 1; } BT="$SDK/build-tools/$(ls "$SDK/build-tools" | sort -V | tail -1)" AJ="$(ls -d "$SDK"/platforms/android-*/android.jar 2>/dev/null | sort -V | tail -1 || true)" [ -f "${AJ:-}" ] || { echo "Android platform not found. Run: sdkmanager \"platforms;android-34\""; exit 1; } JAVAC="${JAVA_HOME:+$JAVA_HOME/bin/}javac" KEYTOOL="${JAVA_HOME:+$JAVA_HOME/bin/}keytool" command -v "$JAVAC" >/dev/null 2>&1 || { echo "JDK not found. Install JDK 17 and set JAVA_HOME."; exit 1; } # --- Settings: config.properties -> Config.java if [ ! -f config.properties ]; then cp config.example.properties config.properties echo "Created config.properties: add your TMDB key and your city there (optional), then build again." fi prop() { local v v="$(grep -E "^[[:space:]]*$1[[:space:]]*=" config.properties | tail -1 | cut -d= -f2- || true)" v="$(printf '%s' "$v" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | tr -d '"\\')" printf '%s' "${v:-$2}" } number() { local v; v="$(prop "$1" "$2")" [[ "$v" =~ ^-?[0-9]+(\.[0-9]+)?$ ]] || { echo "config.properties: $1 must be a number (got \"$v\")" >&2; exit 1; } printf '%s' "$v" } LAT="$(number latitude 40.7128)" LON="$(number longitude -74.0060)" ASSIST=false; [ "$(prop disable_assistant false)" = "true" ] && ASSIST=true CRYPTO=false; [ "$(prop show_crypto true)" = "true" ] && CRYPTO=true rm -rf out && mkdir -p out/gen/io/freemytv out/classes cat > out/gen/io/freemytv/Config.java </dev/null 2>&1 fi "$BT/apksigner" sign --ks freemytv.keystore --ks-pass pass:freemytv --key-pass pass:freemytv --out FreeMyTV.apk out/aligned.apk echo "Built FreeMyTV.apk ($(du -h FreeMyTV.apk | cut -f1)). Install: adb install -r FreeMyTV.apk"