Menyiapkan jaringan Android Emulator

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:

  1. Saat emulator terbuka, klik More .
  2. Klik Settings dan Proxy.
  3. Tentukan setelan proxy HTTP Anda.

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:

  1. Siapkan server di B, yang memproses 10.0.2.15:<serverPort>.
  2. Di konsol B, siapkan pengalihan dari A:localhost:<localPort> ke B:10.0.2.15:<serverPort>.
  3. 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:

  1. Buka aplikasi telepon pada instance emulator asal.
  2. 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.

  3. Klik tombol panggil. Panggilan masuk baru akan muncul pada instance emulator target.

Untuk mengirim pesan SMS ke instance emulator lain:

  1. Luncurkan aplikasi SMS, jika tersedia.
  2. Tentukan nomor port konsol dari instance emulator target sebagai alamat SMS.
  3. Masukkan teks pesan.
  4. Kirim pesan. Pesan akan terkirim ke instance emulator target.
  5. 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.