आप ऑफ़िस का VPN जोड़ते हैं और Android Studio चल रहा इम्युलेटर खो देता है, adb start-server अटक जाता है, और Wi-Fi पर रखा भौतिक फ़ोन डिवाइस सूची से गिर जाता है। लगता है एक टनल एक उत्पाद को रोक रहा है। वास्तव में तीन अलग रास्ते तीन तरह से विफल होते हैं: adb डिवाइस डिस्कवरी, इम्युलेटर का वर्चुअल नेटवर्क और होस्ट रिज़ॉल्वर। टनल आमतौर पर केवल अंतिम का मालिक होता है, और अक्सर उसका एक हिस्सा भर।

तीन सॉकेट, तीन मालिक

adb सर्वर होस्ट पर पोर्ट 5037 पर सुनता है और डिवाइसों से USB या TCP के ज़रिए बात करता है, नेटवर्क डिस्कवरी के लिए mDNS इस्तेमाल करता है। इम्युलेटर अपने वर्चुअल राउटर के पीछे चलता है: गेस्ट 10.0.2.15 है, गेटवे 10.0.2.2 और DNS सर्वर 10.0.2.3 है, और इम्युलेटर प्रक्रिया यह सब होस्ट सॉकेट में बदल देती है। होस्ट रिज़ॉल्वर वह जगह है जहाँ VPN क्लाइंट DNS और खोज डोमेन इंस्टॉल करता है।

यही अलगाव बताता है कि एक सुधार एक टूल के लिए क्यों काम करता है और दूसरे के लिए नहीं। होस्ट रिज़ॉल्वर बदलने वाला क्लाइंट चल रही इम्युलेटर प्रक्रिया को शुरू में पढ़ी गई रिज़ॉल्वर स्थिति के साथ छोड़ देता है। multicast फ़िल्टर करने वाला क्लाइंट DNS को छुए बिना डिस्कवरी तोड़ देता है। वर्चुअल एडाप्टर फ़िल्टर करने वाला क्लाइंट होस्ट ब्राउज़र चलते रहने पर भी इम्युलेटर को मना कर देता है। हर लक्षण का कारण अलग है, इसलिए कोई भी सेटिंग बदलने से पहले विफल रास्ता पहचानें।

adb जो देख सकता है उससे शुरू करें

VPN छूने से पहले adb devices चलाएँ। खाली सूची परिवहन की समस्या है, रूटिंग की नहीं, और सर्वर ने जिस डिवाइस को कभी सूचीबद्ध नहीं किया उसे कोई टनल सेटिंग ठीक नहीं करेगी। सर्वर को साफ़ तरीके से पुनः आरंभ करें: पहले adb kill-server फिर adb start-server, और आउटपुट पढ़कर देखें कि उसने कौन सा पोर्ट लिया। अगर शुरुआत ही अटक जाए, तो multicast फ़िल्टर करने वाले नेटवर्क पर mDNS डिस्कवरी आम संदिग्ध है; प्रलेखित उपाय डिस्कवरी बंद करके सर्वर शुरू करना है:

ADB_MDNS_OPENSCREEN=0 adb start-server
adb devices

भौतिक डिवाइस के लिए USB सबसे छोटा रास्ता है। अगर TCP चाहिए तो डिवाइस को सुनने की स्थिति में adb tcpip 5555 से डालें और डिवाइस के पते और पोर्ट से जोड़ें, adb connect 192.0.2.10:5555। पोर्ट 5037 होस्ट सर्वर का पोर्ट है, वह पोर्ट नहीं जिस पर डिवाइस सुनता है।

इम्युलेटर को भीतर से जाँचें

इम्युलेटर 10.0.2.3 से DNS का जवाब देता है, और वह रिज़ॉल्वर होस्ट प्रक्रिया से पोषित होता है। जब VPN क्लाइंट होस्ट रिज़ॉल्वर बदलता है तो इम्युलेटर उसे विरासत में ले सकता है; जब क्लाइंट इम्युलेटर प्रक्रिया फ़िल्टर करता है या शुरू होने के बाद होस्ट एडाप्टर सूची बदलती है, तो नहीं ले सकता। दोनों को एक ही शेल से संख्यात्मक लक्ष्य और नाम देकर अलग करें। adb shell ping -c 2 10.0.2.2 साबित करता है कि वर्चुअल नेटवर्क होस्ट की ओर पहुँचता है। इसके बाद का नाम खोज बताता है कि रिज़ॉल्यूशन सीमा पार कर गया या नहीं।

फिर वही नाम खोज होस्ट पर चलाएँ। होस्ट हल करता है और इम्युलेटर नहीं इसका मतलब है कि टूटन होस्ट रिज़ॉल्वर और इम्युलेटर के वर्चुअल नेटवर्क के बीच है, टनल में नहीं। दोनों विफल हों तो होस्ट रिज़ॉल्वर देखने की जगह है। VPN जुड़ने के बाद इम्युलेटर पुनः आरंभ करना एक प्रयास के लायक है, क्योंकि कुछ क्लाइंट ऐसी रिज़ॉल्वर स्थिति इंस्टॉल करते हैं जिसे चल रही इम्युलेटर प्रक्रिया नहीं उठाती।

होस्ट रिज़ॉल्वर और क्लाइंट फ़िल्टर जाँचें

पूर्ण टनल क्लाइंट होस्ट रिज़ॉल्वर को अपने रिज़ॉल्वर से बदल देता है, और split-DNS क्लाइंट खोज डोमेन तथा सशर्त फ़ॉरवर्डर जोड़ता है। आंतरिक नाम अक्सर उसी split-DNS कॉन्फ़िगरेशन पर निर्भर होते हैं, इसलिए देखें कि जुड़े रहते समय होस्ट क्या इस्तेमाल करता है: रिज़ॉल्वर का पता, खोज डोमेन और क्या आंतरिक ज़ोन कॉर्पोरेट DNS पर रूट होता है। सार्वजनिक नामों का जवाब देने वाला पर आंतरिक नामों का न देने वाला रिज़ॉल्वर नीति का सवाल है, टूटी टनल नहीं।

कुछ कॉर्पोरेट क्लाइंट वर्चुअल एडाप्टर से आने वाला ट्रैफ़िक भी रोकते हैं। फ़िल्टर ड्राइवर के लिए इम्युलेटर वर्चुअल एडाप्टर जैसा दिखता है, इसलिए होस्ट पूरी तरह काम कर सकता है जबकि नीति इम्युलेटर को मना कर देती है। वह नीति वर्कस्टेशन से दिखाई नहीं देती, और प्रॉक्सी सेटिंग का अनुमान उसे उजागर नहीं करेगा। अगर होस्ट हल करता है और इम्युलेटर रिज़ॉल्वर सेटिंग की परवाह किए बिना अवरुद्ध है, तो सही एस्केलेशन क्लाइंट नीति रखने वाली टीम को है।

जाँचों का क्रम और हर परिणाम का अर्थ

ऊपर से नीचे काम करें और पहली विफल पंक्ति पर रुकें। हर परिणाम अलग मालिक की ओर इशारा करता है, और कोई भी Android Studio दोबारा इंस्टॉल करने से ठीक नहीं होता।

ResultLikely ownerNext check
adb devices is empty with USB attachedUSB, driver or adb servercable, authorization prompt, adb kill-server
adb start-server hangsmDNS discoveryADB_MDNS_OPENSCREEN=0
Emulator reaches 10.0.2.2, names failHost resolver to emulator boundaryhost lookup of the same name
Host resolves, emulator still failsEmulator process or client filterrestart emulator, ask IT about virtual adapters
Both fail for internal names onlySplit DNS or search domainresolver and zone configuration

केवल अंतिम दो पंक्तियाँ ही सामान्य अर्थ में VPN प्रश्न हैं, और केवल अंतिम DNS सामग्री के बारे में है। adb दस्तावेज़ सर्वर पोर्ट और यहाँ बताए गए पर्यावरण चरों को कवर करता है, जो बाकी जाँचते समय परिवहन पक्ष को ईमानदार रखने के लिए पर्याप्त है।

संबंधित लेख