Skip to main content

Pair an Android 11+ device for wireless ADB by scanning a QR code rendered in your terminal.

Project description

adb-wifi-qr

Pair an Android 11+ device for wireless ADB by scanning a QR code rendered in your terminal.

This is a Python port of adb-wifi by saleehk. All credit for the original idea and JavaScript implementation goes to him.


What it does

  1. Generates a random one-time name and password.
  2. Renders a Wi-Fi-format QR code (WIFI:T:ADB;S:<name>;P:<password>;;) directly in your terminal.
  3. Listens for the phone's _adb-tls-pairing._tcp.local mDNS advertisement.
  4. Runs adb pair <host>:<port> <password> against the first device it finds.
  5. (optional) With --connect, also discovers _adb-tls-connect._tcp.local and runs adb connect, so the device shows up in adb devices and is ready for adb shell, adb install, etc.

Requirements

  • Python 3.8 or newer (3.9+ recommended — the pinned zeroconf branch is the last to support 3.8).
  • adb on PATH (or pass --adb /path/to/adb). Install it with the Android SDK platform-tools.
  • Android 11+ device on the same Wi-Fi network as the computer.

Install

pip install adb-wifi-qr

Usage

adb-wifi-qr

The terminal prints a QR code. On the Android device:

  1. Open Settings → System → Developer options → Wireless debugging.
  2. Tap Pair device with QR code.
  3. Point the camera at the QR code in your terminal.

The tool detects the device via mDNS and runs adb pair automatically.

Examples

Pair only (default — matches the original adb-wifi):

adb-wifi-qr

Pair and auto-connect, so the device immediately shows up in adb devices:

adb-wifi-qr --connect

Wait up to two minutes for the device (default is 60 s):

adb-wifi-qr --timeout 120

Enable debug logging (mDNS events, full subprocess output):

adb-wifi-qr -v

Use a non-default adb binary:

adb-wifi-qr --adb /opt/android-sdk/platform-tools/adb

Combine flags freely:

adb-wifi-qr --connect --timeout 120 -v

All flags

Flag Default Description
--timeout SECONDS 60 How long to wait for the device to advertise itself.
--connect off After pairing, also run adb connect so the device joins adb devices.
--adb PATH adb Path to the adb binary.
-v, --verbose off Debug logging to stderr.
--version Print the package version and exit.
--help Print full help and exit.

How it works

Android 11 introduced wireless debugging. When the user opens Pair device with QR code, the phone briefly advertises an mDNS service of type _adb-tls-pairing._tcp.local on the local network. Scanning the QR code tells the phone which (random) credentials the pairing request will use; the computer-side adb pair host:port password completes the handshake.

adb-wifi-qr starts the mDNS listener before rendering the QR so the discovery is already running the moment the user taps Pair device with QR code — the advert is short-lived.

Troubleshooting

  • adb not found. Install Android platform-tools, or pass --adb with the full path.
  • No device found before timeout. Make sure the pairing dialog is actually open on the phone — the mDNS advertisement only exists while that screen is visible. Re-run with --timeout 120 if you need more time, or -v to watch the mDNS events live.
  • Phone and laptop on different subnets / VPN active. mDNS does not cross subnets. Disable the VPN or move both devices onto the same Wi-Fi.
  • QR code does not scan. Make the terminal window wider, increase the font size, or switch to a dark background — phone cameras pick up the half-block glyphs much better with white-on-black contrast.
  • adb pair fails. Just re-run adb-wifi-qr — each invocation generates fresh credentials. The previous QR cannot be reused.

Development

git clone https://github.com/matevosashot/adb-wifi-python
cd adb-wifi-python
pip install -e ".[dev]"
pytest

Tests mock the zeroconf and subprocess boundaries, so they do not require a real Android device or network access.

License

ISC — see LICENSE.

Credits

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

adb_wifi_qr-0.2.0.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

adb_wifi_qr-0.2.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file adb_wifi_qr-0.2.0.tar.gz.

File metadata

  • Download URL: adb_wifi_qr-0.2.0.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for adb_wifi_qr-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1125c654f3ad77a599255ced3f692cbac5bd7e139bd2be1f904be8ec2030367e
MD5 c9fe6ec5ee88c2e78ff410cc2caf2b49
BLAKE2b-256 3b93cf55901e82b7cc55d5c5f1290f69d9abfc6baa457a339c8849efeae06732

See more details on using hashes here.

File details

Details for the file adb_wifi_qr-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: adb_wifi_qr-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for adb_wifi_qr-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0d2a1c109f8f063f91b9a6df07786d81c0662a53befc5e0b64603197a39d67a4
MD5 11ec95f91ec1621715a60b13f51979b7
BLAKE2b-256 9b223ee47cc0504b80ec867788311d1d27ece28814d88a87beb0dc13516d9ce8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page