summaryrefslogtreecommitdiff
path: root/andre-apk.sh
diff options
context:
space:
mode:
Diffstat (limited to 'andre-apk.sh')
-rw-r--r--andre-apk.sh39
1 files changed, 39 insertions, 0 deletions
diff --git a/andre-apk.sh b/andre-apk.sh
new file mode 100644
index 0000000..90afffa
--- /dev/null
+++ b/andre-apk.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+argv0="$0"
+msg() { printf -- '%s: %s\n' "$(basename "$argv0")" "$@" 1>&2; }
+err() { msg "$@"; exit 1; }
+
+[ -z "$1" ] && err 'usage: <apk>'
+pkgfile="$(realpath "$1")"
+
+arch="$(file ./andre | awk -F', ' '{print $2}')"
+case "$arch" in
+ 'Intel 80386')
+ arch="x86"
+ ;;
+ 'ARM')
+ arch="armeabi-v7a"
+ ;;
+ *)
+ err "dont know how to convert from elf arch '$arch' to android arch"
+ ;;
+esac
+
+pkgname="$(aapt2 dump --file AndroidManifest.xml "$1" | grep -o '^ \+A: package="[a-zA-Z0-9._]\+"' | awk -F'"' '{print $2}')"
+[ -z "$pkgname" ] && err "not a valid apk (missing package name)"
+
+tmpdir="$(mktemp -d)"
+trap 'rm -rf "$tmpdir"' EXIT
+unzip "$1" -d "$tmpdir"
+
+export ANDROID_PACKAGE_FILE="$pkgfile"
+export ANDROID_PACKAGE_CODE_PATH="$tmpdir"
+export ANDROID_PACKAGE_NAME="$pkgname"
+
+# TODO: when we have first release, make this follow XDG spec
+export ANDROID_EXTERNAL_FILES_DIR="$PWD/local/data/$pkgname/files"
+export ANDROID_EXTERNAL_OBB_DIR="$PWD/local/data/$pkgname/obb"
+
+# XXX: We only work with unity stuff for now
+./andre "$tmpdir/lib/$arch/libunity.so"