A modern, user-friendly GUI application for Android Debug Bridge (ADB) operations, built with PyQt6.
Works on macOS, Linux, and Windows (ADB + device drivers permitting).
- Auto-detect connected Android devices
- View device information (model, manufacturer, Android version, etc.)
- Auto-refresh device list every 5 seconds (silent mode to reduce log spam)
- Device selection with automatic status updates
- Push files from PC to Android device
- Pull files from Android device to PC
- File Explorer: browse
/sdcard, upload/download, drag-and-drop upload
- Install APK files (supports split APKs)
- Uninstall applications (with fallback to user uninstall for system apps)
- Reinstall apps for current user
- List all installed apps with search functionality
- Enable/disable apps
- Start / stop / force-stop apps (from the Installed Apps window)
- View app details and package information
- Open APKs folder
- Take screenshots (automatically saved to
screenshots/folder with timestamps) - Reboot device (normal, recovery, bootloader)
- Mirror screen with scrcpy (optional)
- Multi-line textbox for entering complex commands
- Execute ADB shell commands directly on your Android device
- Commands run on Android (Linux), not your desktop OS
- Optional prefixes: You can include "adb shell" prefix, but it's not required (auto-stripped)
- View output in real-time in the log window
- View real-time Android logcat output
- Start/stop logcat streaming with improved error handling
- Automatic process validation and error reporting
- Clear log output
- Simple Mode: Remove all safe Google apps automatically
- Custom Mode: Select individual apps to remove (safe, risky, and unsafe packages)
- Categorized package lists:
- Safe packages (won't break functionality)
- Risky packages (might break some features)
- Unsafe packages (can break device - use with caution)
- Undo DeGoogle: Restore previously disabled/uninstalled packages
- State persistence: All changes are saved to
degoogle_state.json
- Dark Mode: Toggle between light and dark themes (persistent)
- Modern, clean interface
- Real-time status updates
- Comprehensive logging with timestamps
- Settings persistence (saved to
settings.json)
- Python 3.8+
- PyQt6 (install via
pip install PyQt6) - ADB (Android Debug Bridge)
- Install via Android Studio Platform Tools or your package manager
- Or download from: https://developer.android.com/studio/releases/platform-tools
- Android Device with USB debugging enabled
- scrcpy (optional, for screen mirroring)
- macOS (Homebrew):
brew install scrcpy
- macOS (Homebrew):
- Clone or download this repository
- Install Python 3.8 or higher
- Install PyQt6:
Or directly:
pip install -r requirements.txt
pip install PyQt6
- Download Android SDK Platform Tools:
- Visit: https://developer.android.com/studio/releases/platform-tools
- Extract the ZIP file to a location of your choice
- You'll need the
platform-toolsfolder
-
Enable USB debugging on your Android device:
- Go to Settings β About Phone
- Tap "Build Number" 7 times to enable Developer Options
- Go to Settings β Developer Options
- Enable "USB Debugging"
-
Connect your Android device via USB
-
Run the application:
python3 adb_gui.py
-
ADB auto-detection (recommended):
- The app will try to find
adbautomatically via yourPATH(and common SDK/Homebrew locations on macOS). - If it cannot find ADB, it will prompt you to select it.
- You can always change it later using the "ADB Path" button.
- The app will try to find
-
Select your device from the dropdown (devices auto-refresh every 5 seconds)
-
Use the various buttons to perform ADB operations
- The app first attempts to auto-detect
adb(PATH + common locations) - If auto-detection fails, it will prompt you to select the
platform-toolsfolder or theadbexecutable - The selected path is saved to
settings.jsonfor persistence - You can change the ADB path later using the "ADB Path" button in the UI
- The application will also check system PATH as a fallback
- Settings are saved to
settings.json:- ADB path
- Dark mode preference
- DeGoogle state is saved to
degoogle_state.json:- Disabled packages
- Uninstalled packages
- Timestamps and actions
- Screenshots are automatically saved to the
screenshots/folder in the project directory - Filenames include timestamps:
screenshot_YYYYMMDD_HHMMSS.png
- Pulled APKs are saved to the
apks/folder in the project directory - Useful for backing up apps before uninstalling
- Devices are automatically detected and listed
- Device status (device, offline, unauthorized) is shown
- Click "Info" to see detailed device information
- Auto-refresh runs silently in the background (only logs when devices change)
- Push: Select a file from your PC and specify destination path on device
- Pull: Specify file path on device and choose where to save on PC
- File Explorer:
- Browse the device filesystem (starts at
/sdcard) - Double-click folders to navigate
- Upload via button or drag-and-drop files from your computer into the list
- Download selected files/folders to a chosen local folder
- Browse the device filesystem (starts at
- Install APK: Browse and install APK files (supports split APKs)
- Uninstall: Select from installed apps list or enter package name
- List Apps: View all installed packages with:
- Search functionality (by app name or package)
- Filter to show only disabled apps
- Uninstall, reinstall, enable/disable, start/stop/force-stop actions
- Double-click to view app details
- Reinstall for User: Restore apps that were uninstalled for your user account
- Open APKs Folder: Quickly access pulled APK files
- Takes a screenshot and automatically saves to
screenshots/folder - Filename includes timestamp for easy organization
- Enter any ADB shell command in the multi-line textbox
- Commands run on your Android device (Linux), not your desktop OS
- Use Android/Linux commands like
grep,ls,cat - You can include "adb shell" prefix, but it's optional (will be auto-stripped)
- Click "Run Command" to execute
- Output appears in real-time in the log window
- Examples:
ls /sdcard,pm list packages,dumpsys battery | grep level
- Click "πͺ Mirror Screen (scrcpy)" to mirror the currently selected device
- If
scrcpyis not found, the app will suggest installing it (and can also let you browse to the binary) - Note: Some scrcpy builds donβt support a custom
--adboption; the app will auto-fallback if needed.
- Click "Start Logcat" to begin streaming Android logs
- Improved error handling: Shows clear error messages if logcat fails to start
- Process validation: Automatically checks if logcat process started successfully
- Click "Stop Logcat" to stop streaming
- Click "Clear" to clear the log output
- Logs appear in real-time in the output window with "LOGCAT" tag
- Simple Mode: Quickly remove all safe Google apps
- Custom Mode: Select individual apps from categorized lists:
- Safe packages: Apps that can be safely removed
- Risky packages: Apps that might break some functionality
- Unsafe packages: Critical system components (use with extreme caution)
- Choose to disable (can be re-enabled) or uninstall (can be restored)
- Undo DeGoogle: Restore previously removed packages from saved state
- In the UI, DeGoogle and Undo DeGoogle are placed side-by-side for convenience.
- Toggle between light and dark themes using the button in the header
- Preference is saved automatically
- All UI elements update in real-time when toggled
- Logcat not working: The logcat feature may not display output correctly. This is a known issue that may be related to device compatibility or ADB version. Workaround: Use shell commands to view logs manually (e.g.,
logcat -d).
No devices found:
- Ensure USB debugging is enabled on your device
- Check USB cable connection
- Try different USB port
- On device, check for "Allow USB debugging?" prompt and accept it
- Run
adb devicesin a terminal to verify ADB can see your device
ADB not found:
- The app tries to auto-detect
adbvia PATH and common SDK locations - If it still canβt find it, use the "ADB Path" button to set it
- Make sure you select the
platform-toolsfolder (containsadb) or theadbexecutable itself - The application will also check system PATH as a fallback
Permission denied errors:
- Some operations require root access on the device
- Try enabling "Root access" in Developer Options (if available)
- Some system apps can only be disabled/uninstalled for your user account
App list not showing:
- Make sure a device is selected
- Check the log output for any error messages
- Try refreshing the device list
Dark mode not applying to all elements:
- Try toggling dark mode off and on again
- Restart the application if issues persist
Shell command errors (e.g., "findstr: inaccessible or not found"):
- Remember: Commands run on your Android device (Linux), not your desktop OS
- Use Android/Linux commands:
grep,ls,cat - You can include "adb shell" prefix, but it's optional (auto-stripped)
- Check the help text in the UI for examples
scrcpy not found:
- Install scrcpy and try again
- macOS (Homebrew):
brew install scrcpy
- macOS (Homebrew):
Logcat not showing output:
- Make sure a device is selected
- Check the log output for error messages
- Verify ADB connection: Try running a simple shell command first
- Some devices may require root access for full logcat output
- If logcat fails to start, check the error message in the log window
adb/
βββ adb_gui.py # Main application file
βββ requirements.txt # Python dependencies
βββ settings.json # User settings (ADB path, scrcpy path, dark mode)
βββ degoogle_state.json # DeGoogle operation history
βββ screenshots/ # Screenshot storage (auto-created)
βββ apks/ # Pulled APK storage (auto-created)
If you add an icon file next to adb_gui.py, it will be used automatically:
icon.icns(macOS)icon.png/icon.jpg
This project is open source and available for personal and commercial use.
Feel free to submit issues, fork the repository, and create pull requests for any improvements.