Control your Android device from your desktop β mirror your screen, manage files, sideload apps, monitor battery, and more.
Android PC Companion is a desktop app that bridges your PC and your Android phone. No bloat, no account, no root β it talks directly to your device over adb and scrcpy, and downloads those tools automatically on first launch. You never have to install them yourself.
Note: USB debugging must be enabled on your phone (Developer Options), or you can connect wirelessly via the built-in QR pairing.
Live device summary β battery ring with estimated mAh, CPU load, memory usage, storage breakdown, and quick launchers into every section.
Full-featured file manager for your device storage:
- Multi-select files with checkboxes + batch download and upload with per-file progress
- Drag-and-drop upload from your PC
- Preview images, videos, text files, and PDFs inline
- Breadcrumb navigation with clickable path segments and a back arrow
- Clickable storage overview β jump straight to internal storage or SD card
- Filter chips (All / User / System / Disabled) + search
- Sideload APKs from your PC
- App diagnostics β APK size, declared permissions, clear-data, disable/enable, uninstall
- Real scrcpy mirroring with resolution / bitrate / FPS controls
- Transport bar β volume, rotate, screenshot, screen record, long-press power β works over adb even when the mirror window is closed
- Camera preview β view your phone's cameras (front/back/tele/wide) live, with sensor info
- Capture photos and record video from any camera
- Torch control with multi-tile flash support
- Audio forwarding + media transport controls (play/pause/next/prev)
- Now-playing display with track info
- Use the phone as a PC webcam β via OBS Virtual Camera (Windows/macOS) or v4l2 loopback (Linux); see π₯ Use Your Phone as a Webcam below
Fuller battery + device-spec readout β health, temperature, cycle count (where the kernel exposes it), voltage, and SoC details.
Quick-command buttons plus a free-text console that runs anything starting with adb or fastboot.
- Unlock / reboot-to-bootloader
- Fastboot partition flasher β pick a partition, pick a
.img, confirm, flash (with confirmation for a reason β wrong image = brick) - Shared-storage backup flow
- QR pairing β the app renders a QR code locally, your phone scans it, done
- Wi-Fi pairing with pairing code / port entry
- Auto-connect β previously paired phones reconnect automatically
- Multi-device switcher
Grab the latest installer from the Releases page:
π Download from GitHub Releases
Each release ships a Windows installer (Companion Setup x.x.x.exe). Just run it β adb, fastboot, and scrcpy are downloaded automatically on first launch.
The app version automatically matches the release tag (e.g. release
v1.2.3β exe version1.2.3), so you always know what you're running.
| Dark Overview | Theme Picker | Light Mode | Storage & Memory |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Battery station (47% charging), CPU cores at 99%, system memory 5.7/7.4 GB, storage breakdown, and the accent-color / dark-light-auto picker.
| Browse | Text Preview | Image Preview | Drag & Drop |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Multi-select β batch download, breadcrumb navigation, SD card / internal storage, and inline previews for code, text, and images β drag files from Windows Explorer straight onto the device.
518 packages with User / System / Bloatware / Frozen filters, search, APK sideload via drag-and-drop, and per-app diagnostics (size, permissions, freeze, uninstall).
| Settings | Active Mirroring | YouTube Playback |
|---|---|---|
![]() |
![]() |
![]() |
Resolution / bitrate / FPS controls, docked control bar (power, volume, rotate, screenshot, record) and real device mirroring β works even when dragging the floating window around.
One-click shortcuts (adb devices, dumpsys battery, etc.) plus a free-text shell for any adb / fastboot command.
| Standby | Live Camera Feed |
|---|---|
![]() |
![]() |
Optics & stream parameters, sensor picker (Rear 12.5 MP / Front 16.2 MP), torch & mic toggles β standby β live camera bridge with the phone as a PC webcam.
Battery power station, real-time electrical & thermal telemetry (voltage, current, temp), SoC specs (Mediatek MT6833GP, 8 cores), RAM and storage details.
| Fastboot Flasher | Backup & Binaries |
|---|---|
![]() |
![]() |
Unlock suite with factory-reset warning, partition flasher (boot + custom .img), shared-storage backup and the adb / fastboot / scrcpy version panel (all READY).
| USB Mode | Wireless Mode | QR Pairing | Switch Device |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
USB debugging guide + scan, Wi-Fi IP/port + 6-digit pairing code, QR code for Android 11+ wireless debugging, and the detected-devices switcher.
Companion appears under "Recently added" right after installing Companion Setup x.x.x.exe.
The Multimedia tab streams any phone camera to your PC. To make other apps (Zoom, Meet, Teams, Discord) see it as a webcam, bridge it through a virtual-camera driver. The Camera tab's bridge status tells you which route applies on your machine.
Windows has no built-in virtual camera, so the route is OBS Studio (free, signed driver β the app detects it and reports "OBS Virtual Camera available").
- Connect your phone, open the Multimedia tab, pick a lens/resolution and press Start β a window titled
Camera β <serial>appears. Keep it open. - Open OBS β Sources β + β Window Capture β select the
Camera β <serial>window (crop/fit with right-click β Transform if needed). - In OBS β Controls (bottom-right) β Start Virtual Camera. First run may ask for admin to register the driver β one time only.
- In Zoom/Meet/Teams/Discord, pick OBS Virtual Camera as the camera. If it doesn't appear, restart that app after step 3.
Keep OBS running while you use the camera elsewhere, and stop the stream in Companion when you're done.
sudo modprobe v4l2loopback exclusive_caps=1 card_label="Phone Camera"Reopen the Camera tab β it will report v4l2 loopback ready with the device (e.g. /dev/video2). Start the stream and pick Phone Camera as the camera in any app. (Needs a scrcpy build with --v4l2-sink β distro packages have it; the tab warns you otherwise.)
Mic: the camera tab's mic toggle forwards the phone mic into the stream audio (heard on PC speakers). The OBS route above carries video β for calls, pair it with your usual microphone, or use OBS's audio monitoring to route it.
Built with:
| Technology | Purpose | |
|---|---|---|
| Electron | Desktop app shell, frameless window with acrylic/vibrancy | |
| Node.js | Main-process logic, IPC, tool orchestration | |
| ADB / Fastboot | Device communication, file transfer, shell commands | |
| scrcpy | Screen mirroring + camera feed | |
| Vanilla JS | Renderer β no frontend framework | |
| HTML + CSS | UI layout, custom window chrome | |
| jsQR | QR code decoding (pairing flow) | |
| extract-zip | Tool extraction after download |
Zero adb/scrcpy knowledge required β the app auto-downloads platform-tools from Google and scrcpy from its GitHub releases into its own user-data folder, and uses those copies from then on.
Requirements: Node.js 18+, a real desktop session (not headless), and for USB workflows, physical USB access to the phone.
# Clone
git clone https://github.com/jackhallloween21/Android-PC-Companion-App.git
cd Android-PC-Companion-App
# Install dependencies
npm install
# Run in dev mode
npm start
# Run the test suite
npm test
# Build the Windows installer
npm run distAndroid-PC-Companion-App/
β
βββ main.js # Electron main process β window, IPC handlers,
β # adb/fastboot/scrcpy orchestration
βββ preload.js # Secure bridge between main & renderer (contextIsolation)
β
βββ src/ # Pure logic modules (no DOM, testable)
β βββ apps.js # App inventory from pm list packages / dumpsys
β βββ autoconnect.js # Remember wirelessly-paired devices
β βββ camera.js # Camera capability discovery, torch, launch args
β βββ dock.js # Docked-mirror window geometry
β βββ downloader.js # Auto-download adb/fastboot/scrcpy
β βββ keys.js # Device key & status-bar commands over adb
β βββ media.js # Now-playing parsing from dumpsys media_session
β βββ pairing.js # QR payload generation for wireless pairing
β βββ perf.js # CPU/RAM telemetry from /proc
β βββ power.js # Battery/power parsing from kernel power-supply class
β βββ qrencode.js # Hand-rolled QR encoder (byte mode, v1-10)
β βββ scrcpy.js # scrcpy version-aware flag detection & arg building
β βββ storage.js # Storage breakdown (dumpsys diskstats + df)
β βββ theme.js # Accent colors & light/dark/auto themes
β βββ winmove.js # Move/resize the foreign scrcpy window (Windows)
β βββ wireless.js # Wireless debugging helpers (pair vs connect ports)
β
βββ renderer/ # UI layer
β βββ index.html # App shell β titlebar, sidebar, views, modals
β βββ renderer.js # Renderer logic β state, views, event wiring
β βββ controlbar.html # Mirror transport control bar
β βββ controlbar.js # Transport bar logic
β βββ styles.css # Full styling β glass cards, dark theme
β
βββ test/ # Node test-runner suite (one file per src module)
βββ tools/ # Dev utilities (icon builder)
βββ assets/ # Bundled resources
β
βββ .github/workflows/
βββ build.yml # CI: builds the exe on release, auto-bumps version
# from the release tag, attaches it to the release
Everything the app does is a real adb / fastboot / scrcpy invocation β nothing is mocked. The main process shells out via child_process.execFile, parses output with the pure modules in src/, and exposes it to the renderer over typed IPC channels.
Auto-downloaded tools β on first launch the app checks for adb/fastboot/scrcpy on your PATH. Missing ones are downloaded (platform-tools from dl.google.com, scrcpy from GitHub releases) into app.getPath('userData')/bin and reused forever. The Binaries & Drivers panel in the sidebar shows resolved paths, versions, and a re-verify button.
Wireless QR pairing β the PC displays a QR code rendered by the app's own encoder (src/qrencode.js, byte-mode, versions 1β10, round-trip tested); the phone scans it with Android's "Pair device with QR code" screen. The phone then advertises over mDNS (_adb-tls-pairing._tcp), the app runs adb pair against it, then connects on the separate _adb-tls-connect._tcp port. A manual pairing-code form is the fallback when adb's mDNS backend isn't running (common on Windows).
Window chrome β frameless with a custom titlebar, using native OS effects: vibrancy on macOS, backgroundMaterial: 'acrylic' on Windows 11 22H2+, opaque on Linux for compositor safety.
Honest engineering notes β real functionality, best-effort data sources:
- Storage breakdown is per-folder
du -sh(DCIM/Pictures/etc.), not a true partition split β Android doesn't expose that without root - Battery cycle count reads
/sys/class/power_supply/battery/cycle_count, missing on some kernels β shows "N/A", not a fake number - Console command parsing splits on whitespace β quoted args with spaces won't parse; it's for one-liners, not a full shell
- Fastboot flashing will brick a device given the wrong image β that's why the confirmation dialog exists
- Camera feed displays in-app, with a bridge-status row that routes it to other apps: OBS Virtual Camera on Windows/macOS, direct v4l2 loopback on Linux β see π₯ Use Your Phone as a Webcam
- Fork the repo
- Create your branch (
git checkout -b feature/amazing) - Commit changes (
git commit -m 'Add amazing feature') - Push (
git push origin feature/amazing) - Open a Pull Request
Run npm test before submitting β the test suite covers every src/ module.
Made with β€οΈ and lots of adb shell
β Star the repo if you find it useful!






















