Membangun emulator cloud Anda sendiri

Halaman ini menjelaskan cara menjalankan AAOS Emulator sebagai Layanan Web dan menjalankannya di browser web agar dapat diakses dari jarak jauh oleh pengguna. Tindakan ini memberikan referensi yang memadai dan berkelanjutan melalui Compute Engine Google Cloud. Namun, Anda dapat menggunakan layanan ini di platform cloud publik atau pribadi pilihan Anda.

Tujuan

Konfigurasi dan penyiapan terpusat ini membuat AAOS Emulator dapat diakses oleh seluruh perusahaan, pemasok, dan developer yang bekerja dari rumah. Dengan demikian, pengelolaan dan upgrade AAOS Emulator menjadi lebih efisien ke versi baru dan menghilangkan waktu yang diperlukan untuk menyiapkan dan mengelola mesin lokal untuk setiap pengguna. Solusi ini mengoptimalkan penggunaan resource hardware dan memungkinkan lingkungan pengembangan aplikasi dengan biaya lebih rendah. Misalnya, untuk tujuan:

  • Riset pengguna, peninjauan pengalaman pengguna, dukungan pelanggan, dan pelatihan.
  • Demo kepada calon pelanggan dan di saluran penjualan.
  • Uji, validasi, dan bahkan debug aplikasi (termasuk build HMI OEM harian) dalam skala besar. Pertimbangkan Emulator sebagai pengganti penggunaan test bench untuk mengembangkan aplikasi.
  • Agen pusat layanan telepon pelanggan OEM memiliki UI HU yang seragam dan mudah diakses.

Ada banyak manfaat menggunakan AAOS Emulator:

  • Gunakan skrip penyiapan untuk membuat Emulator AAOS kustom dan berbasis cloud (emulator cloud).
  • Build image AAOS Cloud Emulator yang disesuaikan untuk instance VM:
    • Siap menyiapkan emulator berbasis cloud.
    • Image AVD AAOS publik yang tersedia bagi pembuat layanan untuk memulai AVD AAOS dengan perintah. Misalnya, image AVD OEM publik sebagai sampel untuk diadaptasi dan diterapkan oleh partner.

Arsitektur

Arsitektur contoh emulator cloud diilustrasikan di bawah. Layanan minimal yang layak pertama Anda akan berfungsi dengan menambahkan image AVD OEM Anda sendiri.

Gambar 1. Arsitektur AVD cloud.

Elemen penyusun emulator utama adalah:

di sini.
Item Tujuan
Android Emulator Instance emulator menghosting image AVD
Jembatan goldfish-webrtc Aplikasi Linux untuk menyediakan komunikasi antara aplikasi react dan Emulator AAOS
android-emulator-webrtc Aplikasi React untuk menampilkan UI Emulator di browser web. React juga merekam peristiwa input pengguna dan mengirimkannya kembali ke server.
Skrip Penampung Android Emulator Skrip Python untuk mengelola dan membuat image dan container Docker untuk modul software di atas.
Membuat token untuk mengelola izin akses emulator.
Mengaktifkan server Membuat koneksi langsung WebRTC antara klien dan server. Server turn-on hanya diperlukan saat layanan Emulator berjalan di balik firewall atau proxy.
Envoy

Layanan proxy untuk:

  • Menyediakan HTTPS menggunakan sertifikat yang ditandatangani sendiri.
  • Alihkan traffic di port 80 (http) ke port 443 (https).
  • Berfungsi sebagai proxy gRPC untuk emulator.
  • Verifikasi token untuk mengizinkan akses ke endpoint gRPC emulator.
  • Alihkan 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 project .
  3. Aktifkan API.

Membuat VM Linux di GCE

1. Mengaktifkan virtualisasi bertingkat

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

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

2. Membuat disk yang dapat di-booting Ubuntu-1804-lts

  1. Buka Cloud Console.
  2. Pilih project GCP.
  3. Buka menu Navigation, lalu pilih Compute Engine > Disks > Create Disk.
    1. Berikan 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 (100 GB atau lebih besar direkomendasikan).

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

3. Membuat 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
    • Tetapkan Zona Disk ke zona tempat Anda membuat disk.
    • Tetapkan 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 > Instance VM.

    Gambar 3. Buat instance VM.

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

5. Mengonfigurasi firewall untuk membuka port 80 dan 443

  1. Buka Cloud Console.
  2. pilih project GCP.
  3. Buka Navigation Menu > Compute Engine > VM instance > Set up firewall rule.

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.
    sudo apt install android-sdk
    

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

  3. Untuk mengonfirmasi bahwa CPU mendukung virtualisasi hardware (perintah akan menghasilkan angka non-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 memverifikasi bahwa KVM berfungsi:
    sudo apt install cpu-checker
    kvm-ok
    
    Outputnya akan menjadi:
    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 penampung yang dihosting

  1. Untuk memverifikasi penginstalan, jalankan penampung Android Emulator yang dihosting dari repositori publik. Anda dapat menemukan detail tentang penampung di sini. Anda kini dapat menjalankan penampung ini tanpa mem-build-nya. 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 penampung (jika tidak tersedia secara lokal) dan meluncurkannya.

  2. Saat penampung diluncurkan, hubungkan ke perangkat dengan mengonfigurasi ADB dengan cara yang sama seperti menghubungkan AVD di host lokal. Contoh:
    adb connect localhost:5555
    adb devices
    
    Outputnya akan menjadi:
    List of devices attached
    localhost:5555 device

Menyiapkan layanan AAOS Emulator

Untuk menyiapkan layanan Emulator:

  1. Instal skrip penampung 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:
    emu-docker -h
    
  3. Untuk membuat container Docker, setujui perjanjian lisensi.
  4. Build container Docker AAOS Emulator.
  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. Buat Penampung Web dan tetapkan nama pengguna dan 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 link berikut untuk mengaksesnya 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 memvalidasinya, lihat Menjalankan server web Apache dasar.

Menyiapkan server belokan

Anda dapat selalu menggunakan server giliran Anda sendiri. Berikut adalah contoh pada instance VM Google Cloud.

Catatan: Agar server turn berfungsi di instance VM Google Cloud, pastikan untuk mengonfigurasi aturan firewall VM guna 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 server turn, nama pengguna, dan kredensial 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