dotfiles/.local/bin/adbx
Osaigbovo Omere 43007d310e
update...
2026-10-06 10:54:24 +01:00

120 lines
3.1 KiB
Bash

#!/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 <command> [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