A fast, btop-style terminal UI for monitoring Android device and per-app performance in real time — over ADB, no root required.
- Per-core CPU — live usage bars and frequencies for every core
- App CPU & threads — top threads table with PID, CPU%, memory, core affinity
- Memory — used / free breakdown
- Battery & Power — level, charging state, doze / idle state
- Thermal — AP, SKIN, and battery temperatures with history
- Network — per-app and total Wi-Fi / mobile RX / TX with sparklines
- Jobs & Alarms — scheduled jobs and pending alarms for the selected app
- Device mode — monitor the whole device, or switch to a specific package
- Flicker-free rendering via
ratatuiwith async ADB collectors
- Rust 1.75+ (edition 2021)
- ADB in your
PATH - An Android device with USB debugging enabled (wired or over Wi-Fi)
git clone https://github.com/<your-username>/android-perf-monitor.git
cd android-perf-monitor
cargo build --releaseThe binary will be at target/release/android-perf-monitor.
# Pick device and package interactively
./target/release/android-perf-monitor
# Or pass everything via flags
./target/release/android-perf-monitor \
--device <serial> \
--package com.example.app \
--interval 1| Flag | Description | Default |
|---|---|---|
-d, --device <SERIAL> |
ADB device serial | first device |
-p, --package <NAME> |
Package to track | device-wide |
-i, --interval <SECS> |
Sample interval (seconds) | 1 |
-o, --output <PATH> |
CSV output path | none |
| Key | Action |
|---|---|
q / Esc |
Quit |
Space |
Pause / resume sampling |
d |
Open device picker |
p |
Open package picker (type to filter) |
x |
Clear package selection (device-wide mode) |
f |
Toggle fullscreen on the threads panel |
↑ / ↓ |
Navigate lists |
Enter |
Select |
A single persistent adb shell session streams metrics from /proc, dumpsys, and top. Each panel has its own async collector that pushes updates over an mpsc channel to the UI thread, which redraws at ~60fps using double-buffered ratatui.
MIT — see LICENSE.
