#!/bin/sh # Builds MiniABS.apk for Android 2.2+ (API 8) using the plain SDK tools, no Gradle. # ANDROID_JAR android.jar for API 8 (compiling against it guarantees no newer APIs sneak in) # KEYSTORE signing keystore (created on first build if missing) set -e cd "$(dirname "$0")" ANDROID_JAR=${ANDROID_JAR:-/home/claude/sable/android-platforms/android-8/android.jar} KEYSTORE=${KEYSTORE:-miniabs.keystore} OUT=build rm -rf "$OUT" mkdir -p "$OUT/gen" "$OUT/classes" echo "== resources" aapt package -f -m -J "$OUT/gen" -M AndroidManifest.xml -S res -I "$ANDROID_JAR" \ -F "$OUT/MiniABS.unsigned.apk" echo "== compile (Java 8 bytecode, API 8 class library)" javac -nowarn -Xlint:-options -encoding UTF-8 -source 8 -target 8 \ -bootclasspath "$ANDROID_JAR" -classpath "$ANDROID_JAR" \ -d "$OUT/classes" $(find src "$OUT/gen" -name '*.java') echo "== dex" dalvik-exchange --dex --min-sdk-version=8 --output="$OUT/classes.dex" "$OUT/classes" (cd "$OUT" && aapt add MiniABS.unsigned.apk classes.dex > /dev/null) echo "== align + sign (v1 JAR signature with SHA-1, which Android 2.x requires)" if [ ! -f "$KEYSTORE" ]; then keytool -genkeypair -keystore "$KEYSTORE" -storepass miniabs -keypass miniabs -alias miniabs \ -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=MiniABS" > /dev/null 2>&1 fi zipalign -f 4 "$OUT/MiniABS.unsigned.apk" "$OUT/MiniABS.aligned.apk" apksigner sign --ks "$KEYSTORE" --ks-pass pass:miniabs --key-pass pass:miniabs --ks-key-alias miniabs \ --min-sdk-version 8 --v1-signing-enabled true --v2-signing-enabled false --v3-signing-enabled false \ --out "$OUT/MiniABS.apk" "$OUT/MiniABS.aligned.apk" apksigner verify --min-sdk-version 8 "$OUT/MiniABS.apk" ls -l "$OUT/MiniABS.apk"