Membangun emulator cloud Anda sendiri

Halaman ini menjelaskan cara menjalankan Emulator AAOS sebagai Layanan Web dan menjalankannya di {i>browser <i}web untuk membuatnya dapat diakses dari jarak jauh oleh pengguna. Dengan melakukannya, Anda akan mendapatkan referensi minimal via Google Cloud Compute Engine. Meskipun demikian, Anda dapat menggunakan layanan ini di platform cloud publik atau pribadi pilihan Anda.

Tujuan

Konfigurasi dan pengaturan terpusat ini membuat Emulator AAOS dapat diakses oleh seluruh perusahaan, pemasok, dan pengembang yang bekerja dari rumah. Tindakan ini akan membuat pengelolaan dan upgrade menjadi lebih efisien Emulator AAOS ke versi baru dan menghemat waktu yang diperlukan untuk menyiapkan dan mengelola komputer lokal untuk pengguna individu. Solusi ini mengoptimalkan penggunaan sumber daya perangkat keras dan memungkinkan yang lebih rendah biaya untuk pengembangan aplikasi. Misalnya, untuk tujuan:

  • Riset pengguna, ulasan pengalaman pengguna, dukungan pelanggan, dan pelatihan.
  • Demo untuk calon pelanggan dan di saluran penjualan.
  • Menguji, memvalidasi, dan bahkan men-debug aplikasi (termasuk build HMI OEM harian) dalam skala besar. Pertimbangkan Emulator sebagai pengganti bangku pengujian untuk mengembangkan aplikasi.
  • Agen pusat panggilan pelanggan OEM memiliki UI HU yang seragam dan mudah diakses.

Manfaat menggunakan Emulator AAOS sangat banyak:

  • Menggunakan skrip penyiapan untuk membuat Emulator AAOS berbasis cloud yang disesuaikan (emulator cloud).
  • Bangun image AAOS Cloud Emulator yang disesuaikan untuk instance VM:
    • Penyiapan emulator berbasis cloud sudah siap.
    • Image AVD AAOS publik tersedia bagi pembuat layanan untuk memulai AVD AAOS dengan perintah. Misalnya, image AVD OEM publik sebagai contoh untuk diadaptasi dan diterapkan oleh partner.

Arsitektur

Arsitektur contoh emulator cloud diilustrasikan di bawah ini. Pertama Anda akan berfungsi minimal dengan menambahkan image AVD OEM Anda sendiri.

Gambar 1. Arsitektur Cloud AVD.

Elemen penyusun emulator utama adalah:

di sini.
Item Tujuan
Android Emulator Instance emulator menghosting gambar AVD
Jembatan ikan mas-webrtc Aplikasi Linux untuk menyediakan komunikasi antara aplikasi reaksi dan Emulator AAOS
android-emulator-webrtc Aplikasi React untuk menampilkan UI Emulator di web browser. React juga menangkap peristiwa input pengguna dan mengirimkannya kembali ke server.
Skrip Penampung Android Emulator Skrip Python untuk mengelola dan membuat image serta container Docker untuk modul software di atas.
Menghasilkan token untuk mengelola izin akses emulator.
Ubah server Membuat koneksi langsung WebRTC antara klien dan server. Ubah server diperlukan hanya saat layanan Emulator berjalan di belakang firewall atau proxy.
Envoy

Layanan proxy untuk:

  • Menyediakan HTTPS menggunakan sertifikat yang ditandatangani sendiri.
  • Alihkan traffic di port 80 (http) ke port 443 (https).
  • Bertindak sebagai proxy gRPC untuk emulator.
  • Verifikasi token untuk mengizinkan akses ke endpoint gRPC emulator.
  • Mengalihkan permintaan lain ke komponen Nginx, yang menghosting aplikasi React.

Menyiapkan emulator di VM cloud

Untuk membuat project GCP:

  1. Buka Konsol Google Cloud dan Pilih Project.
  2. Untuk mengonfirmasi bahwa penagihan diaktifkan untuk project Google Cloud Anda, lihat Mengaktifkan, menonaktifkan, atau mengubah penagihan untuk suatu project .
  3. Mengaktifkan API.

Buat VM Linux di GCE

1. Aktifkan virtualisasi bertingkat

Secara default, virtualisasi bertingkat diizinkan di level project, folder, atau organisasi. Kecuali jika seseorang di organisasi Anda memiliki menonaktifkan virtualisasi bertingkat, Anda tidak perlu melakukan apa pun untuk mengaktifkannya.

  1. Menggunakan alat command line gcloud untuk mengonfirmasi bahwa Virtualisasi Bertingkat diizinkan:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. Membuat {i>disk<i} yang dapat di-{i>booting<i} Ubuntu-1804-lts

  1. Buka Konsol Cloud.
  2. Pilih project GCP.
  3. Buka menu Navigation dan pilih Compute Engine > Disk > Create Disk.
    1. Masukkan nama disk. Misalnya, ubuntu1804lts
    2. Pilih Region dan Zona. Untuk mendukung Virtualisasi Bertingkat, pastikan Region dan Zona yang Anda pilih mendukung prosesor Haswell (atau yang lebih baru). Untuk mempelajari lebih lanjut, lihat Region dan Zona.
    3. Pilih gambar sumber ubuntu-1804-bionic-v20210211
    4. Tetapkan ukuran disk yang sesuai (sebaiknya 100 GB atau lebih besar).

Gambar 2. Membuat disk yang dapat di-booting Ubuntu.

3. Buat image kustom dengan kunci lisensi khusus untuk mengaktifkan VMX

  1. Buka Cloud Console.
  2. Buka Cloud Shell dan gunakan perintah berikut:
    gcloud compute images create [IMAGE NAME] --source-disk-zone [DISK ZONE] --source-disk [DISK NAME] \
      --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    
    • Masukkan Nama gambar. Misalnya, aaos-emulator-image
    • Setel Zona Disk ke zona tempat Anda membuat disk.
    • Setel nama disk ke nama yang Anda gunakan untuk membuat disk.

    Contoh:

    gcloud compute images create aaos-emulator-image --source-disk-zone us-central1-a \
        --source-disk ubuntu1804lts \
        --licenses \
        "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    

Untuk mengetahui detailnya, lihat Instance VM Virtualisasi Bertingkat.

4. Membuat instance VM menggunakan image yang disesuaikan

  1. Buka Cloud Console.
  2. Pilih project GCP.
  3. Buka Menu Navigasi > Compute Engine > di seluruh instance VM.

    Gambar 3. Membuat instance VM.

  4. Masukkan nama instance. Misalnya, aaosemulator
  5. Pilih kelompok dan jenis mesin yang diinginkan. Pastikan mesin berisi empat vCPU dan Memori 16 GB (atau lebih).
  6. Pilih platform CPU untuk Intel Cascade Lake (atau yang lebih baru).
  7. Ubah boot disk ke image yang dibuat di langkah sebelumnya.
  8. Aktifkan Firewall untuk:
    • Mengizinkan traffic HTTP
    • Izinkan traffic HTTPS

5. Konfigurasi firewall untuk membuka port 80 dan 443

  1. Buka Cloud Console.
  2. memilih project GCP.
  3. Buka Menu Navigasi > Compute Engine > Instance VM > Siapkan aturan firewall.

Menginstal software yang diperlukan di VM

  1. Instal Python 3 dan Python3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. Instal Android SDK dan ADB yang tersedia di jalur tersebut.
    sudo apt install android-sdk
    

    Untuk menginstal Docker dan Docker-compose, lihat Docker dan Docker-compose. Pastikan Anda dapat menjalankan pengguna tersebut sebagai pengguna non-root.

  3. Untuk memastikan CPU mendukung virtualisasi perangkat keras (perintah harus menghasilkan angka bukan nol):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Instal Kernel Virtual Machine (KVM). Untuk menginstal KVM, jalankan:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. Untuk memastikan KVM berfungsi:
    sudo apt install cpu-checker
    kvm-ok
    
    Output harus berupa:
    INFO: /dev/kvm exists
    KVM acceleration can be used
  6. Untuk menginstal Node.js dan Node Packet Manager (NPM):
    sudo apt install nodejs npm
    

Memulai container yang dihosting

  1. Untuk memverifikasi penginstalan, jalankan container Android Emulator yang dihosting dari publik repositori resource. Anda dapat menemukan detail tentang container di sini. Sekarang Anda dapat menjalankan container ini tanpa membangunnya. Contoh:
    docker run \
      -e ADBKEY="$(cat ~/.android/adbkey)" \
      --device /dev/kvm \
      --publish 8554:8554/tcp \
      --publish 5555:5555/tcp  \
      us-docker.pkg.dev/android-emulator-268719/images/30-google-x64:30.1.2
    

    Tindakan ini akan menarik container ke bawah (jika tidak tersedia secara lokal) dan meluncurkannya.

  2. Saat container diluncurkan, hubungkan ke perangkat dengan mengonfigurasi ADB menggunakan cara yang sama sebagai menghubungkan AVD pada {i>host<i} lokal. Contoh:
    adb connect localhost:5555
    adb devices
    
    Output harus berupa:
    List of devices attached
    localhost:5555 device

Menyiapkan layanan Emulator AAOS

Untuk menyiapkan layanan Emulator:

  1. Instal skrip container Docker Android Emulator:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. Tindakan ini akan mengaktifkan lingkungan virtual dan menyediakan emu-docker yang dapat dieksekusi. Untuk mendapatkan informasi mendetail tentang penggunaannya, luncurkan aplikasi:
    emu-docker -h
    
  3. Untuk membuat container Docker, setujui perjanjian lisensi.
  4. Membangun container Docker Emulator AAOS.
  5. Download build emulator yang lebih baru dari versi 7154743. Contoh:
    sdk-repo-linux-emulator-7154743.zip
    
  6. Download image sistem emulator AAOS. Misalnya, sdk-repo-linux-system-images-7115454.zip:
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. Membuat Penampung Web dan menetapkan nama pengguna serta sandi untuk akses jarak jauh.
    ./create_web_container.sh -p user1,passwd1
    
  8. Mulai Layanan Web Emulator AAOS:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

Anda berhasil memulai Layanan Web Emulator AAOS. Gunakan hal berikut untuk mengakses di browser web:

https://<VM_External__IP>

Pemecahan masalah

Jika terjadi error koneksi ke IP eksternal VM, pastikan VM disiapkan untuk mengizinkan traffic HTTP dan HTTPS. Untuk memvalidasi ini, lihat Menjalankan server web Apache dasar.

Menyiapkan server pengalihan

Anda selalu bisa menggunakan server giliran Anda sendiri. Di bawah ini adalah contoh VM Google Cloud di instance Compute Engine.

Catatan: Agar server pengalihan berfungsi pada instance VM Google Cloud, pastikan mengonfigurasi aturan firewall VM untuk mengizinkan traffic di port TCP dan UDP 3478 dan 3479.

  1. Instal server coturn:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. Ubah /etc/turnserver.conf dengan menambahkan baris berikut:
    lt-cred-mech
    #set your realm name
    realm=test
    #coturn username and password
    user=test:test123
    # external-ip=<VM-Public-IP>/<VM-Private-IP>
    external-ip=34.193.52.134/10.128.0.2
    
    systemctl start coturn
    
  3. Ubah file YAML Docker Compose untuk menyertakan konfigurasi TURN:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. Tambahkan dua baris lingkungan berikut di bagian emulator:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
  5. Mulai ulang layanan Emulator AAOS dengan konfigurasi belokan. Pastikan untuk mengganti IP, nama pengguna, dan kredensial server pengalihan di bawah dengan milik Anda sendiri:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up