რთავთ ოფისის 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 ჰოსტის სერვერის პორტია და არა ის, რომელზეც მოწყობილობა უსმენს.

შეამოწმეთ ემულატორი შიგნიდან

ემულატორი DNS-ს 10.0.2.3-იდან პასუხობს და ამ გამხსნელს ჰოსტის პროცესი კვებავს. როცა VPN კლიენტი ჰოსტის გამხსნელს ცვლის, ემულატორს შეუძლია მისი მემკვიდრეობით მიღება; როცა კლიენტი ემულატორის პროცესს ფილტრავს ან გაშვების შემდეგ ჰოსტის ადაპტერების სია იცვლება, არ შეუძლია. გაყავით ორივე რიცხვითი სამიზნით და სახელით ერთი და იმავე shell-იდან. 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-ის დოკუმენტაცია მოიცავს სერვერის პორტს და აქ ხსენებულ გარემოს ცვლადებს, რაც საკმარისია ტრანსპორტის მხარე პატიოსნად შესანარჩუნებლად, სანამ დანარჩენს ამოწმებთ.

დაკავშირებული სტატიები