Az ADB és az Android-emulátor elakad egy VPN mögött: három útvonal
Az ADB-felderítés, az emulátor virtuális hálózati kártyája és a gazdagép feloldója külön-külön hibázik egy VPN mögött. Vizsgálja meg az útvonalakat sorrendben, mielőtt az alagutat okolná.
Csatlakozik az irodai VPN-hez, és az Android Studio elveszíti a futó emulátort, az adb start-server lefagy, egy Wi-Fi-s fizikai telefon pedig kiesik az eszközlistából. Úgy tűnik, mintha egy alagút blokkolna egy terméket. A gyakorlatban három külön útvonal hibázik három módon: az adb eszközfelderítése, az emulátor virtuális hálózata és a gazdagép feloldója. Az alagút általában csak az utolsót birtokolja, és gyakran csak annak egy részét.
Három socket, három tulajdonos
Az adb-kiszolgáló az 5037-es porton figyel a gazdagépen, és USB-n vagy TCP-n keresztül beszél az eszközökkel, hálózati felderítésre mDNS-t használ. Az emulátor a saját virtuális routere mögött fut: a vendég 10.0.2.15, a gateway 10.0.2.2, a DNS-kiszolgáló pedig 10.0.2.3, és mindezt az emulátor folyamata a gazdagép socketjeivé fordítja. A gazdagép feloldója az a hely, ahol a VPN-kliens a DNS-t és a keresési tartományokat telepíti.
Ez a szétválasztás magyarázza, miért tűnik úgy, hogy egy javítás az egyik eszköznél működik, a másiknál nem. Az a kliens, amely megváltoztatja a gazdagép feloldóját, a futó emulátorfolyamatot az induláskor olvasott feloldóállapottal hagyja. Az multicastot szűrő kliens a DNS érintése nélkül töri el a felderítést. A virtuális adaptereket szűrő kliens megtagadja az emulátort, miközben a gazdagép böngészője tovább működik. Minden tünetnek más az oka, ezért azonosítsa a hibázó útvonalat, mielőtt bármit módosít.
Kezdje azzal, amit az adb lát
Futtassa a adb devices parancsot, mielőtt a VPN-hez nyúl. Az üres lista átviteli probléma, nem útvonalválasztási, és egyetlen alagút-beállítás sem javít meg egy eszközt, amelyet a kiszolgáló soha nem sorolt fel. Indítsa újra tisztán a kiszolgálót: először adb kill-server majd adb start-server, és olvassa ki, melyik portot foglalta el. Ha maga az indítás akad meg, multicastot szűrő hálózaton az mDNS-felderítés a szokásos gyanúsított; a dokumentált megoldás a kiszolgáló indítása kikapcsolt felderítéssel:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesFizikai eszköznél az USB a legrövidebb út. Ha TCP kell, tegye az eszközt figyelő módba ezzel: adb tcpip 5555, majd csatlakozzon az eszköz címéhez és portjához: adb connect 192.0.2.10:5555. Az 5037-es port a gazdagép kiszolgálóportja, nem az a port, amelyen egy eszköz figyel.
Vizsgálja az emulátort belülről
Az emulátor a 10.0.2.3-ról válaszol DNS-re, és azt a feloldót a gazdagép folyamata táplálja. Amikor a VPN-kliens megváltoztatja a gazdagép feloldóját, az emulátor örökölheti; amikor a kliens szűri az emulátorfolyamatot, vagy az indulás után megváltozik a gazdagép adapterlistája, nem tudja. Válassza szét a kettőt egy numerikus céllal és egy névvel, ugyanabból a shellből. adb shell ping -c 2 10.0.2.2 bizonyítja, hogy a virtuális hálózat eléri a gazdagép oldalát. Az utána végzett névfeloldás megmutatja, átlépte-e a feloldás a határt.
Ezután futtassa ugyanazt a névkeresést a gazdagépen. Ha a gazdagép feloldja és az emulátor nem, a törés a gazdagép feloldója és az emulátor virtuális hálózata között van, nem az alagútban. Ha mindkettő hibázik, a gazdagép feloldóját kell nézni. Az emulátor újraindítása a VPN csatlakozása után egy próbát megér, mert egyes kliensek olyan feloldóállapotot telepítenek, amelyet egy futó emulátorfolyamat nem vesz át.
Ellenőrizze a gazdagép feloldóját és a kliens szűrőit
A teljes alagút kliense a sajátjára cseréli a gazdagép feloldóját, a split-DNS kliens pedig keresési tartományokat és feltételes továbbítókat ad hozzá. A belső nevek gyakran épp ettől a split-DNS konfigurációtól függenek, ezért nézze meg, mit használ a gazdagép kapcsolódva: a feloldó címét, a keresési tartományt és azt, hogy a belső zóna a vállalati DNS felé van-e irányítva. Az a feloldó, amely nyilvános nevekre válaszol, belsőkre nem, házirend-kérdés, nem törött alagút.
Egyes vállalati kliensek a virtuális adapterek forgalmát is blokkolják. Egy szűrő-illesztőprogram számára az emulátor virtuális adapternek látszik, így a gazdagép tökéletesen működhet, miközben a házirend megtagadja az emulátort. Ez a házirend a munkaállomásról nem látható, és a proxybeállítások találgatása nem tárja fel. Ha a gazdagép felold, az emulátor pedig a feloldóbeállításoktól függetlenül blokkolt, a helyes eszkaláció a kliensházirendet birtokló csapathoz szól.
Az ellenőrzések sorrendje és mit jelent minden eredmény
Haladjon fentről lefelé, és álljon meg az első hibázó sornál. Minden eredmény más tulajdonosra mutat, és egyiket sem javítja meg az Android Studio újratelepítése.
| Result | Likely owner | Next check |
|---|---|---|
| adb devices is empty with USB attached | USB, driver or adb server | cable, authorization prompt, adb kill-server |
| adb start-server hangs | mDNS discovery | ADB_MDNS_OPENSCREEN=0 |
| Emulator reaches 10.0.2.2, names fail | Host resolver to emulator boundary | host lookup of the same name |
| Host resolves, emulator still fails | Emulator process or client filter | restart emulator, ask IT about virtual adapters |
| Both fail for internal names only | Split DNS or search domain | resolver and zone configuration |
Csak az utolsó két sor VPN-kérdés a szokásos értelemben, és csak az utolsó szól a DNS tartalmáról. Az adb dokumentációja lefedi a kiszolgáló portját és az itt említett környezeti változókat, ami elég ahhoz, hogy az átviteli oldal tisztességes maradjon a többi tesztelése közben.