47 lines
1.6 KiB
Bash
47 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -uo pipefail
|
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
SCRIPT="$HERE/../skills/clone-app/scripts/detect-unity.sh"
|
|
TMP="$(mktemp -d)"
|
|
trap 'rm -rf "$TMP"' EXIT
|
|
fail=0
|
|
check() {
|
|
local desc="$1" expected="$2" actual="$3"
|
|
if [[ "$expected" == "$actual" ]]; then echo "PASS: $desc"
|
|
else echo "FAIL: $desc — expected '$expected' got '$actual'"; fail=1; fi
|
|
}
|
|
|
|
# Build three fixture zips with python's zipfile (portable, no `zip` needed).
|
|
mkzip() { python3 - "$1" "${@:2}" <<'PY'
|
|
import sys, zipfile
|
|
out = sys.argv[1]
|
|
with zipfile.ZipFile(out, "w") as z:
|
|
for entry in sys.argv[2:]:
|
|
z.writestr(entry, "x")
|
|
PY
|
|
}
|
|
|
|
mkzip "$TMP/il2cpp.apk" "lib/arm64-v8a/libil2cpp.so" "assets/bin/Data/Managed/Metadata/global-metadata.dat"
|
|
mkzip "$TMP/mono.apk" "assets/bin/Data/Managed/Assembly-CSharp.dll"
|
|
mkzip "$TMP/plain.apk" "classes.dex" "AndroidManifest.xml"
|
|
|
|
# Build XAPK fixture: inner Unity il2cpp base.apk wrapped in an xapk
|
|
mkzip "$TMP/base.apk" "lib/arm64-v8a/libil2cpp.so" "assets/bin/Data/Managed/Metadata/global-metadata.dat"
|
|
python3 - "$TMP/unity.xapk" "$TMP/base.apk" <<'PY'
|
|
import sys, zipfile, os
|
|
out, inner = sys.argv[1], sys.argv[2]
|
|
with zipfile.ZipFile(out, "w") as z:
|
|
z.write(inner, arcname="base.apk")
|
|
z.writestr("manifest.json", "{}")
|
|
PY
|
|
|
|
check "il2cpp" "il2cpp" "$(bash "$SCRIPT" "$TMP/il2cpp.apk")"
|
|
check "mono" "mono" "$(bash "$SCRIPT" "$TMP/mono.apk")"
|
|
check "none" "none" "$(bash "$SCRIPT" "$TMP/plain.apk")"
|
|
check "xapk il2cpp" "il2cpp" "$(bash "$SCRIPT" "$TMP/unity.xapk")"
|
|
|
|
bash "$SCRIPT" >/dev/null 2>&1; rc=$?
|
|
check "usage exit 2" "2" "$rc"
|
|
|
|
exit $fail
|