0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Android Emulator の Wi-Fi が起動数分後に落ちて戻らない不具合は WiFiPacketStream = off で回避できるかもしれない

0
Last updated at Posted at 2026-10-18

android-emulator-netsim-wifi-banner.png

はじめに

Android Emulator 37.1.11(macOS / Apple Silicon)で Android TV の AVD を動かすと、起動から数分〜数十分でゲストのネットワークが落ち、エミュレータを再起動するまで戻らない問題が発生した。

同じ不具合が発生した場合の解決方法のメモ

アプリ側には通信エラーとして見える。原因はホスト側 netsimd の仮想 Wi-Fi。WiFiPacketStream = off で netsimd を Wi-Fi から外すことで不具合を修正できた。

環境

  • macOS 26(Darwin 25.5.0)、Apple Silicon
  • Android Emulator 37.1.11.0(netsim 0.3.114)
  • AVD: Television_1080p、system image android-31/android-tv/arm64-v8a(build STT9.221129.002)
  • 起動: emulator -avd Television_1080p -no-snapshot-load -dns-server 8.8.8.8
  • 操作は Appium 3.4.2(UiAutomator2)

症状

アプリが通信エラーを出す。logcat の内容は下記の通り。

W DeviceStateUtils: Active network is null
E Finsky  : ... net::ERR_INTERNET_DISCONNECTED, ErrorCode=2, InternalErrorCode=-106

ゲスト側は wlan0 にキャリアが無く、既定ネットワークも無い。

$ adb shell ip addr show wlan0
16: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN ...
$ adb shell dumpsys connectivity | grep 'Active default'
Active default network: none

ホスト側は 5 秒間隔の ping 8.8.8.8 が一度も落ちていない。

起動直後は正常で、NetworkMonitor の validation passed まで通る。落ちるまでの時間は、起動時刻が分かる 2 回で 70 秒と 23 分。もう 1 回は起動時刻が残っていない。

ゲスト側のログ

落ちた瞬間。タグは IpClient.wlan0 / DhcpClient / WifiClientModeImpl / WifiSelfRecovery。

W IpClient.wlan0: [IpReachabilityMonitor] WARN ALERT neighbor went from: ...,10.0.2.2,NUD_PROBE,... to: ...,NUD_FAILED,[null]
W IpReachabilityMonitor: FAILURE: LOST_PROVISIONING, NeighborEvent{...,if=16,10.0.2.2,NUD_FAILED,[null]}
D WifiClientModeImpl[wlan0]: CMD_START_CONNECT  my state DisconnectedState nid=0 roam=false
D DhcpClient: Broadcasting DHCPREQUEST ciaddr=0.0.0.0 request=10.0.2.16 serverid=null
D DhcpClient: Broadcasting DHCPREQUEST ciaddr=0.0.0.0 request=10.0.2.16 serverid=null
D DhcpClient: Broadcasting DHCPREQUEST ciaddr=0.0.0.0 request=10.0.2.16 serverid=null
D DhcpClient: Broadcasting DHCPDISCOVER
D DhcpClient: Broadcasting DHCPDISCOVER
D DhcpClient: Broadcasting DHCPDISCOVER
D DhcpClient: Broadcasting DHCPDISCOVER
D WifiClientModeImpl[wlan0]: CMD_START_CONNECT  my state DisconnectedState nid=0 roam=false
...(約 22 秒周期で繰り返し)
E WifiSelfRecovery: Triggering recovery for reason: Last Resort Watchdog
  • IpReachabilityMonitor はゲートウェイや DNS に ARP/NDP で生存確認する仕組み。NUD_FAILED は応答なし。LOST_PROVISIONING で Wi-Fi フレームワークが接続を捨てる。ゲートウェイ 10.0.2.2(エミュレータ仮想ネットワークの固定アドレス)が応答していない。
  • 再接続後の DHCPREQUEST / DHCPDISCOVER に応答が無い。約 18 秒でタイムアウトし、reason_code=3(端末側から切断)で切って再接続。これで約 22 秒周期。
  • 失敗が続くと Last Resort Watchdog が Wi-Fi を再起動する。応答しないのはホスト側なので直らない。

ホスト側

Emulator 36.2.6 から、ゲストの Wi-Fi はエミュレータ本体ではなく別プロセスの netsimd(Bluetooth と Wi-Fi のパケットを扱うシミュレータ)が持つ。feature flag 名は WiFiPacketStream。emulator -verbose の起動ログ。

INFO | Successfully initialized netsim WiFi
INFO |   argv[71] = "user,id=virtio-wifi,dhcpstart=10.0.2.16"

netsimd のログは $TMPDIR/android-$USER/netsimd/netsim_stderr.log(macOS の $TMPDIR は /var/folders/.../T/)。落ちている間、netsimd 内の hostapd にはゲストからの切断だけが並ぶ。

wlan1: deauthentication: STA=02:15:b2:00:00:00 reason_code=3
wlan1: AP-STA-DISCONNECTED 02:15:b2:00:00:00

同じ場所の netsim_session_stats.json は、落ちたセッション(5 分)で maxDownloadThroughput: 0.0、networkErrors: 0。802.11 の認証・アソシエーションは通り、その先の ARP 応答と DHCP 応答が netsimd から返っていない。netsimd 内部で何が止まっているかは不明。

修正に繋がらなかった対応策

  • ゲスト内の Wi-Fi オン/オフ(CMD_WIFI_TOGGLED): 再接続はするが DHCP が返らない。
  • -dns-server 8.8.8.8: 付けていても落ちた。DNS 以前にゲートウェイへの ARP が返っていない。
  • Appium やアプリ起動: 23 分後に落ちた回は、落ちる前に同じアプリの強制終了と起動が 4 回通っている。別の回はアプリ起動の 11 秒後に落ちた。操作との対応は取れない。
  • ホストの回線: 落ちていない。
  • Emulator 37.2.12 への更新: リリースノートに Wi-Fi / netsim の修正は無い(2026-10-18 時点)。

判定

ゲストから外に出られず、ホストからは出られ、logcat に LOST_PROVISIONING か Last Resort Watchdog があれば本件と同じ症状の可能性が高い。

adb -s emulator-5554 shell "dumpsys connectivity | grep -m1 'Active default'; cmd wifi status | grep -m1 'connected to'; ping -c1 -W2 8.8.8.8 >/dev/null && echo guest-inet:OK || echo guest-inet:FAIL; logcat -d | grep -cE 'LOST_PROVISIONING|Last Resort Watchdog'"
ping -c1 -W1 8.8.8.8 >/dev/null && echo host-inet:OK || echo host-inet:FAIL

Active default network は再接続ループ中に none と番号を行き来するので、これだけでは判定できない。

回避

netsimd を Wi-Fi から外し、エミュレータ本体の virtio-wifi に戻す。ユーザー単位の feature 設定に 1 行。全 AVD と Android Studio からの起動に効く。

~/.android/advancedFeatures.ini
WiFiPacketStream = off

起動フラグなら -feature -WiFiPacketStream(下の SnapSync の PR で使われている形。未検証)。

再起動して -verbose の起動ログを見る。

DEBUG | FeatureControl::loadUserOverrideFeature: WiFiPacketStream = off
INFO  | Feature 'WiFiPacketStream' (95) is overridden to 'disabled'

Successfully initialized netsim WiFi は出なくなる。netsimd は Bluetooth 用(netsim,id=bluetooth)に残る。netsimd 側の hostapd も起動するがゲストは繋がない(AP-STA-CONNECTED が出ない)。

ゲスト側。

$ adb shell cmd wifi status | grep 'connected to'
Wifi is connected to "AndroidWifi"
$ adb shell dumpsys connectivity | grep 'Active default'
Active default network: 100

確認できたのは、設定後の起動から 1 時間 55 分、10 秒間隔 618 回の疎通確認が全部通ったところまで。回避前は起動 23 分後に落ちていた。負荷をかけた長時間の確認はまだ。

virtio-wifi は netsimd 導入前の経路。netsimd で追加された機能(36.2.6 の記載では Wi-Fi Direct、AVD 間の mDNS、SoftAP)はたぶん使えない。未確認。

同じ回避をしている例

Emulator 37.2.12 の Gradle managed device で、netsimd の AP が認証に応答せず起動の約 1 割で Wi-Fi が無いまま終わる件に、同じ WiFiPacketStream = off を入れた PR。こちらは起動時点で死んでいて、「しばらくして落ちる」とは出方が違う。

参照

Emulator リリースノート。36.2.6 Canary に Wi-Fi のパケット処理を netsimd 経由にした記載。

netsim のログ・成果物の場所と、emulator -netsim-args="--pcap" でのパケットキャプチャ。バグ報告するならこれで採る。

Google Issue Tracker に一致する報告は、検索した範囲では見つからなかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?