Emulator menyediakan kemampuan jaringan serbaguna yang dapat digunakan untuk menyiapkan lingkungan pengujian dan pemodelan kompleks untuk aplikasi Anda. Halaman ini memperkenalkan arsitektur dan kemampuan jaringan emulator.
Ruang alamat jaringan
Setiap instance emulator berjalan di belakang layanan router atau firewall virtual yang mengisolasinya dari antarmuka dan setelan jaringan mesin pengembangan Anda, serta dari internet. Perangkat yang diemulasikan tidak dapat mendeteksi mesin pengembangan Anda atau instance emulator lainnya pada jaringan tersebut. Enkripsi hanya mendeteksi koneksi melalui ethernet ke router atau firewall.
Router virtual untuk setiap instance mengelola ruang alamat jaringan 10.0.2/24. Semua alamat yang dikelola oleh router dalam bentuk 10.0.2.xx, dengan xx sebagai angka. Alamat di dalam ruang ini telah dialokasikan sebelumnya oleh emulator atau router sebagai berikut:
Alamat Jaringan | Deskripsi |
---|---|
10.0.2.1 | Router atau alamat gateway |
10.0.2.2 | Alias khusus untuk antarmuka loopback host Anda (127.0.0.1 pada mesin pengembangan) |
10.0.2.3 | Server DNS pertama |
10.0.2.4 / 10.0.2.5 / 10.0.2.6 | Server DNS kedua, ketiga, dan keempat opsional |
10.0.2.15 | Jaringan perangkat yang diemulasikan saat terhubung menggunakan ethernet |
10.0.2.16 | Jaringan perangkat yang diemulasikan saat terhubung menggunakan Wi-Fi |
127.0.0.1 | Antarmuka loopback perangkat yang diemulasikan |
Penetapan alamat yang sama digunakan oleh semua instance emulator yang berjalan. Artinya, jika Anda memiliki dua instance yang berjalan bersamaan pada mesin, setiap instance akan memiliki router sendiri, dan di balik itu, setiap instance memiliki alamat IP 10.0.2.15. Instance diisolasi oleh router dan tidak dapat mendeteksi satu sama lain di jaringan yang sama. Untuk mengetahui informasi tentang cara mengizinkan instance emulator berkomunikasi melalui TCP/UDP, baca bagian tentang menghubungkan instance emulator.
Alamat 127.0.0.1 pada mesin pengembangan sesuai dengan antarmuka loopback emulator. Untuk mengakses layanan yang berjalan di antarmuka loopback mesin pengembangan, gunakan alamat khusus 10.0.2.2.
Alamat yang telah dialokasikan sebelumnya dari perangkat yang diemulasikan dikhususkan untuk Android Emulator dan kemungkinan sangat berbeda pada perangkat sebenarnya (yang juga kemungkinan besar merupakan penafsiran alamat jaringan, khususnya di belakang router atau firewall).
Pembatasan jaringan lokal
Aplikasi Android yang berjalan di emulator dapat terhubung ke jaringan yang tersedia di workstation Anda. Namun, aplikasi terhubung melalui emulator, bukan langsung ke hardware, dan emulator bertindak seperti aplikasi normal di workstation Anda. Hal ini dapat menyebabkan adanya beberapa batasan:
- Komunikasi dengan perangkat yang diemulasikan dapat diblokir oleh program firewall yang berjalan pada mesin Anda.
- Komunikasi dengan perangkat yang diemulasikan dapat diblokir oleh firewall atau router lain (fisik) yang terhubung dengan mesin Anda.
Router virtual emulator harus dapat menangani semua pesan dan koneksi TCP dan UDP outbound atas nama perangkat yang diemulasikan, dengan ketentuan lingkungan jaringan mesin pengembangan Anda mengizinkannya. Tidak ada batasan bawaan pada nomor atau rentang port, dan hanya berlaku batasan yang diberlakukan oleh sistem operasi dan jaringan host Anda.
Bergantung pada lingkungannya, emulator mungkin tidak dapat mendukung protokol lain (seperti ICMP yang digunakan untuk "ping"). Saat ini, emulator tidak mendukung IGMP atau multicast.
Menggunakan pengalihan jaringan
Untuk berkomunikasi dengan instance emulator di belakang router virtualnya, siapkan pengalihan jaringan pada router virtual. Klien kemudian dapat terhubung ke port tamu yang ditentukan pada router, sementara router mengarahkan traffic ke dan dari port tersebut ke port host perangkat yang diemulasikan.
Untuk menyiapkan pengalihan jaringan, Anda harus membuat pemetaan alamat dan port
host dan tamu pada instance emulator. Ada dua cara untuk menyiapkan
pengalihan jaringan: menggunakan perintah konsol emulator dan menggunakan alat Android
Debug Bridge (adb
), seperti yang dijelaskan di bagian berikut.
Menyiapkan pengalihan melalui konsol emulator
Setiap instance emulator menyediakan konsol kontrol tempat Anda dapat terhubung, dan
mengeluarkan perintah yang dikhususkan untuk instance tersebut. Gunakan
perintah konsol redir
untuk menyiapkan pengalihan sesuai kebutuhan untuk
instance emulator.
Pertama, tentukan nomor port konsol untuk instance emulator target. Misalnya, nomor port konsol untuk instance emulator pertama yang diluncurkan adalah 5554. Selanjutnya, hubungkan ke konsol instance emulator target, dengan menentukan nomor port konsolnya, sebagai berikut:
telnet localhost 5554
Setelah terhubung, Anda harus mengautentikasi sebelum dapat menyiapkan pengalihan. Baca
Memulai dan menghentikan sesi konsol untuk
mengetahui detail cara melakukannya. Setelah terhubung, gunakan perintah redir
untuk menangani
pengalihan.
Untuk menambahkan pengalihan, gunakan:
redir add <protocol>:<host-port>:<guest-port>
Dengan <protocol>
adalah tcp
atau udp
,
serta <host-port>
dan <guest-port>
menetapkan
pemetaan antara mesin Anda dan sistem yang diemulasi.
Misalnya, perintah berikut akan menyiapkan pengalihan yang menangani semua koneksi TCP masuk ke mesin host (pengembangan) di 127.0.0.1:5000 dan meneruskannya ke sistem yang diemulasikan di 10.0.2.15:6000:
redir add tcp:5000:6000
Untuk menghapus pengalihan, gunakan perintah redir del
. Agar dapat
mencantumkan semua pengalihan untuk instance tertentu, gunakan redir
list
. Untuk mengetahui informasi selengkapnya tentang hal ini dan perintah konsol lainnya, baca
Mengirim perintah konsol Emulator.
Perhatikan bahwa nomor port dibatasi oleh lingkungan lokal Anda. Hal ini biasanya
berarti Anda tidak dapat menggunakan nomor port host di bawah 1024 tanpa hak
istimewa administrator. Selain itu, Anda tidak akan dapat menyiapkan pengalihan untuk
port host yang sudah digunakan oleh proses lain di mesin Anda. Dalam hal
ini, redir
akan menghasilkan pesan error.
Menyiapkan pengalihan melalui adb
Alat Android Debug Bridge (adb
) menyediakan penerusan port, yaitu cara lain
bagi Anda untuk menyiapkan pengalihan jaringan. Untuk mengetahui informasi selengkapnya, baca artikel Menyiapkan penerusan port dalam
dokumentasi adb
.
Perlu diperhatikan bahwa adb
saat ini tidak menawarkan cara untuk menghapus pengalihan,
kecuali dengan menghentikan server adb
.
Mengonfigurasi setelan DNS emulator
Saat proses memulai, emulator akan membaca daftar server DNS yang saat ini digunakan oleh sistem Anda. Kemudian emulator akan menyimpan alamat IP hingga empat server dalam daftar ini dan menyiapkan alias di alamat 10.0.2.3, 10.0.2.4, 10.0.2.5, dan 10.0.2.6 yang diemulasikan jika perlu.
Di Linux dan macOS, emulator mendapatkan alamat server DNS dengan menguraikan
file /etc/resolv.conf
. Di Windows, emulator mendapatkan
alamat dengan memanggil API GetNetworkParams()
. Perlu dicatat, hal ini
biasanya berarti emulator mengabaikan isi file
"hosts" (/etc/hosts
di Linux/macOS, %WINDOWS%/system32/HOSTS
di Windows).
Saat memulai emulator dari command line, Anda dapat menggunakan
opsi -dns-server <serverList>
untuk menentukan
secara manual alamat server DNS yang akan digunakan, dengan <serverList>
adalah daftar nama server
atau alamat IP yang dipisahkan koma. Anda akan menyadari manfaat opsi ini saat
menghadapi masalah resolusi DNS di jaringan yang diemulasikan (misalnya,
pesan "Error Host Tidak Dikenal" yang muncul ketika menggunakan browser web).
Menggunakan emulator dengan proxy
Di berbagai jaringan perusahaan, koneksi langsung ke internet ditolak oleh administrator jaringan. Namun, koneksi internet harus melewati proxy tertentu. Untuk mengakses internet di jaringan dengan persyaratan proxy, emulator harus mengetahui adanya proxy dan bahwa emulator harus terhubung ke proxy.
Karena sifat HTTP, koneksi server web langsung dan koneksi melalui proxy menyebabkan perbedaan permintaan GET. Emulator secara transparan menulis ulang permintaan GET dari perangkat virtual sebelum berkomunikasi dengan proxy agar berfungsi.
Jika emulator Anda harus mengakses internet melalui server proxy, Anda dapat mengonfigurasi proxy HTTP kustom dari layar Extended controls emulator:
- Saat emulator terbuka, klik More
.
- Klik Settings dan Proxy.
- Tentukan setelan proxy HTTP Anda.
![](https://developer.android.com/static/studio/images/run/emulator-proxy-settings_2x.png?authuser=6&hl=id)
Selain itu, Anda dapat mengonfigurasi proxy dari command line dengan
opsi -http-proxy <proxy>
saat memulai emulator.
Dalam hal ini, tentukan informasi
proxy di <proxy>
dalam salah satu format berikut:
http://<machineName>:<port>
atau
http://<username>:<password>@<machineName>:<port>
Opsi -http-proxy
memaksa emulator menggunakan proxy HTTP atau HTTPS yang ditentukan
untuk semua koneksi TCP ke luar. Pengalihan untuk UDP tidak
didukung.
Cara lain, Anda dapat menentukan variabel lingkungan
http_proxy
dengan nilai yang ingin digunakan untuk
<proxy>
. Dalam hal ini, Anda tidak perlu menentukan nilai untuk
<proxy>
dalam perintah -http-proxy
—emulator
akan memeriksa nilai variabel lingkungan http_proxy
saat
perangkat dinyalakan dan secara otomatis menggunakan nilainya jika ditentukan.
Anda dapat menggunakan opsi -debug-proxy
untuk mendiagnosis masalah
koneksi proxy.
Membuat interkoneksi instance emulator
Agar satu instance emulator dapat berkomunikasi dengan instance lain, siapkan pengalihan jaringan seperti yang dijelaskan di bawah ini.
Asumsikan bahwa lingkungan Anda diwakili sebagai berikut:
- A adalah mesin pengembangan
- B adalah instance emulator pertama dan berjalan di A
- C adalah instance emulator kedua dan juga berjalan di A
Jika Anda ingin menjalankan server di B yang akan dihubungkan ke C, siapkan server seperti berikut:
- Siapkan server di B, yang memproses 10.0.2.15:<serverPort>.
- Di konsol B, siapkan pengalihan dari A:localhost:<localPort> ke B:10.0.2.15:<serverPort>.
- Di C, minta klien agar terhubung ke 10.0.2.2:<localPort>.
Misalnya, jika Anda ingin menjalankan server HTTP, pilih
<serverPort>
sebagai 80 dan <localPort>
sebagai
8080:
- B memproses di 10.0.2.15:80.
- Di konsol B, terbitkan
redir add tcp:8080:80.
- C terhubung ke 10.0.2.2:8080.
Mengirim panggilan suara atau SMS ke instance emulator lain
Emulator akan otomatis meneruskan panggilan suara dan SMS yang disimulasikan dari satu instance ke instance lainnya. Untuk mengirim panggilan suara atau SMS, gunakan aplikasi telepon atau aplikasi SMS, dari salah satu emulator.
Untuk memulai panggilan suara yang disimulasikan ke instance emulator lain:
- Buka aplikasi telepon pada instance emulator asal.
Untuk nomor yang akan dihubungi, masukkan nomor port konsol instance target.
Anda dapat menentukan nomor port konsol dari instance target dengan memeriksa judul jendelanya jika berjalan di jendela terpisah, tetapi hal ini tidak berlaku jika berjalan di jendela alat. Nomor port konsol dilaporkan sebagai "Android Emulator (<port>)".
Selain itu, perintah
adb devices
akan mencetak daftar perangkat virtual yang berjalan beserta nomor port konsolnya. Untuk mengetahui informasi selengkapnya, baca Kueri untuk perangkat.- Klik tombol panggil. Panggilan masuk baru akan muncul pada instance emulator target.
Untuk mengirim pesan SMS ke instance emulator lain:
- Luncurkan aplikasi SMS, jika tersedia.
- Tentukan nomor port konsol dari instance emulator target sebagai alamat SMS.
- Masukkan teks pesan.
- Kirim pesan. Pesan akan terkirim ke instance emulator target.
Anda juga dapat terhubung ke konsol emulator untuk menyimulasikan panggilan suara atau SMS yang masuk. Untuk mengetahui informasi selengkapnya, lihat Emulasi Telepon dan Emulasi SMS.