Menyiapkan jaringan Android Emulator

Emulator menyediakan kemampuan jaringan serbaguna yang dapat digunakan untuk menyiapkan lingkungan pengujian dan pemodelan kompleks untuk aplikasi Anda. Bagian berikut ini memperkenalkan arsitektur dan kemampuan jaringan emulator.

Ruang alamat jaringan

Setiap instance emulator berjalan di belakang layanan router/firewall virtual yang mengisolasinya dari antarmuka dan setelan jaringan mesin pengembangan Anda, serta dari internet. Perangkat yang diemulasikan tidak dapat melihat mesin pengembangan Anda atau instance emulator lainnya pada jaringan tersebut. Sebaliknya, hanya terlihat bahwa perangkat terhubung melalui Ethernet ke router/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 adalah angka. Alamat di dalam ruang ini telah dialokasikan sebelumnya oleh emulator/router sebagai berikut:

Alamat Jaringan Deskripsi
10.0.2.1 Alamat router/gateway
10.0.2.2 Alias khusus untuk antarmuka loopback host Anda (misalnya 127.0.0.1 pada mesin pengembangan Anda)
10.0.2.3 Server DNS pertama
10.0.2.4 / 10.0.2.5 / 10.0.2.6 Server DNS opsional kedua, ketiga, dan keempat (jika ada)
10.0.2.15 Antarmuka jaringan/ethernet perangkat yang diemulasikan
127.0.0.1 Antarmuka loopback perangkat yang diemulasikan

Perhatikan bahwa 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 akan diisolasi oleh router dan tidak dapat saling melihat di jaringan yang sama. Untuk mengetahui informasi tentang cara membiarkan instance emulator berkomunikasi melalui TCP/UDP, baca Menghubungkan Instance Emulator.

Selain itu, perhatikan bahwa alamat 127.0.0.1 pada mesin pengembangan Anda sesuai dengan antarmuka loopback emulator sendiri. Jika ingin mengakses layanan yang berjalan di antarmuka loopback mesin pengembangan (alias 127.0.0.1 di mesin Anda), Anda harus menggunakan alamat khusus 10.0.2.2 sebagai gantinya.

Terakhir, perhatikan bahwa alamat yang telah dialokasikan sebelumnya dari perangkat yang diemulasikan dikhususkan untuk Android Emulator dan mungkin akan sangat berbeda pada perangkat nyata (yang juga sangat mungkin untuk menjalankan proses NAT, khususnya, di belakang router/firewall).

Batas jaringan lokal

Aplikasi Android yang berjalan di emulator dapat terhubung ke jaringan yang tersedia di workstation Anda. Tetapi, 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/router (fisik) lain yang terhubung dengan mesin Anda.

Router virtual emulator harus mampu menangani semua pesan/koneksi TCP dan UDP outbound atas nama perangkat yang diemulasikan, asalkan lingkungan jaringan mesin pengembangan Anda mengizinkan untuk melakukannya. Tidak ada batasan bawaan pada rentang atau nomor port kecuali yang diberlakukan oleh jaringan dan sistem operasi host Anda.

Tergantung 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, Anda perlu menyiapkan pengalihan jaringan pada router virtual. Klien kemudian dapat terhubung ke port tamu yang ditentukan pada router, sementara router mengarahkan traffic ke/dari port tersebut ke port host perangkat yang diemulasikan.

Untuk menyiapkan pengalihan jaringan, Anda membuat pemetaan alamat/port host dan tamu pada instance emulator. Ada dua cara untuk menyiapkan pengalihan jaringan: menggunakan perintah konsol emulator dan menggunakan fitur adb, seperti yang diuraikan di bawah ini.

Menyiapkan pengalihan melalui Konsol Emulator

Setiap instance emulator menyediakan konsol kontrol tempat Anda dapat terhubung, untuk mengeluarkan perintah yang dikhususkan untuk instance tersebut. Anda dapat menggunakan perintah konsol redir untuk menyiapkan pengalihan seperti yang diperlukan untuk sebuah 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, tentukan nomor port konsolnya, sebagai berikut:

telnet localhost 5554

Setelah terhubung, gunakan perintah redir untuk bekerja dengan pengalihan. Untuk menambahkan pengalihan, gunakan:

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

di mana <protocol> adalah tcp atau udp, serta <host-port> dan <guest-port> masing-masing menyetel pemetaan antara mesin Anda sendiri dan sistem yang diemulasikan.

Misalnya, perintah berikut ini akan menyiapkan pengalihan yang menangani semua koneksi TCP yang masuk ke mesin host Anda (pengembangan) di 127.0.0.1-5000 dan akan meneruskannya ke sistem yang diemulasikan di 10.0.2.15:6000:

redir add tcp:5000:6000

Untuk menghapus pengalihan, Anda dapat menggunakan perintah redir del. Untuk mencantumkan semua pengalihan untuk instance tertentu, Anda dapat menggunakan redir list. Untuk mengetahui informasi selengkapnya tentang hal ini dan perintah konsol lainnya, baca Menggunakan Konsol Emulator.

Perhatikan bahwa nomor port dibatasi oleh lingkungan lokal Anda. Hal ini biasanya berarti Anda tidak dapat menggunakan nomor port host di 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 kasus tersebut, redir akan memunculkan pesan error untuk efek tersebut.

Menyiapkan pengalihan melalui adb

Fitur Android Debug Bridge (adb) menyediakan penerusan port, cara lain bagi Anda untuk menyiapkan pengalihan jaringan. Untuk mengetahui informasi selengkapnya, baca Meneruskan Port dalam dokumentasi adb.

Perhatikan bahwa adb saat ini tidak menawarkan cara apa pun untuk menghapus pengalihan, kecuali dengan mematikan 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 OS X, emulator memperoleh alamat server DNS dengan menguraikan file /etc/resolv.conf. Di Windows, emulator memperoleh alamat dengan memanggil API GetNetworkParams(). Perhatikan bahwa hal ini biasanya berarti emulator mengabaikan konten file "host" Anda (/etc/hosts di Linux/OS X, %WINDOWS%/system32/HOSTS di Windows).

Saat memulai emulator pada command line, Anda juga dapat menggunakan opsi -dns-server <serverList> untuk menentukan alamat server DNS yang akan digunakan secara manual, di mana <serverList> adalah daftar nama server atau alamat IP yang dipisahkan tanda 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

Pada berbagai jaringan perusahaan, koneksi langsung ke internet tidak akan berfungsi (ditolak oleh administrator jaringan), kecuali jika terjadi melalui proxy tertentu. Browser web dan aplikasi perusahaan lainnya telah dikonfigurasikan sebelumnya untuk menggunakan proxy tersebut, sehingga Anda dapat menelusuri web. Untuk aplikasi reguler, seperti emulator, perlu mengetahui adanya proxy dan harus terhubung dengan aplikasi tersebut.

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 berbicara dengan proxy agar berfungsi.

Jika emulator Anda harus mengakses internet melalui server proxy, Anda dapat mengonfigurasi proxy HTTP kustom dari layar Extended controls emulator. Dengan emulator yang terbuka, klik More , lalu klik Settings lalu Proxy. Dari sini, Anda dapat menentukan setelan proxy HTTP Anda sendiri.

Selain itu, Anda dapat mengonfigurasi proxy dari command line dengan opsi -http-proxy <proxy> saat memulai emulator. Dalam hal ini, Anda menentukan informasi proxy pada <proxy> dalam salah satu format ini:

http://<machineName>:<port>

atau

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

Opsi -http-proxy memaksa emulator menggunakan proxy HTTP/HTTPS yang ditentukan untuk semua koneksi TCP keluar. Pengalihan untuk UDP saat ini tidak didukung.

Selain itu, Anda dapat menentukan variabel lingkungan http_proxy ke nilai yang ingin Anda gunakan untuk <proxy>. Dalam hal ini, Anda tidak perlu menentukan nilai untuk <proxy> dalam perintah -http-proxy — emulator memeriksa nilai variabel lingkungan http_proxy saat proses memulai dan menggunakan nilainya secara otomatis, jika ditentukan.

Anda dapat menggunakan opsi -debug-proxy untuk mendiagnosis masalah koneksi proxy.

Interkoneksi instance emulator

Untuk mengizinkan satu instance emulator berkomunikasi dengan yang lain, Anda harus menyiapkan pengalihan jaringan yang diperlukan seperti yang digambarkan di bawah ini.

Anggaplah bahwa lingkungan Anda

  • A adalah mesin pengembangan Anda
  • B adalah instance emulator pertama Anda, berjalan di A
  • C adalah instance emulator kedua Anda, juga berjalan di A

dan Anda ingin menjalankan server di B, yang akan dihubungkan ke C, berikut cara Anda menyiapkannya:

  1. Siapkan server pada 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 ingin menjalankan server HTTP, Anda dapat memilih <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 meneruskan panggilan suara dan SMS yang disimulasikan dari satu instance ke instance lainnya secara otomatis. 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 yang ingin Anda panggil. Anda dapat menentukan nomor port konsol dari instance target dengan memeriksa judul jendelanya, di mana nomor port konsol tersebut dilaporkan sebagai "Android Emulator (<port>).
  3. Tekan "Dial". Panggilan masuk baru akan muncul pada instance emulator target.

Untuk mengirim SMS ke instance emulator lain, buka aplikasi SMS (jika tersedia). Tentukan nomor port konsol instance emulator sebagai alamat SMS, masukkan teks pesan, lalu kirim pesan. Pesan akan terkirim ke instance emulator target.

Anda juga dapat terhubung ke konsol emulator untuk melakukan simulasi panggilan suara atau SMS yang masuk. Untuk mengetahui informasi selengkapnya, baca Emulasi Telepon dan Emulasi SMS.