adb-ui-rs is a debugging focused desktop GUI for common ADB(Android Debug Bridge) workflows, built with Rust and eframe/egui.
It gives each connected Android device or emulator its own workspace for logs, shell access, file browsing, screenshots, debugging, monitoring, and app-focused deployment tasks.
- Live
logcatstreaming with filters and multiple buffer views - Per-device logcat filtering by text, priority, tag, and PID
- App file log pulling and live watching
- Interactive device shell
- Screenshot capture and screen recording
- Remote file explorer with upload, download, preview, and delete actions
- Device and app management actions
- Package management helpers for package listing, split APK installs, permission grant/revoke, enable/disable, clear data, and force-stop
- Port forwarding, reverse forwarding, Wi-Fi ADB pairing, and ADB server controls
- Debugging and profiling helpers built around
dumpsys,atrace,simpleperf, andstrace - Explicit memory allocation tracking, heap-watch controls, and managed/native heap dumps
- Developer command surfaces for
am,pm,wm,settings,cmd,content, and SQLite access throughrun-as - OTA sideload and fastboot flash companion tooling
- System monitoring views for processes, CPU, storage, battery, thermal, I/O, and services
- App data deployment to external storage or app-internal storage through
run-as - Emulator, Wi-Fi ADB, and WSA helpers
- Rust
1.92or newer - A working
adbinstallation - Android SDK tools for emulator and AVD features such as
emulator,avdmanager, andsdkmanager
Notes:
- The app looks for
adbonPATHfirst. - If autodetection fails, the Settings panel can be used to point the app to the
adbexecutable. - Some features depend on device-side tooling and permissions. Internal file access and internal deploys typically require
run-as <package>to work, which usually means the target app is installed as debuggable.
Clone the repository and run the app:
git clone https://github.com/mq1n/adb-ui-rs
cd adb_log_viewer
cargo runBuild a release binary:
cargo build --releaseOn Windows, the release binary is:
target/release/adb-ui-rs.exe
The project also builds on Linux in CI. On Ubuntu or Debian-based systems, install:
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libxdo-dev libdbus-1-devIf you build inside WSL, use a current Rust toolchain from rustup (or another Rust 1.92+ install). Older distro-packaged Cargo versions such as Ubuntu's 1.75 cannot read this repository's Cargo.lock v4.
The app stores configuration in a per-user config directory:
- Windows:
%APPDATA%/adb-ui-rs/adb-ui-rs.json - Linux:
$XDG_CONFIG_HOME/adb-ui-rs/adb-ui-rs.jsonor~/.config/adb-ui-rs/adb-ui-rs.json - macOS:
~/Library/Application Support/adb-ui-rs/adb-ui-rs.json
If no user config exists yet, the app also loads a legacy adb-ui-rs.json placed next to the executable.
The main settings are:
bundle_idactivity_classlogcat_tagsdeploy_dirs
Example:
{
"bundle_id": "com.example.app",
"activity_class": "com.example.app/.MainActivity",
"logcat_tags": [
"SDL",
"SDL/APP",
"GameActivity",
"NativeCrashReporter"
],
"deploy_dirs": [
{
"label": "Game Paks",
"local_path": "C:/game/pack",
"remote_suffix": "pack"
}
]
}Notes:
activity_classaccepts either.MainActivity,com.example.app.MainActivity, or a full component such ascom.example.app/.MainActivity.- If
activity_classis empty, launch actions fall back tomonkey. - If
logcat_tagsis empty, the app shows unfilteredlogcatoutput instead of silently filtering everything out. - Saving settings applies updated logcat tags and package settings immediately.
deploy_dirsare read from the JSON config and used by the Deploy tab.
Each connected device gets its own tab. Inside each device tab, the app provides:
Logs: live logcat and snapshot/watch support for additional log buffersFile Logs: app log file collection from internal and external storageShell: interactive shell session with command historyScreen: screenshots, auto-capture, recording, export, and clipboard actionsExplorer: remote file browsing and file operationsDevice: device info, app actions, package/network/content tools, OTA helpers, bugreport, UI dump, emulator helpers, and quick diagnosticsDebug: focused debugging and profiling toolsMonitor: system snapshots for common device diagnosticsDeploy: push local directories into app storageApp Log: internal log for the desktop app itself
The Settings panel also exposes global platform-tool workflows:
adb devices -ladb kill-server/adb start-serveradb pairfor Android 11+ wireless debuggingfastboot devicesand partition flashing
The project is package-oriented and commonly works with paths such as:
/sdcard/Android/data/<package>/files/.../sdcard/Android/data/<package>/files/logs/...files/...throughrun-asfiles/logs/...throughrun-as
The Deploy tab supports two modes:
- External deploy via
adb pushinto/sdcard/Android/data/<package>/files/<suffix> - Internal deploy via staging to
/data/local/tmp/_adb_ui_stageand copying into app storage withrun-as
src/main.rs: native app entry pointsrc/ui/: GUI modules for each tab and settings panelsrc/adb/: wrappers aroundadb, emulator, and shell commandssrc/device.rs: per-device state and feature categoriessrc/config.rs: persisted application configuration.github/workflows/ci.yml: CI checks and release workflow
Useful commands:
cargo fmt --check
cargo clippy -- -W clippy::pedantic -W clippy::nursery -D warnings
cargo test
cargo build --releaseCI runs formatting, clippy, and release builds.
Contributions are welcome.
If you plan to make a larger change, open an issue first or describe the direction clearly in the pull request so the scope and intent are easy to review.
Keep changes focused, avoid unrelated refactors, and update documentation when behavior changes.
For pull requests:
-
Fork the repository.
-
Create a focused branch for your change.
-
Make the change with clear commit messages.
-
Run the local checks:
cargo fmt --check cargo clippy -- -W clippy::pedantic -W clippy::nursery -D warnings cargo test -
Update
README.mdor related docs if the user-facing workflow changed. -
Open a pull request with:
- a short summary of the change
- the motivation or problem being solved
- testing notes
- screenshots or recordings for UI changes, when relevant
This project is licensed under the MIT License. See LICENSE.
