mirror of
https://github.com/ApfelTeeSaft/OpenRoyale.git
synced 2026-08-26 19:33:32 +00:00
40 lines
2.5 KiB
Bash
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
|