Created
May 13, 2026 11:17
-
-
Save asus4/ff4f07980eba51ac8b85d0f22a5af841 to your computer and use it in GitHub Desktop.
Run apk and start app
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| set -euo pipefail | |
| shopt -s nullglob | |
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| APK_PATH="" | |
| LOG_TAGS=(Unity tflite onnxruntime mlas) | |
| usage() { | |
| cat <<'EOF' | |
| Usage: ./run_apk.sh [options] | |
| Installs or re-installs an APK from this Build folder, detects its package name, | |
| starts the Android app, then starts filtered Unity, TensorFlow Lite, and ONNX | |
| Runtime logcat output. Press Ctrl+C to stop logging. | |
| Options: | |
| --apk PATH APK to install. Defaults to the only *.apk in this folder. | |
| -h, --help Show this help. | |
| Examples: | |
| ./run_apk.sh | |
| ./run_apk.sh --apk ./app.apk | |
| EOF | |
| } | |
| while [[ $# -gt 0 ]]; do | |
| case "$1" in | |
| --apk) | |
| if [[ $# -lt 2 ]]; then | |
| echo "Missing value for --apk" >&2 | |
| exit 1 | |
| fi | |
| APK_PATH="$2" | |
| shift 2 | |
| ;; | |
| -h|--help) | |
| usage | |
| exit 0 | |
| ;; | |
| *) | |
| echo "Unknown option: $1" >&2 | |
| usage >&2 | |
| exit 1 | |
| ;; | |
| esac | |
| done | |
| if ! command -v adb >/dev/null 2>&1; then | |
| echo "adb was not found in PATH. Install Android platform-tools or add adb to PATH." >&2 | |
| exit 1 | |
| fi | |
| find_android_tool() { | |
| local tool_name="$1" | |
| local sdk_root candidate found="" | |
| if command -v "$tool_name" >/dev/null 2>&1; then | |
| command -v "$tool_name" | |
| return 0 | |
| fi | |
| for sdk_root in "${ANDROID_HOME:-}" "${ANDROID_SDK_ROOT:-}"; do | |
| [[ -d "$sdk_root" ]] || continue | |
| for candidate in \ | |
| "$sdk_root"/build-tools/*/"$tool_name" \ | |
| "$sdk_root"/cmdline-tools/latest/bin/"$tool_name" \ | |
| "$sdk_root"/cmdline-tools/*/bin/"$tool_name" \ | |
| "$sdk_root"/tools/bin/"$tool_name"; do | |
| [[ -x "$candidate" ]] && found="$candidate" | |
| done | |
| done | |
| [[ -n "$found" ]] || return 1 | |
| printf '%s\n' "$found" | |
| } | |
| detect_package_name() { | |
| local apk_path="$1" | |
| local tool_path package_name="" | |
| if tool_path="$(find_android_tool aapt)"; then | |
| package_name="$("$tool_path" dump badging "$apk_path" 2>/dev/null \ | |
| | sed -n "s/package: name='\([^']*\)'.*/\1/p" || true)" | |
| fi | |
| if [[ -z "$package_name" ]] && tool_path="$(find_android_tool apkanalyzer)"; then | |
| package_name="$("$tool_path" manifest application-id "$apk_path" 2>/dev/null || true)" | |
| fi | |
| [[ -n "$package_name" ]] || return 1 | |
| printf '%s\n' "$package_name" | |
| } | |
| if [[ -z "$APK_PATH" ]]; then | |
| APK_CANDIDATES=("$SCRIPT_DIR"/*.apk) | |
| case "${#APK_CANDIDATES[@]}" in | |
| 0) | |
| echo "No APK found in $SCRIPT_DIR. Pass one with --apk PATH." >&2 | |
| exit 1 | |
| ;; | |
| 1) | |
| APK_PATH="${APK_CANDIDATES[0]}" | |
| ;; | |
| *) | |
| echo "More than one APK found in $SCRIPT_DIR. Pass one with --apk PATH." >&2 | |
| printf ' %s\n' "${APK_CANDIDATES[@]}" >&2 | |
| exit 1 | |
| ;; | |
| esac | |
| elif [[ "$APK_PATH" != /* ]]; then | |
| APK_PATH="$PWD/$APK_PATH" | |
| fi | |
| if [[ ! -f "$APK_PATH" ]]; then | |
| echo "APK not found: $APK_PATH" >&2 | |
| exit 1 | |
| fi | |
| if ! PACKAGE_NAME="$(detect_package_name "$APK_PATH")"; then | |
| echo "Could not detect package name from APK: $APK_PATH" >&2 | |
| echo "Install Android SDK build-tools so aapt is available, install cmdline-tools so apkanalyzer is available, or set ANDROID_HOME/ANDROID_SDK_ROOT." >&2 | |
| exit 1 | |
| fi | |
| echo "Target devices:" | |
| adb devices | |
| echo | |
| echo "Installing APK:" | |
| echo " $APK_PATH" | |
| adb install -r -d "$APK_PATH" | |
| echo | |
| echo "Clearing logcat..." | |
| adb logcat -c | |
| echo | |
| echo "Starting Android app:" | |
| echo " $PACKAGE_NAME" | |
| adb shell monkey -p "$PACKAGE_NAME" -c android.intent.category.LAUNCHER 1 >/dev/null | |
| echo | |
| echo "Starting filtered logcat. Press Ctrl+C to stop." | |
| echo " Tags: ${LOG_TAGS[*]}" | |
| adb logcat -v time -s "${LOG_TAGS[@]}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment