mcpField
C
connecting-over-wifi

connecting-over-wifi

github.com/skydoves開発33967 回インストール22 週間前に更新
リポジトリ

connecting-over-wifi について

Android 開発者向けのワイヤレス ADB 接続スキルです。Android 11 以降のペアリングと接続、従来の TCP 接続、mDNS による検出を扱います。接続障害の診断とワイヤレスデバッグの安全面も説明します。

主な機能

  1. 01adb pair と adb connect の手順
  2. 02従来の adb tcpip 接続の説明
  3. 03mDNS によるペアリング済み端末の検出
  4. 04ペアリングと接続障害の診断
  5. 05接続方式ごとの安全性の比較

活用シーン

  1. 01USB を使わず Android 端末に接続
  2. 02ペアリング後の接続失敗の調査
  3. 03mDNS の検出やバックエンド差異の診断
  4. 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 で物理的に接続することなく、デバッグ可能なアプリを複数のリモートデバイスにデプロイできます。」

    ペアリングコードを使う手順:

    1. デバイスで Settings → Developer options → Wireless debugging を開き、有効にします。
    2. Pair device with pairing code をタップします。デバイスに IP:PORT と 6 桁のペアリングコードが表示されます。
    3. ワークステーションで次を実行します:
      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  device
    

    adb 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 を使用してデバイスに手動で接続する必要があります。」

    1. 同じ Wi-Fi ですか? 両方が同じ SSID、同じ VLAN/サブネットに接続されていることを確認します。
    2. 企業の Wi-Fi ですか? 原文のまま:

      「企業の Wi-Fi などのセキュアな Wi-Fi ネットワークでは、P2P 接続がブロックされ、Wi-Fi 経由で接続できない場合があります。ケーブル、または別の(企業ネットワーク以外の)Wi-Fi ネットワークで接続してみてください。」

    3. mDNS が無効になっていますか? adb mdns check を実行します。「mDNS is not running」と表示された場合は、デバイスのワイヤレスデバッグ画面にある接続ポートを使って、手動で adb connect <ip:port> に接続します。
    4. adb connect の後に connection refused が表示されますか? ワイヤレスデバッグのポートが閉じています(ワイヤレスデバッグがオフになっている、デバイスが再起動した、または接続ポートではなくペア設定ポートを使用した可能性があります)。ワイヤレスデバッグを再度有効にし、必要に応じてペア設定をやり直して、adb mdns services に表示される _adb-tls-connect._tcp のポートをコピーします。
    5. 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

コメント