Моя операционная система - Windows 10.
Я использую Android x86 в своем эмуляторе.
Я использовал virtualbox в качестве эмулятора, и сеть virtualbox настроена на:
-Адаптер моста (тип подключения)
-Intel (R) двухдиапазонный беспроводной-AC 3168 (имя)
-Intel PRO / 1000 МТ для настольных ПК (8254OEM) -> (тип адаптера)
-Allow All (Случайный режим)
Я установил, что из-за этого набора работает, чтобы мой эмулятор подключался к Интернету.
Я использую python для запуска скрипта, который используетэмулятор.
проблема в том, что когда я использую другую сеть, IP-адрес эмулятора меняется ..
, поэтому некоторая часть моего кода не работает, когда я меняю сеть, которую я использую, код:
from subprocess import Popen, PIPE
import os
ip_emulator ='192.168.100.15' #the ip got from "ALT + F1" and type ipconfig on emulator
fileadb = 'adb.exe'
pathsys32 = r'C:\Users\admin\AppData\Local\Android\Sdk\platform-tools'
adb = os.path.join(pathsys32, fileadb)
cek = Popen([adb, 'connect', ip_emulator], stdout=PIPE, stderr=PIPE)
из-за изменения ip в эмуляторе, вызванного изменением моей сети, которую я использовал (например, переход с домашней сети на офисную или на мобильный модем).
Я должен сделать код, чтобы обнаружить IP-эмулятор, чтобы убедиться, что мой ADB подключен кэмулятор.
как это сделать?вывести его за пределы эмулятора с помощью python, не входя в эмулятор (например, нажмите ALT + F1 и введите ifconfig).
Я уже пробую использовать: "arp -a", но иногда ip-шоу иногда нет.
уже попробуйте "netstat -a" без эмулятора ip показать там
код для обнаружения через arp:
from subprocess import Popen, PIPE
import os
import re
arpfile = 'ARP.EXE'
fileadb = 'adb.exe'
pathsys32 = r'C:\Windows\System32'
arp = os.path.join(pathsys32, arpfile)
adb = os.path.join(pathsys32, fileadb)
def detectiparp():
cek = Popen([arp, '-a'], stdout=PIPE, stderr=PIPE)
out, err = cek.communicate()
outdata = (out.decode('utf-8')).split('\n')
for i in outdata:
mac = '08-00-27-ce-9e-8c'
rexmac = re.search(mac, i)
if rexmac:
ipre = '([0-9]{0,}\.[0-9]{0,}\.[0-9]{0,}\.[0-9]{0,})\s.+?08-00-27-ce-9e-8c'
iprex = re.search(ipre, i)
ip_emu = iprex.group(1)
return ip_emu
else:
return False
ip_emulator = detectiparp()
cek = Popen([adb, 'connect', ip_emulator], stdout=PIPE, stderr=PIPE)
Я уже прочитал:
Как получить IP-адрес эмулятора Android?
Как подключиться к AVD
Как получить IP-адресэмулятор для связи с локальным сервером
, и я думаю, что весь ответ "получить свой эмулятор IP из эмулятора" или "использовать набор IP по умолчанию (10.0.2.2)"
Итак, я объяснил кое-что, IP 10.0.2.2 происходит только в том случае, если тип подключения, который я использую в virtualbox, является типом NAT, но с этим параметром мой эмулятор не может подключиться к Интернету.
Уже попробуйте использовать:
1-ую сеть, установленную как NAT, и 2-ую сеть, установленную как Bridge, но IP-адрес меняется на класс C (192.169.xx), и IP-адрес эмулятора все еще изменяется, если я используюдругая сеть.
если я знаю, как определить IP-адрес моего эмулятора (с хоста / ноутбука / вне моего эмулятора), я могу создать код или есть модуль python, который я могу использовать для его обнаружения?