#!/usr/bin/env bash # COLOURS red='\033[0;31m' green='\033[0;32m' yellow='\033[1;33m' blue='\033[0;34m' cyan='\033[0;36m' nc='\033[0m' # LOGGING log_info() { printf "${blue}[info]${nc} %s\n" "$1"; } log_success() { printf "${green}[ok]${nc} %s\n" "$1"; } log_warn() { printf "${yellow}[warn]${nc} %s\n" "$1"; } log_err() { printf "${red}[err]${nc} %s\n" "$1"; } # ENVIRONMENT check_deps() { local tools=(adb fastboot apktool uber-apk-signer fzf) for t in "${tools[@]}"; do if ! command -v "$t" &>/dev/null; then log_warn "$t missing" fi done } # DEVICE MANAGEMENT cmd_info() { printf "${cyan}DEVICE INFORMATION${nc}\n" printf "model: %s\n" "$(adb shell getprop ro.product.model)" printf "android: %s\n" "$(adb shell getprop ro.build.version.release)" local bat=$(adb shell dumpsys battery | grep level | cut -d: -f2 | tr -d ' ') local stat=$(adb shell dumpsys battery | grep 'AC powered' | cut -d: -f2 | tr -d ' ') [[ "$stat" == "true" ]] && charge="charging" || charge="discharging" printf "battery: %s%% (%s)\n" "$bat" "$charge" if adb shell su -c "echo 'rooted'" &>/dev/null; then printf "root: ${green}yes${nc}\n" else printf "root: ${red}no${nc}\n" fi } cmd_wifi() { local port=${1:-5555} local ip=$(adb shell ip addr show wlan0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1) if [ -z "$ip" ]; then log_err "wifi ip not detected" return 1 fi adb tcpip $port sleep 2 adb connect "$ip:$port" log_success "connected to $ip:$port" } # PACKAGE MANAGEMENT cmd_nuke() { local pkg=$(adb shell pm list packages | cut -d: -f2 | fzf --prompt="nuke > " --height=40%) if [ -n "$pkg" ]; then read -p "confirm nuke $pkg? (y/n): " confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then adb shell pm uninstall -k --user 0 "$pkg" log_success "nuked $pkg" fi fi } # APK ENGINEERING cmd_pull() { local pkg=${1:-$(adb shell pm list packages | cut -d: -f2 | fzf --prompt="pull > ")} [ -z "$pkg" ] && return local path=$(adb shell pm path "$pkg" | head -n 1 | cut -d: -f2 | tr -d '\r') log_info "pulling $pkg..." adb pull "$path" "./$pkg.apk" } cmd_scrot() { local file="scrot_$(date +%Y%m%d_%H%M%S).png" adb shell screencap -p /sdcard/temp.png adb pull /sdcard/temp.png "./$file" >/dev/null adb shell rm /sdcard/temp.png log_success "saved: $file" } # MAIN ROUTER usage() { printf "${cyan}ARCH-DROID TOOL (ADBX)${nc}\n" printf "usage: adbx [args]\n\n" printf "DEVICE\n" printf " check verify tools\n" printf " list list devices\n" printf " info show battery/root\n" printf " wifi wireless adb\n\n" printf "PACKAGES\n" printf " nuke interactive uninstall\n" printf " freeze disable app\n" printf " melt enable app\n\n" printf "FILES\n" printf " pull extract apk\n" printf " sign sign apk\n" printf " scrot screenshot\n" exit 1 } case "$1" in check) check_deps ;; list) adb devices -l fastboot devices ;; info) cmd_info ;; wifi) cmd_wifi "$2" ;; nuke) cmd_nuke ;; pull) cmd_pull "$2" ;; scrot) cmd_scrot ;; *) usage ;; esac