Android Emülatör ağ iletişimini ayarlama

Emülatör, birçok farklı işlem için kullanabileceğiniz çok yönlü Uygulamanız için karmaşık modelleme ve test ortamları oluşturabilirsiniz. Bu sayfa emülatör ağ mimarisini ve özelliklerini tanıtıyor.

Ağ adres alanı

Emülatörün her örneği bir sanal yönlendirici veya güvenlik duvarı hizmetinin arkasında çalışır kendi geliştirme makinenizin ağ arayüzlerinden ve ayarlarınızdan izole eden ve internetten. Öykünülen bir cihaz, geliştirme makinenizi algılayamıyor veya diğer emülatör örneklerinden birini kullanabilir. Yalnızca bunu algılar Ethernet üzerinden bir yönlendiriciye veya güvenlik duvarına bağlı olduğundan emin olun.

Her örneğin sanal yönlendiricisi 10.0.2/24 ağ adresini yönetir boşluk oluşturur. Yönlendirici tarafından yönetilen tüm adresler şu biçimdedir: 10.0.2.xx; burada xx bir sayıdır. Bu alandaki adresler emülatör veya yönlendirici tarafından şu şekilde önceden tahsis edilir:

Ağ Adresi Açıklama
10.0.2.1 Yönlendirici veya ağ geçidi adresi
10.0.2.2 Barındırıcı geri döngü arayüzünüz için özel takma ad (Chrome'da 127.0.0.1 geliştirme makinesi)
10.0.2.3 İlk DNS sunucusu
10.0.2.4 / 10.0.2.5 / 10.0.2.6 İsteğe bağlı ikinci, üçüncü ve dördüncü DNS sunucuları
10.0.2.15 Ethernet kullanılarak bağlanıldığında emüle edilen cihaz ağı
10.0.2.16 Kablosuz ağ kullanılarak bağlanıldığında emüle edilen cihaz ağı
127.0.0.1 Taklit edilmiş cihaz geri döngü arayüzü

Çalışan tüm emülatörler tarafından aynı adres atamaları kullanılıyor sağlar. Yani, aynı anda çalışan iki örneğiniz varsa her birinin kendi yönlendiricisi olacak. Onun arkasında her birinin bir tane 10.0.2.15 IP adresi. Örnekler bir yönlendirici tarafından izole edildiğinden algılamasıdır. Nasıl yapıldığını emülatör örneklerinin TCP/UDP üzerinden iletişim kurmasına izin vermek için emülatör örnekleri arasında bağlantı kurma ile ilgili bölüme bakın.

Geliştirme makinenizdeki 127.0.0.1 adresi karşılık gelir devre dışı bırakılır. Çalışan hizmetlere erişmek için geri döngü arayüzünüzün birinde özel geri bildirim 10.0.2.2 adresini kullanmanız gerekir.

Öykünülen bir cihazın önceden ayrılmış adresleri Android Emülatör'e özgüdür ve gerçek hayatta büyük farklılıklar (özellikle de büyük olasılıkla ağ adresinin çevrilmesi için bir yönlendirici veya güvenlik duvarı arkasında).

Yerel ağ iletişimi sınırlamaları

Emülatörde çalışan Android uygulamaları, bir iş istasyonu olabilir. Ancak uygulamalar doğrudan donanıma ve emülatöre değil, emülatör üzerinden bağlanır. iş istasyonunuzdaki normal bir uygulama gibi çalışır. Bu durum, bazı sınırlamalara neden olabilir:

  • Öykünülen cihazla iletişim, bir güvenlik duvarı tarafından engelleniyor olabilir yardımcı olan bir self servis programdır.
  • Başka bir kişi, emüle edilen cihazla iletişimi engelliyor olabilir (fiziksel) güvenlik duvarı veya yönlendirici olması gerekir.

Emülatörün sanal yönlendiricisi, tüm giden TCP ve UDP bağlantıları ve mesajları (varsa) bunu mümkün kılar. Hayır, bağlantı noktası numaralarına veya aralıklarına ilişkin yerleşik sınırlamalar vardır. ana bilgisayar işletim sistemi ve ağ.

Emülatör, ortama bağlı olarak diğer ("ping" için kullanılan ICMP gibi) kullanır. Şu anda emülatörü, IGMP veya çoklu yayını desteklemiyor.

Ağ yönlendirmesi kullan

Sanal yönlendiricisinin arkasındaki bir emülatör örneğiyle iletişim kurmak için Sanal yönlendiricide ağ yönlendirmesini ayarlayın. Böylece müşteriler yönlendirici, trafiği yönlendirirken yönlendiricideki belirli bir misafir bağlantı noktasına ve emüle edilmiş cihaz ana makine bağlantı noktasına doğru taşıyabilirsiniz.

Ağ yönlendirmesini ayarlamak için ana makine ile misafirin eşlemesini oluşturun bağlantı noktaları ve adresler üzerinde çalışır. iki şekilde ayarlayabilirsiniz: ağ yönlendirme: Emülatör konsol komutlarını kullanma ve Android'i kullanma Aşağıdaki bölümlerde açıklandığı gibi Hata Ayıklama Köprüsü (adb) aracı.

Emülatör konsolu üzerinden yönlendirmeyi ayarlama

Her emülatör örneği, bağlanabileceğiniz bir kontrol konsolu sağlar ve sorun komutlarını kullanabilirsiniz. Şunu kullanın: redir konsol komutunu kullanarak bir emülatör örneğidir.

Öncelikle hedef emülatör örneği için konsol bağlantı noktası numarasını belirleyin. Örneğin, başlatılan ilk emülatör örneği için konsol bağlantı noktası numarası: 5554.) Daha sonra, hedef emülatör örneğinin konsoluna bağlanarak aşağıdaki gibi konsol bağlantı noktası numarası:

telnet localhost 5554

Bağlandıktan sonra, yeniden yönlendirmeyi ayarlayabilmek için önce kimlik doğrulaması yapmanız gerekir. Görüntüleyin Şunlar için konsol oturumu başlat ve durdur ayrıntılarına inceleyebilirsiniz. Kimlik doğrulamasından sonra şunun üzerinde çalışmak için redir komutunu kullanın: daha fazla bilgi edineceksiniz.

Yönlendirme eklemek için:

redir add <protocol>:<host-port>:<guest-port>

Burada <protocol>, tcp veya udp olduğunda ve <host-port> ve <guest-port>, emüle edilmiş sistem ile emülasyonlu (emüle) gerçekleştirilen sistem arasında bir eşleme oluşturmayı sağlar.

Örneğin, aşağıdaki komut, tüm verilerinizi işleme koyan 127.0.0.1:5000 üzerinde ana makine (geliştirme) makinenize gelen TCP bağlantıları ve 10.0.2.15:6000 adresindeki emülasyonlu sisteme aktarır:

redir add tcp:5000:6000

Bir yönlendirmeyi silmek için redir del komutunu kullanın. Alıcı: belirli bir örneğe ait tüm yönlendirmelerin listesini yapmak için redir list kullanın. Bunlar ve diğer konsol komutları hakkında daha fazla bilgi için bkz. Emulator konsol komutlarını gönderin.

Bağlantı noktası numaralarının yerel ortamınız tarafından kısıtlandığını unutmayın. Bu genelde 1024'ten küçük ana makine bağlantı noktası numaralarını özel bağlantı olmadan yönetici ayrıcalıkları. Ayrıca, bir makinenizdeki başka bir işlem tarafından kullanılan ana makine bağlantı noktasıdır. Bu durumunda, redir bu konuda bir hata mesajı oluşturur.

Adb üzerinden yönlendirmeyi ayarlama

Android Hata Ayıklama Köprüsü (adb) aracı, alternatif bir uygulama olan bağlantı noktası yönlendirme sağlar. ağ yönlendirmesini ayarlamanın bir yoludur. Daha fazla bilgi için adb sayfasında Bağlantı noktası yönlendirmeyi ayarlama bölümüne bakın. belgelerinden faydalanabilirsiniz.

adb şu anda yönlendirmeyi kaldırmak için bir yol sunmadığını unutmayın yalnızca adb sunucusu durdurularak yapılır.

Emülatör DNS ayarlarını yapılandırma

Başlatma sırasında emülatör, sisteminizin ayarlı DNS sunucularının listesini okur belirleyebilirsiniz. Daha sonra, bu dizinde en fazla dört sunucunun IP adreslerini depolar. 10.0.2.3, 10.0.2.4, 10.0.2.4 veya 10.0.2.3, 10.0.2.4 adresli e-posta adreslerinde 10.0.2.5 ve 10.0.2.6'ya uygun olmalıdır.

Linux ve macOS'te emülatör, DNS sunucusu adreslerini ayrıştırarak elde eder. /etc/resolv.conf dosyası. Windows'da emülatör GetNetworkParams() API'yi çağırarak diğer adreslerini özelleştirebilirsiniz. Bu genellikle emülatörün "ana makinelerinizin" içeriğini yok saydığı anlamına gelir dosya (Linux/macOS'te /etc/hosts, %WINDOWS%/system32/HOSTS ) görürsünüz.

Emülatörü komut satırından başlatırken -dns-server <serverList> kullanılacak DNS sunucularının adresleri (burada <serverList> virgülle ayrılmış bir değerdir) listesi oluşturmayı da gerektirir. Aşağıdaki şartlar karşılanıyorsa bu seçenek sizin için yararlı olabilir: emüle edilmiş ağda DNS çözümleme sorunlarıyla karşılaşmanız (örneğin, "Bilinmeyen Ana Makine hatası" mesajı gösterilir.

Emülatörü proxy ile kullanma

Birçok şirket ağında, internetle kurulan doğrudan bağlantılar tarafından reddediliyor. ağ yöneticileri için geçerlidir. Bunun yerine, internet bağlantılarının belirli bir temsil eder. Proxy gereksinimi olan bir ağ üzerinde internete erişmek için emülatör bir proxy olduğunu ve ona bağlanması gerektiğini bilmesi gerekir.

HTTP'nin yapısı nedeniyle, doğrudan web sunucusu bağlantısı ve proxy, farklı GET isteklerine neden olur. Emülatör, komut dosyasının içeriğini şeffaf bir şekilde yeniden yazar Proxy ile konuşmadan önce sanal cihazdan istek GET isteği gönderin.

Emülatörünüzün internete bir proxy sunucusu üzerinden erişmesi gerekiyorsa emülatörün Genişletilmiş denetimler ekranından özel HTTP proxy'si:

  1. Emülatör açıkken Diğer'i tıklayın.
  2. Ayarlar'ı tıklayın ve Proxy.
  3. HTTP proxy ayarlarınızı tanımlayın.

Alternatif olarak, komut satırından -http-proxy <proxy> seçeneği sunulur. Bu durumda, proxy bilgilerini belirtin <proxy> dilinde, şu biçimlerden birinde:

http://<machineName>:<port>

veya

http://<username>:<password>@<machineName>:<port>

-http-proxy seçeneği, emülatörü belirtilen değeri kullanmaya zorlar Giden tüm TCP bağlantıları için HTTP veya HTTPS proxy'si. UDP için yönlendirme şu değil: desteklenir.

Alternatif olarak ortam değişkenini de tanımlayabilirsiniz. http_proxy için kullanmak istediğiniz değeri içeren <proxy>. Bu durumda, -http-proxy komutundaki <proxy> emülatör, http_proxy ortam değişkeninin değerini başlatma ve tanımlanmışsa otomatik olarak bu değeri kullanır.

Proxy'yi teşhis etmek için -debug-proxy seçeneğini kullanabilirsiniz bağlantı sorunlarına neden olur.

Ara bağlantı emülatörü örnekleri

Bir emülatör örneğinin başka bir emülatör örneğiyle iletişim kurmasını sağlamak için ağ yönlendirmesi için aşağıdaki talimatları uygulayın.

Ortamınızın şu şekilde temsil edildiğini varsayalım:

  • A, geliştirme makinenizdir.
  • B, A üzerinde çalışan ilk emülatör örneğinizdir.
  • C, yine A üzerinde çalışan ikinci emülatör örneğinizdir.

C'nin bağlanacağı B üzerinde bir sunucu çalıştırmak istiyorsanız şöyle sıralayabiliriz:

  1. B'de sunucuyu kurup 10.0.2.15:<serverPort>.
  2. B konsolunda A:localhost:<localPort> - B:10.0.2.15:<serverPort>.
  3. C üzerinde, istemcinin 10.0.2.2:<localPort> bağlantısına bağlanmasını sağlayın.

Örneğin, bir HTTP sunucusu çalıştırmak istiyorsanız 80 olarak <serverPort> ve <localPort> 8080:

  • B, 10.0.2.15:80'de dinliyor.
  • B konsolunda redir add tcp:8080:80.. sorun
  • C, 10.0.2.2:8080'e bağlanır.

Başka bir emülatör örneğine sesli arama veya SMS gönderin

Emülatör, simüle edilmiş sesli aramaları ve SMS mesajlarını tek bir örnekten otomatik olarak başka bir tane. Sesli arama veya SMS göndermek için sırasıyla numara çevirici uygulamasını veya SMS uygulamasını kullanın. elde edebiliyorlar.

Başka bir emülatör örneğine çağrı simüle edilmiş sesli arama başlatmak için:

  1. Kaynak emülatör örneğinde numara çevirici uygulamasını başlatın.
  2. Çevrilecek numara olarak hedef örneğin konsol bağlantı noktası numarasını girin.

    Şunları yapabilirsiniz: pencere başlığını kontrol ederek hedef örneğin konsol bağlantı noktası numarasını belirleyin. eğer ayrı bir pencerede çalıştırılıyor, ancak bir araç penceresinde çalıştırılıyorsa bunu yapamazsınız. İlgili içeriği oluşturmak için kullanılan konsol bağlantı noktası numarası "Android Emulator (<bağlantı noktası>)" olarak bildirildi.

    Alternatif olarak, adb devices komutu, çalışan sanal cihazların ve bunların konsol bağlantı noktalarının listesini yazdırır numaraları'na dokunun. Daha fazla bilgi için bkz. cihazlar.

  3. Çevir düğmesini tıklayın. Hedef emülatör örneğinde yeni bir gelen çağrı görünür.

Başka bir emülatör örneğine SMS mesajı göndermek için:

  1. Varsa SMS uygulamasını başlatın.
  2. Hedef emülatör örneğinin konsol bağlantı noktası numarasını SMS adresi olarak belirtin.
  3. Mesaj metnini girin.
  4. Mesajı gönderin. Mesaj, hedef emülatör örneğine teslim edilir.
  5. Gelen sesli aramayı veya SMS'i simüle etmek için bir emülatör konsoluna da bağlanabilirsiniz. Daha fazla bilgi için bkz. Telefon emülasyonu ve SMS emülasyonu.