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