connecting-over-wifi について
Android 開発者向けのワイヤレス ADB 接続スキルです。Android 11 以降のペアリングと接続、従来の TCP 接続、mDNS による検出を扱います。接続障害の診断とワイヤレスデバッグの安全面も説明します。
主な機能
- 01adb pair と adb connect の手順
- 02従来の adb tcpip 接続の説明
- 03mDNS によるペアリング済み端末の検出
- 04ペアリングと接続障害の診断
- 05接続方式ごとの安全性の比較
活用シーン
- 01USB を使わず Android 端末に接続
- 02ペアリング後の接続失敗の調査
- 03mDNS の検出やバックエンド差異の診断
- 04従来の TCP 接続を使う状況の判断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ skydoves/ android-testing-skills --skill connecting-over-wifiインストール後、Claude Code で/connecting-over-wifiを入力して読み込まれたか確認します。
詳細
Wi-Fi 経由で接続する — adb pair(モダン)と adb tcpip(レガシー)
Android 11 では、従来の adb tcpip の手順に代わる、ペアリングによるワイヤレスデバッグのフローが導入されました。モダンな方法では、ペアリングコードから導出した共有シークレットを使って TLS 経由で暗号化と認証を行い、一時的なポートを使用します。一方、レガシーな方法では、既知のポートで認証されていない TCP リスナーを公開します。このスキルでは両方の方法に加えて、ホストサーバーがペアリング済みデバイスを検出するために使用する mDNS の仕組みについても説明します。
このスキルを使う場合
- ユーザーが USB ケーブルなしでスマートフォンを ADB に接続したい場合。
- ユーザーが
adb pair、QR コードによるペアリング、開発者向けオプションの「ワイヤレスデバッグ」トグル、またはペアリングコードについて言及した場合。 - ユーザーが古いブログにある
adb tcpip 5555 && adb connect 192.168.1.100:5555を実行し、最近のスマートフォンでは安全でないと見なされる理由を尋ねた場合。 - ペアリング後に
connection refusedが表示され、企業の Wi-Fi を使用している場合。 adb mdns checkで mDNS の Bonjour と Openscreen の違いに戸惑っている場合。
このスキルを使わない場合
- ユーザーが USB デバイスの基本(セレクターフラグ、RSA ダイアログ、udev ルール)を知りたい場合 —
../connecting-to-devices/SKILL.mdを使ってください。 - ユーザーがアーキテクチャや環境変数のチートシートを知りたい場合 —
../../architecture/understanding-adb-architecture/SKILL.mdを使ってください。 - ユーザーがワイヤレス接続したデバイスでテストを実行したい場合 —
../../tests/running-instrumented-tests-via-adb/SKILL.mdを使ってください。
前提条件
- ワークステーションとデバイスが同じ Wi-Fi ネットワークに接続されていること。企業ネットワークでは p2p が頻繁にブロックされます — 手順 6 を参照してください。
- スマートフォン/タブレット: Android 11(API 30)以降。TV/Wear OS: Android 13(API 33)以降。
- ADB サーバーが動作していること(
../../architecture/understanding-adb-architecture/SKILL.mdを参照)。 - デバイスでワイヤレスデバッグが有効になっていること:
Settings → System → Developer options → Wireless debugging。
ワークフロー
-
1. Android 11 以降では、モダンな
adb pairフローを優先してください。 developer.android.com/tools/adb#wireless より:「Android 11(API レベル 30)以降では、Android Debug Bridge(adb)を使って、ワークステーションからワイヤレスでアプリをデプロイし、デバッグできます。たとえば、デバイスを USB で物理的に接続することなく、デバッグ可能なアプリを複数のリモートデバイスにデプロイできます。」
ペアリングコードを使う手順:
- デバイスで
Settings → Developer options → Wireless debuggingを開き、有効にします。 - Pair device with pairing code をタップします。デバイスに
IP:PORTと 6 桁のペアリングコードが表示されます。 - ワークステーションで次を実行します:
adb pair 192.168.1.42:42999 # Enter pairing code: 123456 # Successfully paired to 192.168.1.42:42999 [guid=adb-...-RQAZWM]
QR コードによるペアリングも同じプロトコルを使い、Android Studio の「Pair Devices Using Wi-Fi」UI から実行します。
- デバイスで
-
2. ペアリング後に表示される別のデバッグポートに接続します。 ペアリングポートは 1 回限りです。実際のデバッグ用には、デバイスが別の
IP:PORTを公開します:adb connect 192.168.1.42:39555 adb devices # 192.168.1.42:39555 deviceadb disconnect [<host:port>]は、単一のホストを切断します。引数を指定しない場合は、すべての TCP デバイスを切断します。 -
3. mDNS の自動検出を使って、手動操作なしで接続します。 ADB サーバーはペアリング済みデバイスを検出し、自動接続できます:
adb mdns check # mdns daemon version [openscreen discovery 0.0.0] adb mdns services # List of discovered mdns services # adb-XXXXXXXX-RQAZWM _adb-tls-pairing._tcp 192.168.1.42:42999 # adb-XXXXXXXX-RQAZWM _adb-tls-connect._tcp 192.168.1.42:39555サービスタイプ:
_adb._tcp— レガシーなadb tcpip。_adb-tls-pairing._tcp— 一時的なペアリングポート(「Pair device with pairing code」をタップした後)。_adb-tls-connect._tcp— ペアリング後のデバッグポート。デフォルトでは自動接続されます(ADB_MDNS_AUTO_CONNECT=adb-tls-connect)。
-
4. 使用中の mDNS バックエンドを把握します。 ドキュメントでは Bonjour がデフォルトとされていますが、ADB v34 以降、Linux/Windows ではデフォルトが Openscreen に切り替わっています(公開ドキュメントの更新が遅れています)。再現性が重要な場合は、環境変数でバックエンドを明示的に指定します。
ADB_MDNS_OPENSCREEN=1 adb start-server # Openscreen を強制 ADB_MDNS_OPENSCREEN=0 adb start-server # Bonjour を強制環境変数の一覧(
ADB_MDNS_AUTO_CONNECT、ADB_MDNS_OPENSCREEN)については、../../architecture/understanding-adb-architecture/SKILL.mdを参照してください。 -
5. ペア設定が利用できない場合に限り、レガシーの
adb tcpip経由の方法を使用します。 Android 11 より前のバージョンで使用する方法です(11 以降でもフォールバックとして引き続きサポートされています)。# 1. デバイスを USB 接続し、RSA ダイアログを承認して、`adb devices` で確認します。 adb tcpip 5555 # 2. USB ケーブルを外します。 adb connect 192.168.1.42:5555これがレガシーな方法である理由:
- 初期設定に物理 USB 接続が必要なため、「ケーブル不要」という利点が損なわれます。
5555は周知のポートで、ペア設定なしで公開されるため、再起動するまで LAN 上の誰でも接続できます。- 再起動するとデバイスは USB 専用に戻ります(手動で
adb usbを実行するとリセットされます)。 - mDNS による自動検出はありません。ユーザーが IP アドレスを把握している必要があります。
最新の
adb pairの手順では、ペア設定コードから導出した共有シークレットを使って TLS 経由で暗号化と認証を行い、一時ポートを使用するため、はるかに安全です。 -
6. ペア設定/接続の失敗は次の順に診断します。
「ペア設定に成功したのにデバイスが接続されない場合:
adbは、ペア設定済みのデバイスを検出して自動接続するために mDNS を利用します。ネットワークまたはデバイスの設定が mDNS に対応していないか、mDNS が無効になっている場合は、adb connect ip:portを使用してデバイスに手動で接続する必要があります。」- 同じ Wi-Fi ですか? 両方が同じ SSID、同じ VLAN/サブネットに接続されていることを確認します。
- 企業の Wi-Fi ですか? 原文のまま:
「企業の Wi-Fi などのセキュアな Wi-Fi ネットワークでは、P2P 接続がブロックされ、Wi-Fi 経由で接続できない場合があります。ケーブル、または別の(企業ネットワーク以外の)Wi-Fi ネットワークで接続してみてください。」
- mDNS が無効になっていますか?
adb mdns checkを実行します。「mDNS is not running」と表示された場合は、デバイスのワイヤレスデバッグ画面にある接続ポートを使って、手動でadb connect <ip:port>に接続します。 adb connectの後にconnection refusedが表示されますか? ワイヤレスデバッグのポートが閉じています(ワイヤレスデバッグがオフになっている、デバイスが再起動した、または接続ポートではなくペア設定ポートを使用した可能性があります)。ワイヤレスデバッグを再度有効にし、必要に応じてペア設定をやり直して、adb mdns servicesに表示される_adb-tls-connect._tcpのポートをコピーします。- Wi-Fi の切り替え後に自動切断されますか? 原文のまま:
「Wi-Fi 経由の
adbが自動的にオフになることがあります。これは、デバイスが Wi-Fi ネットワークを切り替えた場合や、ネットワークから切断された場合に発生します。解決するには、ネットワークに再接続してください。」
-
7. ワイヤレス ADB は「LAN を信頼する」機能として扱います。
- ネットワークに接続でき、ペア設定コードを知っている人なら誰でもペア設定できます。
- ペア設定後は暗号鍵だけでアクセスが制限されますが、オフィスの LAN がフラットな構成の場合、攻撃対象領域は Wi-Fi に接続している全員に及びます。
- 積極的に使用していないときは、ワイヤレスデバッグを無効にしてください。 設定の切り替え操作により、リスニングソケットは直ちに閉じます。
- 公共の Wi-Fi/カフェやホテルの Wi-Fi では、ワイヤレス ADB の使用を完全に避けてください。
- レガシーの
adb tcpipモードは認証のない TCP リスナーを公開します。デバイスが対応している場合は、常にadb pairを優先してください。
パターン
パターン:Android 13 での adb tcpip の使用 — 間違いと正しい方法
# WRONG
adb tcpip 5555
adb connect 192.168.1.100:5555
# WRONG because: on Android 11+ the modern `adb pair` flow is available and
# encrypts/authenticates over TLS. The tcpip path bypasses pairing, exposes a
# well-known unauthenticated TCP listener until reboot, and is often blocked
# on managed Wi-Fi. Many corporate networks drop port 5555 traffic outright.
# RIGHT
# On the device: Settings -> Developer options -> Wireless debugging -> ON
# Then "Pair device with pairing code" — note the displayed IP:PORT and code.
adb pair 192.168.1.100:42999
# Enter pairing code: 123456
# Then connect on the device's separate connect-port (also shown in Wireless debugging):
adb connect 192.168.1.100:39555
adb devices
# 192.168.1.100:39555 device
パターン:ペア設定ポートと接続ポートの取り違え — 間違いと正しい方法
# WRONG
adb pair 192.168.1.100:42999
# (succeeds)
adb connect 192.168.1.100:42999
# error: failed to connect to '192.168.1.100:42999': Connection refused
# WRONG because: the pairing port is one-shot. After successful pairing, the
# device exposes a different IP:PORT (the "Pair devices over Wi-Fi" main screen
# shows it under the device's IP). Trying to connect to the pairing port fails.
# RIGHT
# Read the connect port from the Wireless debugging main screen (NOT the
# "Pair device with pairing code" dialog), or:
adb mdns services
# adb-... _adb-tls-connect._tcp 192.168.1.100:39555
adb connect 192.168.1.100:39555
パターン:mDNS の Openscreen と Bonjour に関する想定 — 間違いと正しい方法
# WRONG (script makes assumptions about mdnsResponder / Bonjour being default)
# CI script greps for "bonjour" in `adb mdns check` output and aborts when it
# does not find it.
adb mdns check | grep -q bonjour || exit 1
# WRONG because: ADB v34+ defaults to the Openscreen backend on Linux/Windows.
# Output is "mdns daemon version [openscreen discovery 0.0.0]" on those hosts.
# The script breaks on every modern CI runner.
# RIGHT
# Either accept either backend, or pin one with the env var:
ADB_MDNS_OPENSCREEN=1 adb start-server
adb mdns check # confirm "openscreen discovery"
# Or for environments that still need Bonjour:
ADB_MDNS_OPENSCREEN=0 adb start-server
必須ルール
- 必須: Android 11(API 30)のスマートフォン/Android 13(API 33)のテレビ・Wear では、
adb pairとadb connectを優先してください。adb tcpipを使う方法は従来の代替手段です。 - 必須:
adb connectには、_adb-tls-connect._tcpまたはワイヤレスデバッグのメイン画面に表示される接続ポートを使用してください。ペアリングコードのダイアログに表示されるペアリングポートは使用しないでください。 - 必須: ワイヤレスデバッグを使用していないときは、デバイスで無効にしてください。設定のトグルを切り替えると、リスニングソケットが直ちに終了します。
- 禁止: mDNS バックエンドが Bonjour だと決めつけないでください。ADB v34 以降では、Linux/Windows で Openscreen がデフォルトです。再現性が必要な場合は、
ADB_MDNS_OPENSCREEN=0|1で固定してください。 - 禁止: 共有または公共の Wi-Fi で
adb tcpip 5555を実行しないでください。再起動するまで、認証なしで接続できる TCP リスナーが開いた状態になります。 - 推奨: 社内 Wi-Fi で p2p がブロックされている場合は、オフィスの Ethernet に接続するか、個人用ホットスポットを使用してください。
- 推奨: ワイヤレスデバッグが「突然動作しなくなった」場合は、最初に
adb mdns checkとadb mdns servicesを実行してください。
検証
-
adb pair <host:port>がSuccessfully paired to <host:port>と出力する。 -
adb connect <host:port>がconnected to <host:port>を返し、adb devicesに IP トランスポートが状態deviceで表示される。 -
adb mdns checkがエラーなしでデーモンのバージョン(Openscreen または Bonjour)を出力する。 -
adb mdns servicesに、ペアリング済みデバイスの_adb-tls-connect._tcpエントリーが少なくとも 1 つ表示される。 - デバイス上でワイヤレスデバッグをオフにすると、数秒以内に
adb devicesから IP トランスポートが消える。 - API 30 以降のスマートフォンでは、開発者が優先する方法が
adb pair(adb tcpipではない)である。 - デバッグに失敗した場合、ホストの RSA キーを再生成する前に、ユーザーが
adb mdns checkを実行している。
参考資料
- ワイヤレス ADB(developer.android.com/tools/adb#wireless):https://developer.android.com/tools/adb#wireless
- ADB ユーザーガイドのトップページ:https://developer.android.com/tools/adb
- Platform-tools のリリースノート(mDNS バックエンドのデフォルト設定):https://developer.android.com/tools/releases/platform-tools
- AOSP の
adbマニュアルページ:https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/main/docs/user/adb.1.md tasks/research/A1-adb-architecture-devices.md— Linux/Windows における ADB v34 以降の Openscreen と Bonjour のデフォルト切り替え、mDNS サービスタイプの分類、および「ペアリングに成功した後もデバイスが接続されない」場合のガイダンスの原文。docs/CORPUS.md§I.4(ワイヤレス ADB)。- 関連スキル:
- 高レベルのアーキテクチャと環境変数:
../../architecture/understanding-adb-architecture/SKILL.md - USB デバイスの基本:
../connecting-to-devices/SKILL.md - アプリのインストール/クリア:
../../apps/installing-and-managing-apps/SKILL.md - ワイヤレストランスポート経由でインストルメンテーションテストを実行する:
../../tests/running-instrumented-tests-via-adb/SKILL.md
- 高レベルのアーキテクチャと環境変数:
- 他セットの関連項目:
AndroidJUnit4でインストルメンテーションテストを実行する:../../../instrumentation/runner/running-instrumented-tests-with-androidjunit4/SKILL.md- Android で JUnit4 を設定する:
../../../jvm-tests/runner/configuring-junit4-on-android/SKILL.md - ソースセット戦略:
../../../fundamentals/strategies/organizing-test-source-sets/SKILL.md