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ün ağ mimarisi ve özellikleri tanıtılmaktadır.
Ağ adres alanı
Emülatörün her örneği, geliştirme makinenizin ağ arayüzlerinden ve ayarlarından ve internetten izole eden bir sanal yönlendirici veya güvenlik duvarı hizmetinin arkasında çalışır. Emüle edilmiş bir cihaz, geliştirme makinenizi veya ağdaki diğer emülatör örneklerini algılayamaz. Yalnızca Ethernet üzerinden bir yönlendiriciye veya güvenlik duvarına bağlı olduğunu algılar.
Her örnek için sanal yönlendirici, 10.0.2/24 ağ adresi alanını yönetir. Yönlendirici tarafından yönetilen tüm adresler 10.0.2.xx biçimindedir. Burada xx bir sayıdır. Bu alandaki adresler, emülatör veya yönlendirici tarafından aşağıdaki şekilde ö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 | Birinci 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 | Öykünülen cihaz geri döngü arayüzü |
Çalışan tüm emülatör örnekleri aynı adres atamalarını kullanır. Bu, makinenizde aynı anda çalışan iki örnek varsa her birinin kendi yönlendiricisi olacağı ve her birinin 10.0.2.15 IP adresine sahip olacağı anlamına gelir. Örnekler bir yönlendirici tarafından yalıtılır ve aynı ağda birbirini 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 bölümüne bakın.
Geliştirme makinenizdeki 127.0.0.1 adresi, emülatörün geri döngü arayüzüne karşılık gelir. Geliştirme makinenizin geri döngü arayüzünde çalışan hizmetlere erişmek için bunun yerine özel 10.0.2.2 adresini kullanın.
Emüle edilmiş bir cihazın önceden ayrılmış adresleri Android Emulator'a özeldir ve gerçek cihazlarda (ağ adresi çevirisi de yapılmış olabilir, özellikle bir yönlendiricinin veya güvenlik duvarının arkasında) çok farklı olması muhtemeldir.
Yerel ağ sınırlamaları
Bir emülatörde çalışan Android uygulamaları, iş istasyonunuzda kullanılabilen ağa bağlanabilir. Ancak uygulamalar doğrudan donanıma değil, emülatör üzerinden bağlanır ve emülatör, iş istasyonunuzda normal bir uygulama gibi davranır. Bu durum bazı sınırlamalara neden olabilir:
- Emüle edilmiş 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 engellenebilir.
Geliştirme makinenizin ağ ortamı izin verdiği sürece, emülatörün sanal yönlendiricisi, emüle edilen cihaz adına tüm giden TCP ve UDP bağlantılarını ve mesajlarını işleyebilmelidir. Bağlantı noktası numaraları veya aralıkları için yerleşik sınırlamalar yoktur. Yalnızca ana makine işletim sisteminiz ve ağınız tarafından uygulanan sınırlamalar vardır.
Ortama bağlı olarak, emülatör diğer protokolleri (ör. "ping" için kullanılan ICMP) destekleyemeyebilir. Şu anda emülatör, IGMP veya çoklu yayını desteklememektedir.
Ağ yönlendirmesini kullanma
Sanal yönlendiricisinin arkasındaki bir emülatör örneğiyle iletişim kurmak için sanal yönlendiricide ağ yönlendirmesini ayarlayın. İstemciler daha sonra yönlendiricideki belirtilen bir misafir bağlantı noktasına bağlanabilir. Yönlendirici ise bu bağlantı noktasına ve bu bağlantı noktasından gelen trafiği emüle edilmiş cihaz ana makine bağlantı noktasına yönlendirir.
Ağ yönlendirmesini ayarlamak için emülatör örneğinde ana makine ve konuk bağlantı noktalarının ve adreslerinin eşlemesini oluşturun. Ağ yönlendirmesini ayarlamanın iki yolu vardır: aşağıdaki bölümlerde açıklandığı gibi, emülatör konsol komutlarını ve Android Debug Bridge (adb
) aracını kullanma.
Yönlendirmeyi emülatör konsolu üzerinden ayarlama
Her bir emülatör örneği, bağlanabileceğiniz ve o örneğe özel komutlar verebileceğiniz bir kontrol konsolu sağlar. Yönlendirmeyi bir emülatör örneği için gerektiği şekilde ayarlamak üzere redir
konsol komutunu kullanın.
Öncelikle 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 konsol bağlantı noktası numarasını belirterek konsoluna bağlanın:
telnet localhost 5554
Bağlandıktan sonra yönlendirmeyi ayarlayabilmek için kimliğinizi doğrulamanız gerekir. Bunu nasıl yapacağınızla ilgili ayrıntılar için Konsol oturumunu başlatma ve durdurma başlıklı makaleyi inceleyin. Kimlik doğrulama işlemi tamamlandıktan sonra yönlendirme ile çalışmak için redir
komutunu kullanın.
Yönlendirme eklemek için şunu kullanın:
redir add <protocol>:<host-port>:<guest-port>
Burada <protocol>
, tcp
veya udp
'dir. <host-port>
ve <guest-port>
ise makineniz ile emüle edilen sistem arasındaki eşlemeyi ayarlar.
Örneğin, aşağıdaki komut, 127.0.0.1:5000 adresindeki ana makinenize (geliştirme) gelen tüm TCP bağlantılarını işleyen ve bunları 10.0.2.15:6000 adresindeki emüle edilmiş sisteme ileten bir yönlendirme ayarlar:
redir add tcp:5000:6000
Yönlendirmeyi silmek için redir del
komutunu kullanın. Belirli bir örnek için tüm yönlendirmeleri listelemek üzere redir
list
kullanın. Bu ve diğer konsol komutları hakkında daha fazla bilgi için Emülatör konsol komutları gönderme başlıklı makaleyi inceleyin.
Bağlantı noktası numaralarının yerel ortamınız tarafından kısıtlandığını unutmayın. Bu durum genellikle, özel yönetici ayrıcalıkları olmadan 1024'ten küçük ana makine bağlantı noktası numaralarını kullanamayacağınız anlamına gelir. Ayrıca, makinenizde başka bir işlem tarafından zaten kullanılan bir ana makine bağlantı noktası için yönlendirme ayarlayamazsınız. Bu durumda redir
, bu yönde bir hata mesajı oluşturur.
adb aracılığıyla yönlendirme ayarlama
Android Debug Bridge (adb
) aracı, bağlantı noktası yönlendirme özelliği sunar. Bu özellik, ağ yönlendirmeyi ayarlamanın alternatif bir yoludur. Daha fazla bilgi için adb
dokümanlarındaki Bağlantı noktası yönlendirmeyi ayarlama başlıklı makaleyi inceleyin.
adb
sunucusu durdurulmadığı sürece adb
'da yönlendirmeyi kaldırmanın şu anda mümkün olmadığını unutmayın.
Emülatör DNS ayarlarını yapılandırma
Emülatör, başlatıldığında sisteminizin kullandığı DNS sunucularının listesini okur. Ardından, bu listede en fazla dört sunucunun IP adresini depolar ve gerektiğinde 10.0.2.3, 10.0.2.4, 10.0.2.5 ve 10.0.2.6 numaralı taklit edilmiş adreslerde bu adreslere yönelik 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, GetNetworkParams()
API'sini çağırarak adresleri alır. Bu durumun 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 belirtmek için -dns-server <serverList>
seçeneğini kullanabilirsiniz. Burada <serverList>
, sunucu adlarının veya IP adreslerinin virgülle ayrılmış bir listesidir. Bu seçeneği, emüle edilen ağda DNS çözümleme sorunlarıyla (ör. web tarayıcısı kullanılırken görünen "Bilinmeyen ana makine hatası" mesajı) karşılaşırsanız faydalı bulabilirsiniz.
Emülatörü proxy ile kullanma
Birçok kurumsal ağda, internete doğrudan bağlantılar ağ yöneticileri tarafından reddedilir. Bunun yerine, internet bağlantıları belirli bir proxy üzerinden geçmelidir. Proxy gerektiren bir ağda internete erişmek için emülatörün proxy olduğunu ve proxy'ye bağlanması gerektiğini bilmesi gerekir.
HTTP'nin doğası gereği, doğrudan web sunucusu bağlantısı ve proxy üzerinden bağlantı farklı GET isteklerine neden olur. Emülatör, proxy ile iletişim kurmadan önce sanal cihazdan gelen GET isteklerini şeffaf bir şekilde yeniden yazarak çalışmasını sağlar.
Emülatörünüzün internete bir proxy sunucu üzerinden erişmesi gerekiyorsa özel bir HTTP proxy'si yapılandırabilirsiniz.
Emülatörü Android Studio'da kullanırken Android Studio Menüsü'ndeki (Settings > Appearance & Behavior > System Settings > HTTP Proxy
) ayarları kullanarak proxy yapılandırabilirsiniz.
Daha fazla bilgiyi Android Studio proxy'sini ayarlama başlıklı Android Studio
dokümanında bulabilirsiniz.
Emülatörü bağımsız olarak (Android Studio dışında) kullanırken emülatörün Genişletilmiş kontroller ekranından proxy yapılandırabilirsiniz:
- Emülatör açıkken Diğer'i
tıklayın.
- Ayarlar ve Proxy'yi tıklayın (yalnızca emülatör Android Studio'dan başlatılmadıysa kullanılabilir).
- HTTP proxy ayarlarınızı tanımlayın.

Alternatif olarak, emülatörü başlatırken -http-proxy <proxy>
seçeneğiyle komut satırından bir proxy yapılandırabilirsiniz.
Bu durumda, <proxy>
içinde proxy bilgilerini aşağıdaki biçimlerden birinde belirtin:
http://<machineName>:<port>
veya
http://<username>:<password>@<machineName>:<port>
-http-proxy
seçeneği, emülatörün tüm giden TCP bağlantıları için belirtilen HTTP veya HTTPS proxy'sini kullanmasını zorunlu kılar. UDP için yönlendirme desteklenmez.
Alternatif olarak, http_proxy
ortam değişkenini <proxy>
için kullanmak istediğiniz değerle tanımlayabilirsiniz. Bu durumda, -http-proxy
komutunda <proxy>
için bir değer belirtmeniz gerekmez. Emülatör, başlatma sırasında http_proxy
ortam değişkeninin değerini kontrol eder ve tanımlanmışsa değerini otomatik olarak kullanır.
Proxy bağlantısı 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 diğeriyle iletişim kurmasına izin vermek için aşağıda açıklandığı gibi ağ yönlendirmesini 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 de çalışan ikinci emülatör örneğinizdir.
C'nin bağlanacağı bir sunucuyu B'de çalıştırmak istiyorsanız aşağıdaki gibi ayarlayın:
- Sunucuyu B'de kurun ve 10.0.2.15:<serverPort> adresini dinleyin.
- B konsolunda, A:localhost:<localPort> adresinden B:10.0.2.15:<serverPort> adresine yönlendirme ayarlayın.
- 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>
için 80'i, <localPort>
için 8080'i seçin:
- B, 10.0.2.15:80 adresini dinliyor.
- B konsolunda
redir add tcp:8080:80.
komutunu verin. - C, 10.0.2.2:8080'e bağlanır.
Başka bir emülatör örneğine sesli arama veya SMS gönderme
Emülatör, bir örnekten diğerine simüle edilmiş sesli aramaları ve SMS mesajlarını otomatik olarak yönlendirir. Sesli arama veya SMS göndermek için emülatörlerden birinde sırasıyla numara çevirici uygulamasını veya SMS uygulamasını kullanın.
Başka bir emülatör örneğine simüle edilmiş sesli arama başlatmak için:
- Arayan tarafın emülatör örneğinde numara çevirici uygulamasını başlatın.
Çevrilecek numara olarak hedef örneğin konsol bağlantı noktası numarasını girin.
Ayrı bir pencerede çalışıyorsa pencere başlığını kontrol ederek hedef örneğin konsol bağlantı noktası numarasını belirleyebilirsiniz ancak bir araç penceresinde çalışıyorsa bunu yapamazsınız. Konsol bağlantı noktası numarası "Android Emulator (<bağlantı noktası>)" olarak bildirilir.
Alternatif olarak,
adb devices
komutu, çalışan sanal cihazların ve konsol bağlantı noktası numaralarının listesini yazdırır. Daha fazla bilgi için Cihaz sorgulama başlıklı makaleyi inceleyin.- Arama 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:
- SMS uygulamasını başlatın (varsa).
- Hedef emülatör örneğinin konsol bağlantı noktası numarasını SMS adresi olarak belirtin.
- Mesaj metnini girin.
- Mesajı gönderin. İleti, hedef emülatör örneğine teslim edilir.
Gelen bir 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 başlıklı makaleleri inceleyin.