Skip to content

FuckDroidVendors/WiFiADBToggle

Repository files navigation

WiFi ADB Toggle (Quick Settings)

Minimal Android app that toggles wireless ADB from a Quick Settings tile or notification. The tile shows the current IP address and port when available.

Requirements

  • Android 4.2+ (API 17) for the app; Quick Settings tile is available on Android 7.0+.
  • Root (Magisk works).

How It Works

The toggle runs:

  • Enable: setprop service.adb.tcp.port 5555; stop adbd; start adbd
  • Disable: setprop service.adb.tcp.port -1; stop adbd; start adbd

This requires root because it restarts adbd and changes system properties.

Build

  1. Open the project in Android Studio.
  2. Sync Gradle.
  3. Run on a device.

Gradle wrapper scripts are included, but the gradle/wrapper/gradle-wrapper.jar file is not generated in this environment. On your machine, run gradle wrapper once to generate it, or let Android Studio create/update the wrapper. You can also run scripts/gen-wrapper.sh to generate the wrapper JAR if Gradle is installed.

To build everything from the command line:

./gradlew build

Flavors

Build flavors are available to reduce footprint and features:

  • full: Quick Settings tile, persistent status notification (toggleable), connection list notification (toggleable), media buttons, schedule UI, monitoring rules.
  • full21: Same as full, but minSdk 21 and uses framework MediaSession (no androidx.media).
  • notify: persistent status notification only (forced on, no UI/config or settings).
  • notifyconn: persistent status notification (toggleable) + connection list notification (toggleable).
  • tile: Quick Settings tile only (no notifications, no UI/config).
  • basic: Quick Settings tile + persistent status notification (toggleable). No schedule, media, or connection list.
  • headless: No UI, no notifications, no tile. Launch once to enable WiFi ADB and exit.

Select a flavor interactively or via -Pmode=notify (add -PnoPrompt=true to skip the prompt). If you pass -PdeviceApi=23 and no mode is set, it defaults to notify (no tile on old Android).

Recommended By Android Version

  • Android 4.2–6.x (API 17–23): notify (tile is not available).
  • Android 7.0+ (API 24+):
    • tile if you only want QS control with no notifications.
    • basic for QS tile + status notification.
    • full if you need schedule/media/monitoring features.
    • full21 if you target API 21+ and want to avoid androidx.media.
    • headless if you want a one-shot launcher that just enables WiFi ADB.

Build Commands

Release APKs:

  1. ./gradlew assembleFullRelease -Pmode=full -PnoPrompt=true
  2. ./gradlew assembleFull21Release -Pmode=full21 -PnoPrompt=true
  3. ./gradlew assembleNotifyRelease -Pmode=notify -PnoPrompt=true
  4. ./gradlew assembleNotifyconnRelease -Pmode=notifyconn -PnoPrompt=true
  5. ./gradlew assembleTileRelease -Pmode=tile -PnoPrompt=true
  6. ./gradlew assembleBasicRelease -Pmode=basic -PnoPrompt=true
  7. ./gradlew assembleHeadlessRelease -Pmode=headless -PnoPrompt=true

Debug APKs:

  1. ./gradlew assembleFullDebug -Pmode=full -PnoPrompt=true
  2. ./gradlew assembleFull21Debug -Pmode=full21 -PnoPrompt=true
  3. ./gradlew assembleNotifyDebug -Pmode=notify -PnoPrompt=true
  4. ./gradlew assembleNotifyconnDebug -Pmode=notifyconn -PnoPrompt=true
  5. ./gradlew assembleTileDebug -Pmode=tile -PnoPrompt=true
  6. ./gradlew assembleBasicDebug -Pmode=basic -PnoPrompt=true
  7. ./gradlew assembleHeadlessDebug -Pmode=headless -PnoPrompt=true

Compile-Time Defaults (No UI Flavors)

For notify and headless you can set defaults at build time:

  • ADB port: -PadbPort=5555
  • Auto-enable on boot (headless): -Pautoboot=true
  • Locales (default: en, use all to disable filtering): -PresLocale=en
  • Densities (default for notify/headless: nodpi): -PresDensities=nodpi
  • Direct boot aware receiver (LOCKED_BOOT_COMPLETED support): -PdirectBoot=true
  • Enable actions during locked boot (earliest app-level boot hook): -PlockedBoot=true
  • System app behavior (use SystemProperties if available): -PsystemApp=true

Examples:

./gradlew assembleHeadlessRelease -Pmode=headless -PnoPrompt=true -PadbPort=5555 -Pautoboot=true
./gradlew assembleNotifyRelease -Pmode=notify -PnoPrompt=true -PadbPort=5555
./gradlew assembleNotifyRelease -Pmode=notify -PnoPrompt=true -PresLocale=en -PresDensities=nodpi
./gradlew assembleNotifyRelease -Pmode=notify -PnoPrompt=true -Pautoboot=true -PdirectBoot=true -PlockedBoot=true
./gradlew assembleNotifyRelease -Pmode=notify -PnoPrompt=true -Pautoboot=true -PsystemApp=true
./gradlew assembleNotifyRelease -Pmode=notify -PnoPrompt=true -PdeviceApi=22 -Pautoboot=true -PadbPort=5555 -PresLocale=en -PresDensities=nodpi
./gradlew assembleTileRelease -Pmode=tile -PnoPrompt=true -PdeviceApi=35
./gradlew assembleTileRelease -Pmode=tile -PnoPrompt=true -PdeviceApi=35 -PresLocale=en -PresDensities=nodpi

Early Boot / System App Notes

  • -PdirectBoot=true marks BootReceiver as direct-boot aware.
  • -PlockedBoot=true allows handling LOCKED_BOOT_COMPLETED and only runs the minimal ADB enable path (no UI/notifications/settings access). It uses the compile-time port (-PadbPort) or 5555 by default.
  • -PsystemApp=true enables a system-app code path that tries to use android.os.SystemProperties instead of su.

To actually run as a system/privileged app, you still need ROM-level integration:

  • Install the APK into /system/priv-app/ (or /system/app/) and sign with the platform key.
  • Grant privileged permissions if required by your ROM (e.g., SET_PROP) via a privapp-permissions XML.
  • A true system service requires AOSP/framework integration; this project remains an app.

Use

  1. Launch the app once.
  2. Add the WiFi ADB tile to Quick Settings (Android 7.0+), or enable the persistent notification.
  3. Tap the tile/notification to toggle wireless ADB.

Notes

  • The tile subtitle shows IP:5555 (IPv4) or [IPv6]:5555 when it can detect a non-loopback address.
  • If the tile says no IP, connect to Wi-Fi or check network availability.
  • Optional ADB connection notification shows active client IPs when enabled (requires root).
  • ADB port is configurable in-app; the UI will show the selected port.
  • Root path uses su -c and works with Magisk or other superuser managers.

Files

  • Tile service: app/src/main/java/fuck/wifiadbtoggle/droidvendorssuck/AdbTileService.kt
  • Root runner: app/src/main/java/fuck/wifiadbtoggle/droidvendorssuck/ShellRunner.kt
  • Toggle logic: app/src/main/java/fuck/wifiadbtoggle/droidvendorssuck/AdbWifiController.kt

About

Probably the cutest WiFi ADB toggle you have seen~ Flavours to generate APKs with different feature set including low-memory footprint ones for old devices. Some stuff may not work due to LLM involvement (notifications and tiles do) Android 4.2 upwards.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors