A better interface for adb. Same functionality, better UX.
Because adb output is hard to read and commands are inconsistent. aim makes common tasks easier without changing how ADB works.
cargo install --path .Requirements: Rust 1.70+, ADB in PATH
| Task | aim | adb |
|---|---|---|
| List devices | aim ls |
adb devices -l |
| Get property | aim getprop ro.product.model |
adb shell getprop ro.product.model |
| Get all properties | aim getprop |
adb shell getprop |
| Pattern match props | aim getprop "ro.product.*" |
adb shell getprop | grep ro.product |
| Screenshot | aim screenshot |
adb exec-out screencap -p > screen.png |
| Screenshot (specific file) | aim screenshot -o photo.png |
adb exec-out screencap -p > photo.png |
| Screen record | aim screenrecord |
adb shell screenrecord /sdcard/video.mp4 && adb pull /sdcard/video.mp4 |
| Screen record (30s) | aim screenrecord -t 30 |
adb shell screenrecord --time-limit 30 /sdcard/video.mp4 && adb pull /sdcard/video.mp4 |
| Push file | aim push file.txt /sdcard/ |
adb push file.txt /sdcard/ |
| Pull file | aim pull /sdcard/file.txt ./ |
adb pull /sdcard/file.txt ./ |
| Push directory | aim push -r folder/ /sdcard/ |
adb push folder/ /sdcard/ |
| Interactive shell | aim shell |
adb shell |
| Run command | aim shell ls /sdcard |
adb shell ls /sdcard |
| View kernel logs | aim dmesg |
adb shell dmesg |
| View app logs | aim logcat |
adb logcat |
| Filter logs by priority | aim logcat -p ERROR |
adb logcat *:E |
| Clear logs | aim logcat -c |
adb logcat -c |
| Restart ADB server | aim server restart |
adb kill-server && adb start-server |
| Check server status | aim server status |
adb start-server |
| Install APK | aim install app.apk |
adb install app.apk |
| Uninstall app | aim uninstall com.example |
adb uninstall com.example |
| List packages | aim shell pm list packages |
adb shell pm list packages |
| Device info | aim ls -v |
adb devices -l |
| Run with specific device | aim -d pixel screenshot |
adb -s <full-id> exec-out screencap -p > screen.png |
# Instead of: adb devices -l
aim ls
# Output:
DEVICE ID BRAND MODEL STATUS NAME
abc123 Google Pixel 6 device work-phone
def456 Samsung Galaxy S21 device personal# Instead of: adb shell getprop ro.product.model
aim getprop ro.product.model
# Get all properties matching a pattern
aim getprop "ro.product.*"# Instead of: adb exec-out screencap -p > screen.png
aim screenshot
# Interactive mode - press space to capture
aim screenshot -i# Instead of: adb shell screenrecord /sdcard/video.mp4 && adb pull /sdcard/video.mp4
aim screenrecord
# Record for 30 seconds
aim screenrecord -t 30# Progress bars for file transfers
aim push largefile.zip /sdcard/
aim pull /sdcard/DCIM/ ./photos/When multiple devices are connected:
# Partial ID matching
aim -d pixel screenshot # Matches "pixel6-serial123"
aim -d work screenshot # Matches device aliased as "work"~/.config/aim/config.toml:
[devices]
work = { id = "28291FDH200001", name = "Pixel 6 (work)" }
personal = { id = "R5CR10ZYZAB", name = "Galaxy S21" }
[screenshot]
output = "~/Pictures/Screenshots"
[screenrecord]
output = "~/Videos"aim ls- List devices (with better formatting)aim getprop [pattern]- Get device propertiesaim screenshot- Take a screenshotaim screenrecord- Record screenaim push/pull- Transfer files with progress barsaim dmesg- View kernel logsaim logcat- View app logs (with filtering)aim shell [cmd]- Run shell commandsaim server start/stop/restart- Manage ADB serveraim rename <device> <alias>- Create device aliases
Most commands support -o json or -o plain:
aim ls -o json
aim getprop -o jsonStandard Rust project. Run tests with cargo test.
MIT