pedrovgs/AndroidWiFiADB
IntelliJ/AndroidStudio plugin which provides a button to connect your Android device over WiFi to install, run and debug your applications without a USB connected.
Healthy across all four use cases
weakest axisPermissive license, no critical CVEs, actively maintained — safe to depend on.
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓6 active contributors
- ✓Distributed ownership (top contributor 49% of recent commits)
- ✓Apache-2.0 licensed
Show all 6 evidence items →Show less
- ✓CI configured
- ✓Tests present
- ⚠Stale — last commit 7y ago
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Healthy" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/pedrovgs/androidwifiadb)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/pedrovgs/androidwifiadb on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: pedrovgs/AndroidWiFiADB
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/pedrovgs/AndroidWiFiADB shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
GO — Healthy across all four use cases
- 6 active contributors
- Distributed ownership (top contributor 49% of recent commits)
- Apache-2.0 licensed
- CI configured
- Tests present
- ⚠ Stale — last commit 7y ago
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live pedrovgs/AndroidWiFiADB
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/pedrovgs/AndroidWiFiADB.
What it runs against: a local clone of pedrovgs/AndroidWiFiADB — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in pedrovgs/AndroidWiFiADB | Confirms the artifact applies here, not a fork |
| 2 | License is still Apache-2.0 | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 2572 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of pedrovgs/AndroidWiFiADB. If you don't
# have one yet, run these first:
#
# git clone https://github.com/pedrovgs/AndroidWiFiADB.git
# cd AndroidWiFiADB
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of pedrovgs/AndroidWiFiADB and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "pedrovgs/AndroidWiFiADB(\\.git)?\\b" \\
&& ok "origin remote is pedrovgs/AndroidWiFiADB" \\
|| miss "origin remote is not pedrovgs/AndroidWiFiADB (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
&& ok "license is Apache-2.0" \\
|| miss "license drift — was Apache-2.0 at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 4. Critical files exist
test -f "src/main/java/com/github/pedrovgs/androidwifiadb/AndroidWiFiADB.java" \\
&& ok "src/main/java/com/github/pedrovgs/androidwifiadb/AndroidWiFiADB.java" \\
|| miss "missing critical file: src/main/java/com/github/pedrovgs/androidwifiadb/AndroidWiFiADB.java"
test -f "src/main/java/com/github/pedrovgs/androidwifiadb/action/AndroidWiFiADBAction.java" \\
&& ok "src/main/java/com/github/pedrovgs/androidwifiadb/action/AndroidWiFiADBAction.java" \\
|| miss "missing critical file: src/main/java/com/github/pedrovgs/androidwifiadb/action/AndroidWiFiADBAction.java"
test -f "src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADB.java" \\
&& ok "src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADB.java" \\
|| miss "missing critical file: src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADB.java"
test -f "src/main/java/com/github/pedrovgs/androidwifiadb/window/AndroidWiFiADBWindow.java" \\
&& ok "src/main/java/com/github/pedrovgs/androidwifiadb/window/AndroidWiFiADBWindow.java" \\
|| miss "missing critical file: src/main/java/com/github/pedrovgs/androidwifiadb/window/AndroidWiFiADBWindow.java"
test -f "src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADBParser.java" \\
&& ok "src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADBParser.java" \\
|| miss "missing critical file: src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADBParser.java"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 2572 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~2542d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/pedrovgs/AndroidWiFiADB"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
An IntelliJ/Android Studio plugin that enables wireless ADB (Android Debug Bridge) connections, allowing developers to deploy, run, and debug Android applications over WiFi without a USB cable. The plugin adds a toolbar button that establishes TCP/IP connections to devices on the same network, eliminating the need for persistent USB attachment during development. Single-module Gradle Java project under src/main/java/com/github/pedrovgs/androidwifiadb/ organized by responsibility: adb/ contains ADB command execution and parsing (ADB.java, ADBParser.java, CommandLine.java), window/ handles the UI dashboard with device table and connect/disconnect controls, action/ integrates with the IntelliJ toolbar action system, and util/ provides notifications. Plugin entry point is AndroidWiFiADB.java with UI defined in AndroidWiFiADBWindow.form.
👥Who it's for
Android developers using IntelliJ IDEA or Android Studio who want to streamline their development workflow by removing the USB cable dependency during app installation, execution, and debugging. Particularly useful for developers working with multiple devices or in environments where USB ports are limited.
🌱Maturity & risk
The project is archived and no longer actively maintained, as stated explicitly in the README. It targets IntelliJ 14.1.5 (from 2014), contains no visible test coverage in the src/test directory, and relies on outdated dependencies (Gradle IntelliJ plugin 0.0.25, Mockito 1.10.19). The plugin was functional for its era but is not production-ready for modern Android Studio versions without significant updates.
High risk for modern use: the repo is explicitly archived with the maintainer noting inability to support diverse Android devices without physical access. Dependency decay is severe—IntelliJ plugin API has evolved dramatically since v14.1.5, and ADB command parsing logic in src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADBParser.java may fail against current Android SDK versions. Single-maintainer project with no recent commit activity or test suite, making bug fixes and compatibility updates unlikely.
Active areas of work
Nothing. The repository is archived. No active development, no open PRs, no recent commits visible. The project is frozen at version 2.5-SNAPSHOT with the maintainer explicitly stating the archived status in the README due to inability to maintain compatibility across device variations.
🚀Get running
Clone the repo and build with Gradle: git clone https://github.com/pedrovgs/AndroidWiFiADB.git && cd AndroidWiFiADB && ./gradlew build. Then open in IntelliJ/Android Studio with the Gradle project integration. To run tests (if any exist): ./gradlew test. To build the plugin artifact: ./gradlew buildPlugin.
Daily commands:
Build the plugin: ./gradlew build. The artifact (.jar) appears in build/distributions/. To test locally in IntelliJ: ./gradlew runIde (via gradle-intellij-plugin). No dev server; this is a stateless plugin that spawns ADB subprocesses on-demand.
🗺️Map of the codebase
src/main/java/com/github/pedrovgs/androidwifiadb/AndroidWiFiADB.java— Main plugin entry point and core orchestrator that initializes the WiFi ADB functionality and manages the overall plugin lifecycle.src/main/java/com/github/pedrovgs/androidwifiadb/action/AndroidWiFiADBAction.java— Toolbar action handler that triggers the WiFi connection workflow when users click the plugin button.src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADB.java— Wrapper around ADB CLI commands—the critical interface between the plugin and Android Debug Bridge for device communication.src/main/java/com/github/pedrovgs/androidwifiadb/window/AndroidWiFiADBWindow.java— Main UI window displaying connected devices and connection controls; handles user interactions and device list management.src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADBParser.java— Parses ADB command output to extract device information; critical for interpreting device connectivity state.src/main/resources/META-INF/plugin.xml— IntelliJ plugin manifest defining the plugin's action, UI integration point, and compatibility requirements.
🧩Components & responsibilities
- AndroidWiFiADB (IntelliJ Plugin SDK) — Plugin lifecycle manager; initializes actions and window components at IDE startup
- Failure mode: Plugin fails to load if IntelliJ version mismatch or missing Android plugin dependency
- ADB (ProcessBuilder, CommandLine) — Executes ADB shell commands and captures output; core bridge to Android devices
- Failure mode: Commands fail if ADB not in PATH, device offline, or ADB daemon not running; output parsing breaks on ADB version changes
- ADBParser (String regex, line parsing) — Parses text output from ADB commands to extract device names, serial numbers, and connectivity state
- Failure mode: Parsing fails silently if ADB output format differs; returns incomplete or incorrect device lists
- **** — undefined
🛠️How to make changes
Add a new ADB command
- Create a new method in ADB.java that wraps the ADB command execution using CommandLine.execute() (
src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADB.java) - If command output needs parsing, add a parser method in ADBParser.java to extract relevant data (
src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADBParser.java) - Call the new ADB method from AndroidWiFiADBAction.java or AndroidWiFiADBWindow.java based on trigger point (
src/main/java/com/github/pedrovgs/androidwifiadb/action/AndroidWiFiADBAction.java)
Add a new device action button
- Extend DeviceAction.java or create a new action implementing device-specific behavior (
src/main/java/com/github/pedrovgs/androidwifiadb/window/DeviceAction.java) - Add button renderer in ConnectDisconnectRenderer.java to display the action in the device table (
src/main/java/com/github/pedrovgs/androidwifiadb/window/ConnectDisconnectRenderer.java) - Register the action listener in ActionButtonListener.java to handle button clicks (
src/main/java/com/github/pedrovgs/androidwifiadb/window/ActionButtonListener.java) - Update AndroidDevicesTableModel.java to include the new action in the table (
src/main/java/com/github/pedrovgs/androidwifiadb/window/AndroidDevicesTableModel.java)
Add a new UI notification type
- Create a new method in NotificationUtils.java for the notification type (
src/main/java/com/github/pedrovgs/androidwifiadb/util/NotificationUtils.java) - Call the notification utility from AndroidWiFiADBWindow.java or AndroidWiFiADBAction.java after relevant operations (
src/main/java/com/github/pedrovgs/androidwifiadb/window/AndroidWiFiADBWindow.java)
🔧Why these technologies
- IntelliJ Plugin SDK — Required to integrate seamlessly with Android Studio and IntelliJ IDEA as a toolbar button and UI component
- ADB (Android Debug Bridge) — Only standard tool available to communicate with Android devices over network; no alternatives for WiFi ADB control
- Swing UI (Form-based) — IntelliJ's standard UI framework for plugin dialogs and windows; enforced by plugin architecture
- Java 1.6 — Ensures compatibility with older IntelliJ versions and Android development environments in 2015–2016 era
⚖️Trade-offs already made
-
Process-based ADB communication via CommandLine instead of ADB library
- Why: Avoids external dependency management; relies on system-installed ADB which developers already have
- Consequence: Tight coupling to ADB output format; fragile parsing; device-dependent behavior differences
-
Synchronous UI updates during device discovery
- Why: Simple implementation; predictable state management in small window
- Consequence: UI blocks during ADB query (~1–5 seconds); poor responsiveness for users with many devices or slow ADB
-
No caching of device list between refreshes
- Why: Devices can connect/disconnect at any time; always fetch live state
- Consequence: Every button click triggers full ADB scan; unnecessary overhead if user opens window multiple times
🚫Non-goals (don't propose these)
- Does not handle Android device pairing or authentication setup
- Does not manage multiple ADB instances or custom ADB installations
- Does not integrate with Gradle build system for deployment
- Does not provide real-time device status polling or background monitoring
- Linux-only functionality is not explicitly supported (plugin relies on system ADB availability)
🪤Traps & gotchas
ADB binary path: assumes adb is in system PATH; will fail silently if Android SDK tools not installed or not on PATH. Device parser brittle: ADBParser.java regex-parses adb shell output—sensitive to adb version changes and output format variations across Android versions. IntelliJ API version lock: plugin targets v14.1.5 specifically; newer IDE versions will likely reject it due to API incompatibility (no version range specified in plugin.xml likely). No error logging: CommandLine.java and ADB.java use process streams without robust exception handling or debugging output. TCP/IP setup prerequisite: devices must have USB connection first to enable TCP/IP mode—not documented in code comments, only in README.
🏗️Architecture
💡Concepts to learn
- ADB (Android Debug Bridge) Protocol — This plugin's entire purpose is wrapping adb commands; understanding TCP/IP adb mode, connection setup (adb connect <ip>:<port>), and device state parsing is fundamental.
- IntelliJ Plugin Action API — The toolbar button and menu integrations rely on IntelliJ's Action framework; modifying or extending plugin behavior requires understanding AnAction, ActionGroup, and Presentation classes.
- Tool Windows (IDE Panels) — The right-side device dashboard is a Tool Window; the AndroidWiFiADBWindow integrates via ToolWindowFactory and requires lifecycle awareness of IDE lifecycle.
- Process Management & I/O Streams — ADB.java and CommandLine.java spawn adb subprocesses via ProcessBuilder and parse stdout/stderr; correct stream handling and exit code checks are critical for reliability.
- Swing Table Models & Custom Cell Rendering — The device list UI uses AbstractTableModel (AndroidDevicesTableModel.java) with custom cell editors/renderers (ConnectDisconnectRenderer.java, ConnectDisconnectEditor.java); rendering device state and handling inline button clicks requires Swing internals knowledge.
- TCP/IP Socket Connections — ADB TCP/IP mode establishes sockets to devices over LAN; understanding port binding, network reachability, and timeout handling is essential for troubleshooting connection failures.
- Gradle Plugin Development — build.gradle uses gradle-intellij-plugin to compile, package, and sign the plugin; understanding plugin configuration, task graphs, and artifact generation is needed for build maintenance.
🔗Related repos
google/adb— Official Android Debug Bridge repository; the underlying tool this plugin wraps—understanding adb command-line behavior is essential for maintaining ADB.java and ADBParser.java.JetBrains/gradle-intellij-plugin— The Gradle plugin used to build and package this IntelliJ plugin (v0.0.25 in build.gradle); upgrading requires understanding modern plugin build conventions.android/ndk— Android NDK repository; relevant for developers debugging native code over WiFi ADB, the plugin's secondary use case.Genymobile/scrcpy— Modern alternative that mirrors and controls Android devices over USB or TCP/IP; addresses similar pain point but via different mechanism (mirroring rather than IDE integration).JetBrains/intellij-community— IntelliJ IDEA source; reference for Action and Tool Window API changes since v14.1.5 needed to modernize this plugin.
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add unit tests for ADB.java and CommandLine.java
The core ADB execution logic in src/main/java/com/github/pedrovgs/androidwifiadb/adb/ lacks test coverage. ADB.java and CommandLine.java are critical components that handle command execution and device communication, but there are no corresponding test files. This is a high-value improvement since these are the foundation of the plugin's functionality and any regressions here would break core features.
- [ ] Create src/test/java/com/github/pedrovgs/androidwifiadb/adb/ADBTest.java with tests for ADB command execution, error handling, and device detection
- [ ] Create src/test/java/com/github/pedrovgs/androidwifiadb/adb/CommandLineTest.java with tests for command building, shell invocation, and output parsing edge cases
- [ ] Mock external process execution using mockito to avoid requiring actual adb binary during tests
- [ ] Test error scenarios like adb not found, device offline, connection timeouts
Add unit tests for UI components in window package
The window package contains multiple UI-related classes (AndroidWiFiADBWindow.java, ConnectDisconnectPanel.java, ConnectDisconnectRenderer.java, CardLayoutDevices.java) that handle the plugin's UI, but only AndroidDevicesTableModelTest.java exists. These UI components need test coverage to ensure the device list rendering, connection state management, and user interactions work correctly across plugin versions.
- [ ] Create src/test/java/com/github/pedrovgs/androidwifiadb/window/AndroidWiFiADBWindowTest.java to test window initialization and lifecycle
- [ ] Create src/test/java/com/github/pedrovgs/androidwifiadb/window/ConnectDisconnectPanelTest.java to test button states and user interactions
- [ ] Create src/test/java/com/github/pedrovgs/androidwifiadb/window/CardLayoutDevicesTest.java to test card switching logic
- [ ] Mock IntelliJ platform dependencies and use mockito for Device objects
Add integration test workflow with GitHub Actions and migrate from Travis CI
The project uses an outdated Travis CI configuration (.travis.yml), and there's no evidence of GitHub Actions workflows. Creating a modern CI/CD pipeline with GitHub Actions will ensure the plugin builds and tests pass on every commit, catch compatibility issues with newer IntelliJ versions (the project uses 0.0.25 of intellij plugin which is very old), and make it easier for contributors to verify their changes.
- [ ] Create .github/workflows/build.yml with steps to build gradle project, run checkstyle, and execute unit tests
- [ ] Add matrix testing for multiple Java versions (8, 11, 17) since sourceCompatibility is set to 1.6 but should be modernized
- [ ] Add workflow step to verify plugin compatibility by running against multiple IntelliJ versions using intellij plugin gradle tasks
- [ ] Update README.md with GitHub Actions badge and remove Travis CI references
🌿Good first issues
- Add comprehensive unit tests for
ADBParser.java—current test suite is missing or sparse. Create test cases for parsing device lists with multiple devices, offline devices, and various adb version outputs to catch regex brittle points. - Document ADB command prerequisites in code comments and create a setup validation utility in a new file
src/main/java/com/github/pedrovgs/androidwifiadb/adb/ADBValidation.javathat checks for adb binary presence and Android SDK configuration before attempting connections. - Update
plugin.xmlto declare compatibility with a range of modern IntelliJ/Android Studio versions (e.g., since-build='141' until-build='242') and add graceful degradation for newer IDE APIs, unblocking the plugin from being rejected by current IDEs.
⭐Top contributors
Click to expand
Top contributors
- @pedrovgs — 49 commits
- @vgaidarji — 38 commits
- @JcMinarro — 8 commits
- [@Jose L](https://github.com/Jose L) — 2 commits
- @sebastianmarschall — 2 commits
📝Recent commits
Click to expand
Recent commits
c54f1e8— Update README.md (pedrovgs)d82d671— Update README.md (pedrovgs)e9c9a10— Update README.md (pedrovgs)e64f5ad— Update README.md (pedrovgs)c81795c— Update README.md (pedrovgs)d367dee— Updated readme to increase clarity (#69) (sreeram-venkitesh)0131b62— Prepare next development iteration (pedrovgs)0da9901— Prepare release 2.4 (pedrovgs)2bb796f— Prepare next development iteration (pedrovgs)db9163f— Prepare release 2.3 (pedrovgs)
🔒Security observations
Failed to generate security analysis.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.