#!/usr/bin/env bash # extract_apk.sh - reproduce all original_reference/ extracts from the source APK. # Usage: tools/scripts/extract_apk.sh [path/to/app.apk] # Regenerates: raw_apk_extract/, apktool_output/, jadx_output/, dex_raw/, native_libs_original/ set -euo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJ="$(cd "$HERE/../.." && pwd)" # reconstructed_android_project/ ROOT="$(cd "$PROJ/.." && pwd)" # repo root (holds the source APK + tools/) TOOLS="$ROOT/tools" REF="$PROJ/original_reference" APK="${1:-$ROOT/ClassicRoyale-1.7_1.apk}" [ -f "$APK" ] || { echo "APK not found: $APK (run 'git lfs pull' first?)"; exit 1; } echo "[*] Source APK: $APK" mkdir -p "$REF"/{raw_apk_extract,apktool_output,jadx_output,dex_raw,native_libs_original} # Preserve pristine copy cp -f "$APK" "$REF/original.apk" echo "[*] Raw unzip ..." unzip -q -o "$APK" -d "$REF/raw_apk_extract" echo "[*] Copy dex + native libs ..." cp -f "$REF"/raw_apk_extract/*.dex "$REF/dex_raw/" 2>/dev/null || true cp -f "$REF"/raw_apk_extract/lib/*/*.so "$REF/native_libs_original/" 2>/dev/null || true echo "[*] apktool (res + smali + manifest) ..." java -jar "$TOOLS/apktool_3.0.2.jar" d -f -o "$REF/apktool_output" "$APK" echo "[*] jadx (java) ..." chmod +x "$TOOLS"/jadx-1.5.5/bin/jadx 2>/dev/null || true "$TOOLS/jadx-1.5.5/bin/jadx" -j 4 --no-res --show-bad-code -d "$REF/jadx_output" "$APK" || \ echo " (jadx reported non-fatal decompile warnings)" echo "[+] Extraction complete under $REF"