Files
OpenRoyale/tools/scripts/verify_java_offline.sh
2026-07-09 07:40:42 +02:00

40 lines
2.5 KiB
Bash

#!/usr/bin/env bash
# verify_java_offline.sh - compile the reconstructed Java layer WITHOUT Gradle/AGP, for environments
# where dl.google.com (AGP/AndroidX) is unreachable. Uses the apt Android SDK:
# aapt2 (generate R) + javac against android.jar. Proves the Java sources + SDK stubs compile and
# that the resource set links. It does NOT dex/package (that is the Gradle build's job).
#
# Requires: android-sdk-build-tools + android-sdk-platform-23 (apt), a JDK.
set -euo pipefail
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJ="$(cd "$HERE/../.." && pwd)"
AAPT2="${AAPT2:-/usr/lib/android-sdk/build-tools/debian/aapt2}"
ANDROID_JAR="${ANDROID_JAR:-/usr/lib/android-sdk/platforms/android-23/android.jar}"
[ -x "$AAPT2" ] || { echo "aapt2 not found (apt install android-sdk-build-tools)"; exit 2; }
[ -f "$ANDROID_JAR" ] || { echo "android.jar not found (apt install android-sdk-platform-23)"; exit 2; }
WORK="$(mktemp -d)"; trap 'rm -rf "$WORK"' EXIT
echo "[*] aapt2 compile+link resources -> R.java"
"$AAPT2" compile --dir "$PROJ/app/src/main/res" -o "$WORK/res.flata" >/dev/null
# AGP injects the package from the manifest 'namespace'; standalone aapt2 needs it present, and
# android-23 lacks the API-24 attr resizeableActivity, so strip it for this offline check only.
sed -e 's|<manifest |<manifest package="com.oldcrcell.clashroyale" |' \
-e '/android:resizeableActivity="false"/d' \
"$PROJ/app/src/main/AndroidManifest.xml" > "$WORK/AM.xml"
"$AAPT2" link -o "$WORK/base.apk" -I "$ANDROID_JAR" --manifest "$WORK/AM.xml" \
--min-sdk-version 21 --target-sdk-version 23 -R "$WORK/res.flata" \
--java "$WORK/gen" --auto-add-overlay >/dev/null
echo " R.java: $(find "$WORK/gen" -name R.java)"
echo "[*] javac (app sources + SDK stubs + generated R) against android-23"
find "$PROJ/app/src/main/java" "$PROJ/app/src/stubs/java" "$WORK/gen" -name '*.java' > "$WORK/srcs.txt"
mkdir -p "$WORK/out"
if javac -d "$WORK/out" -cp "$ANDROID_JAR" -encoding UTF-8 @"$WORK/srcs.txt" 2>"$WORK/err.txt"; then
echo "[+] JAVA COMPILE OK - $(find "$WORK/out" -name '*.class' | wc -l) classes"
echo " app sources: $(find "$PROJ/app/src/main/java" -name '*.java' | wc -l), stubs: $(find "$PROJ/app/src/stubs/java" -name '*.java' | wc -l)"
echo " native methods (titan): $(grep -rhE 'native +[A-Za-z].*\(.*\) *;' "$PROJ/app/src/main/java/com/supercell/titan/"*.java | wc -l) (expected 60)"
else
echo "[x] JAVA COMPILE FAILED:"; grep 'error:' "$WORK/err.txt" | head -30; exit 1
fi