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

Emülatör, uygulamanız için karmaşık modelleme ve test ortamları oluşturmak üzere kullanabileceğiniz çok yönlü ağ iletişimi özellikleri sunar. Bu sayfada emülatör ağ mimarisi ve özellikleri tanıtılmaktadır.

Ağ adresi alanı

Emülatörün her örneği, geliştirme makinenizin ağ arayüzlerinizden ve ayarlarınızdan ya da internetten yalıtan bir sanal yönlendirici veya güvenlik duvarı hizmetinin arkasında çalışır. Emülasyonlu bir cihaz, geliştirme makinenizi veya ağdaki diğer emülatör örneklerini algılayamaz. Yalnızca Ethernet üzerinden bir yönlendirici veya güvenlik duvarına bağlı olduğunu algılar.

10.0.2/24 ağ adresi alanını her örneğin sanal yönlendiricisi yönetir. Yönlendirici tarafından yönetilen tüm adresler, 10.0.2.xx biçimindedir (xx bir sayıdır). Bu alandaki adresler emülatör veya yönlendirici tarafından aşağıdaki gibi önceden ayrılır:

Ağ Adresi Açıklama
10.0.2.1 Yönlendirici veya ağ geçidi adresi
10.0.2.2 Ana makine geri döngü arayüzünüz için özel takma ad (geliştirme makinenizde 127.0.0.1)
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 ile bağlandığında emüle edilen cihaz ağı
10.0.2.16 Kablosuz ile bağlandığında emüle edilen cihaz ağı
127.0.0.1 Emüle edilen cihaz geri döngüsü arayüzü

Çalışan tüm emülatör örnekleri aynı adres atamaları tarafından kullanılır. Bu, makinenizde eşzamanlı olarak çalışan iki örneğiniz varsa bunların her birinin kendi yönlendiricisi olacağı ve bunun arkasında her birinin IP adresinin 10.0.2.15 olduğu anlamına gelir. Örnekler bir yönlendirici tarafından izole edilir ve aynı ağ üzerinde birbirlerini algılayamaz. Emülatör örneklerinin TCP/UDP üzerinden iletişim kurmasına izin verme hakkında bilgi edinmek için emülatör örneklerini birbirine bağlama hakkındaki bölüme bakın.

Geliştirme makinenizdeki 127.0.0.1 adresi, emülatörün geri dönüş arayüzüne karşılık gelir. Geliştirme makinenizin geri dönüş arayüzünde çalışan hizmetlere erişmek için bunun yerine 10.0.2.2 özel adresini kullanın.

Emülasyonlu bir cihazın önceden ayrılmış adresleri Android Emülatör'e özeldir ve gerçek cihazlarda büyük olasılıkla çok farklı olur (bunlar ayrıca, özellikle bir yönlendirici veya güvenlik duvarı arkasında çevrilen ağ adresleri de olabilir).

Yerel ağ sınırlamaları

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

  • Emüle edilen cihazla iletişim, makinenizde çalışan bir güvenlik duvarı programı tarafından engellenebilir.
  • Emüle edilen cihazla iletişim, makinenizin bağlı olduğu başka bir (fiziksel) güvenlik duvarı veya yönlendirici tarafından engelleniyor olabilir.

Emülatörün sanal yönlendiricisi, geliştirme makine ağı ortamınızın izin vermesi koşuluyla, tüm giden TCP ve UDP bağlantılarını ve mesajlarını emüle edilen cihaz adına işleyebilir. Bağlantı noktası numaraları veya aralıklarında yerleşik sınırlamalar yoktur. Yalnızca ana makine işletim sisteminiz ve ağınız tarafından uygulanan sınırlar vardır.

Ortama bağlı olarak, emülatör diğer protokolleri ("ping" için kullanılan ICMP gibi) destekleyemeyebilir. Şu anda emülatör IGMP'yi veya çoklu yayını desteklemez.

Ağ yönlendirmesini kullan

Sanal yönlendiricisinin arkasındaki bir emülatör örneğiyle iletişim kurmak için sanal yönlendiricide ağ yönlendirmesi ayarlayın. Daha sonra istemciler, yönlendiricideki belirli bir misafir bağlantı noktasına bağlanabilirken yönlendirici, trafiği emüle edilen cihaz ana makinesi bağlantı noktasına yönlendirir.

Ağ yönlendirmesini ayarlamak için emülatör örneğinde ana makine ile konuk bağlantı noktaları ve adreslerin bir eşlemesini oluşturun. Ağ yönlendirmesini ayarlamanın iki yolu vardır: Aşağıdaki bölümlerde açıklandığı şekilde emülatör konsol komutlarını kullanmak ve Android Debug Bridge (adb) aracını kullanmak.

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

Her emülatör örneği, bağlanabileceğiniz ve örneğe özgü komutlar verebileceğiniz bir kontrol konsolu sağlar. Bir emülatör örneği için yönlendirmeyi gerektiği gibi ayarlamak üzere redir konsol komutunu kullanın.

Önce hedef emülatör örneğinin konsol bağlantı noktası numarasını belirleyin. Örneğin, başlatılan ilk emülatör örneğinin konsol bağlantı noktası numarası 5554'tür. Ardından, hedef emülatör örneğinin konsoluna bağlanarak konsol bağlantı noktası numarasını aşağıdaki gibi belirtin:

telnet localhost 5554

Bağlandıktan sonra, yönlendirme ayarlamadan önce kimlik doğrulaması yapmanız gerekir. Bunun nasıl yapılacağıyla ilgili ayrıntılar için Konsol oturumu başlatma ve durdurma bölümüne bakın. Kimlik doğrulamasından sonra, yönlendirmeyle çalışmak için redir komutunu kullanın.

Yönlendirme eklemek için şunu kullanın:

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

<protocol> değerinin tcp veya udp olduğu durumlarda <host-port> ile <guest-port> makineniz ile emüle edilen sistem arasındaki eşlemeyi ayarlar.

Örneğin, aşağıdaki komut 127.0.0.1:5000 üzerinde ana makine (geliştirme) makinenize gelen tüm TCP bağlantılarını işleyen ve bunları 10.0.2.15:6000 üzerindeki emüle edilmiş sisteme geçiren bir yönlendirme ayarlar:

redir add tcp:5000:6000

Yönlendirmeyi silmek için redir del komutunu kullanın. Belirli bir örnekle ilgili tüm yönlendirmeleri listelemek için redir list değerini kullanın. Bunlar ve diğer konsol komutları hakkında daha fazla bilgi için Emülatör konsol komutları gönderme bölümüne bakın.

Bağlantı noktası numaralarının yerel ortamınız tarafından kısıtlandığını unutmayın. Bu, genellikle 1024'ün altındaki ana makine bağlantı noktası numaralarını özel yönetici ayrıcalıkları olmadan kullanamayacağınız anlamına gelir. Ayrıca, makinenizdeki başka bir işlem tarafından zaten kullanılmakta olan bir ana makine bağlantı noktası için yönlendirme ayarlayamazsınız. Bu durumda redir, o konuyla ilgili bir hata mesajı oluşturur.

Adb aracılığıyla yönlendirmeyi ayarlama

Android Debug Bridge (adb) aracı, ağ yönlendirmesini ayarlamanız için alternatif bir yöntem olan bağlantı noktası yönlendirme özelliği sunar. Daha fazla bilgi için adb belgelerindeki Bağlantı noktası yönlendirmeyi ayarlama bölümüne bakın.

adb hizmetinin şu anda, adb sunucusunu durdurma dışında yönlendirmeleri kaldırmanın bir yolunu sunmadığını unutmayın.

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

Başlangıçta, emülatör sisteminizin kullanmakta olduğu DNS sunucularının listesini okur. Ardından, bu listede en fazla dört sunucunun IP adreslerini depolar ve gerektiğinde 10.0.2.3, 10.0.2.4, 10.0.2.5 ve 10.0.2.6 emüle adreslerinde bunlara takma adlar oluşturur.

Linux ve macOS'te emülatör, /etc/resolv.conf dosyasını ayrıştırarak DNS sunucusu adreslerini alır. Windows'da emülatör, adresleri GetNetworkParams() API'yi çağırarak alır. Bunun genellikle emülatörün "hosts" dosyanızın içeriğini yok saydığı anlamına geldiğini unutmayın (Linux/macOS'te /etc/hosts, Windows'da %WINDOWS%/system32/HOSTS).

Emülatörü komut satırından başlatırken, kullanılacak DNS sunucularının adreslerini manuel olarak belirlemek için -dns-server <serverList> seçeneğini kullanabilirsiniz. Burada <serverList>, sunucu adları veya IP adreslerinin virgülle ayrılmış bir listesidir. Öykünülen ağda DNS çözümleme sorunlarıyla (ör. web tarayıcısını kullanırken görünen "Bilinmeyen Ana Makine hatası" mesajı) karşılaştığınızda bu seçenek faydalı olabilir.

Emülatörü proxy ile kullanma

Birçok kurumsal ağda, internete yapılan doğrudan bağlantılar ağ yöneticileri tarafından reddedilir. Bunun yerine, internet bağlantılarının belirli bir proxy'den geçmesi gerekir. Proxy gereksinimi olan bir ağ üzerinde internete erişmek için emülatörün bir proxy olduğunu ve bu proxy'ye bağlanması gerektiğini bilmesi gerekir.

HTTP'nin yapısı nedeniyle, doğrudan bir web sunucusu bağlantısı ve bir proxy üzerinden yapılan bağlantı farklı GET istekleriyle sonuçlanır. Emülatör, proxy ile konuşmadan önce sanal cihazdan GET isteklerini şeffaf bir şekilde yeniden yazarak çalışır.

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

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

Alternatif olarak, emülatörü başlatırken -http-proxy <proxy> seçeneğini kullanarak komut satırından bir proxy yapılandırabilirsiniz. Bu durumda, proxy bilgilerini <proxy> içinde aşağıdaki biçimlerden birinde belirtin:

http://<machineName>:<port>

veya

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

-http-proxy seçeneği, emülatörü tüm giden TCP bağlantıları için belirtilen HTTP veya HTTPS proxy'yi kullanmaya zorlar. UDP için yönlendirme desteklenmez.

Alternatif olarak, <proxy> için kullanmak istediğiniz değerle http_proxy ortam değişkenini tanımlayabilirsiniz. Bu durumda, -http-proxy komutunda <proxy> için değer belirtmeniz gerekmez. Emülatör, http_proxy ortam değişkeninin değerini başlangıçta kontrol eder ve tanımlanmışsa değerini otomatik olarak kullanır.

Proxy bağlantı sorunlarını teşhis etmek için -debug-proxy seçeneğini kullanabilirsiniz.

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

Bir emülatör örneğinin başka bir örnekle iletişim kurmasını sağlamak için ağ yönlendirmesini aşağıda açıklandığı gibi ayarlayın.

Ortamınızın aşağıdaki gibi temsil edildiğini varsayalım:

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

C'nin bağlanacağı B'de bir sunucu çalıştırmak istiyorsanız bu sunucuyu aşağıdaki şekilde ayarlayın:

  1. 10.0.2.15:<serverPort> dinleyerek sunucuyu B üzerine kurun.
  2. B konsolunda A:localhost:<localPort>'tan B:10.0.2.15:<serverPort>'a bir yönlendirme ayarlayın.
  3. C'de istemcinin 10.0.2.2:<localPort> adresine bağlanmasını sağlayın.

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

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

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

Emülatör, simüle edilen sesli aramaları ve SMS mesajlarını bir örnekten diğerine otomatik olarak yönlendirir. Sesli arama veya SMS göndermek için, sırasıyla bir emülatörden numara çevirici uygulamasını veya SMS uygulamasını kullanın.

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

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

    Hedef örneğin konsol bağlantı noktası numarasını pencere başlığını kontrol ederek belirleyebilirsiniz. Örnek ayrı bir pencerede çalışıyorsa bunu kontrol edemezsiniz. Konsol bağlantı noktası numarası "Android Emulator (<bağlantı noktası>)" olarak raporlanır.

    Alternatif olarak, adb devices komutu, çalışan sanal cihazların ve bunların konsol bağlantı noktası numaralarının listesini yazdırır. Daha fazla bilgi için Cihaz sorgusu bölümüne bakın.

  3. Çevir düğmesini tıklayın. Hedef emülatör örneğinde yeni bir gelen arama 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. SMS adresi olarak hedef emülatör örneğinin konsol bağlantı noktası numarasını belirtin.
  3. Mesaj metnini girin.
  4. Mesajı gönderin. İleti, 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 Telefon emülasyonu ve SMS emülasyonu sayfalarına göz atın.