Bangun emulator cloud Anda sendiri

Halaman ini menjelaskan cara menjalankan Emulator AAOS sebagai Layanan Web dan menjalankannya di browser web agar dapat diakses oleh pengguna dari jarak jauh. Melakukan hal ini akan memberikan referensi menyeluruh dan minimal melalui 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 AAOS Emulator dapat diakses oleh seluruh perusahaan, pemasok, dan pengembang yang bekerja dari rumah. Hal ini akan membuat pengelolaan dan peningkatan Emulator AAOS ke versi baru menjadi lebih efisien dan menghilangkan waktu yang diperlukan untuk menyiapkan dan mengelola mesin lokal untuk pengguna individu. Solusi ini mengoptimalkan penggunaan sumber daya perangkat keras dan memungkinkan lingkungan pengembangan aplikasi berbiaya lebih rendah. Misalnya untuk tujuan:

  • Riset pengguna, tinjauan pengalaman pengguna, dukungan pelanggan, dan pelatihan.
  • Demo ke calon pelanggan dan saluran penjualan.
  • Uji, validasi, dan bahkan debug aplikasi (termasuk build OEM HMI harian) dalam skala besar. Pertimbangkan Emulator sebagai pengganti bangku tes yang digunakan untuk mengembangkan aplikasi.
  • Agen pusat panggilan pelanggan OEM memiliki HU UI yang seragam dan mudah diakses.

Keuntungan menggunakan Emulator AAOS sangat banyak:

  • Gunakan skrip pengaturan untuk membuat Emulator AAOS (emulator cloud) yang disesuaikan dan berbasis cloud.
  • Buat image AAOS Cloud Emulator yang disesuaikan untuk instance VM:
    • Penyiapan emulator berbasis cloud yang siap pakai.
    • Gambar AAOS AVD publik tersedia bagi pembuat layanan untuk memulai AAOS AVD dengan perintah. Misalnya, gambar OEM AVD publik sebagai sampel untuk diadaptasi dan diterapkan oleh mitra.

Arsitektur

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

Gambar 1. Arsitektur Cloud AVD.

Blok penyusun emulator utama adalah:

Di Sini .
Barang Tujuan
Emulator Android Instance emulator menghosting image AVD
Jembatan ikan mas-webrtc Aplikasi Linux untuk menyediakan komunikasi antara aplikasi reaksi dan Emulator AAOS
android-emulator-webrtc Bereaksi aplikasi untuk menampilkan UI Emulator di browser web. React juga menangkap kejadian masukan pengguna dan mengirimkannya kembali ke server.
Skrip Kontainer Emulator Android Skrip Python untuk mengelola dan membuat image dan container Docker untuk modul perangkat lunak di atas.
Menghasilkan token untuk mengelola izin akses emulator.
Putar server Membuat koneksi langsung WebRTC antara klien dan server. Turn server diperlukan hanya ketika layanan Emulator berjalan di belakang firewall atau proxy.
Utusan

Layanan proxy untuk:

  • Berikan HTTPS menggunakan sertifikat yang ditandatangani sendiri.
  • Alihkan lalu lintas pada port 80 (http) ke port 443 (https).
  • Bertindak sebagai proxy gRPC untuk emulator.
  • Verifikasi token untuk mengizinkan akses ke titik akhir gRPC emulator.
  • Arahkan ulang permintaan lain ke komponen Nginx, yang menghosting aplikasi React.

Siapkan emulator di VM cloud

Untuk membuat proyek GCP:

  1. Buka Google Cloud Console dan Pilih Proyek .
  2. Untuk mengonfirmasi bahwa penagihan diaktifkan untuk proyek Google Cloud Anda, lihat Mengaktifkan, menonaktifkan, atau mengubah penagihan untuk suatu proyek .
  3. Aktifkan APInya .

Buat VM Linux di GCE

1. Aktifkan virtualisasi bersarang

Secara default, virtualisasi bertumpuk diperbolehkan di tingkat proyek, folder, atau organisasi. Kecuali seseorang di organisasi Anda telah menonaktifkan virtualisasi bertingkat , Anda tidak perlu melakukan apa pun untuk mengaktifkannya.

  1. Gunakan alat baris perintah gcloud untuk mengonfirmasi bahwa Virtualisasi Bersarang diizinkan:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. Buat disk bootable Ubuntu-1804-lts

  1. Buka Konsol Cloud .
  2. Pilih proyek GCP.
  3. Buka menu Navigasi dan pilih Compute Engine > Disk > Buat Disk .
    1. Berikan nama disk. Misalnya, ubuntu1804lts
    2. Pilih Wilayah dan Zona. Untuk mendukung Virtualisasi Bersarang, pastikan Wilayah dan Zona yang Anda pilih mendukung prosesor Haswell (atau lebih baru). Untuk mempelajari lebih lanjut, lihat Wilayah dan Zona .
    3. Pilih gambar sumber ubuntu-1804-bionic-v20210211
    4. Tetapkan ukuran disk yang sesuai (disarankan 100GB atau lebih besar).

Gambar 2. Membuat disk bootable Ubuntu.

3. Buat gambar khusus dengan kunci lisensi khusus untuk mengaktifkan VMX

  1. Buka Konsol Cloud .
  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
    • Atur Zona Disk ke zona tempat Anda membuat disk.
    • Tetapkan nama disk ke nama yang Anda gunakan untuk membuat disk.

    Misalnya:

    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 Bersarang .

4. Buat instance VM menggunakan gambar yang disesuaikan

  1. Buka Konsol Cloud .
  2. Pilih proyek GCP.
  3. Buka Menu Navigasi > Compute Engine > VM instance.

    Gambar 3. Membuat instance VM.

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

5. Konfigurasikan firewall untuk membuka port 80 dan 443

  1. Buka Konsol Cloud .
  2. pilih proyek GCP.
  3. Buka Menu Navigasi > Compute Engine > VM instance > Siapkan aturan firewall.

Instal perangkat lunak yang diperlukan pada 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 perangkat keras (perintah harus menghasilkan angka bukan nol):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Instal Mesin Virtual Kernel (KVM). Untuk menginstal KVM, jalankan:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. Untuk memverifikasi KVM berfungsi:
    sudo apt install cpu-checker
    kvm-ok
    
    Outputnya harus:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. Untuk menginstal Node.js dan Node Packet Manager (NPM):
    sudo apt install nodejs npm
    

Mulai wadah yang dihosting

  1. Untuk memverifikasi instalasi, jalankan container Android Emulator yang dihosting dari repositori publik. Anda dapat menemukan rincian tentang kontainer di sini . Anda sekarang dapat menjalankan container ini tanpa membuatnya. Misalnya:
    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 kontainer diluncurkan, sambungkan ke perangkat dengan mengonfigurasi ADB dengan cara yang sama seperti menghubungkan AVD pada host lokal. Misalnya:
    adb connect localhost:5555
    adb devices
    
    Outputnya harus:
    List of devices attached
    localhost:5555 device
    

Siapkan layanan Emulator AAOS

Untuk menyiapkan layanan Emulator:

  1. Instal skrip container Android Emulator Docker:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. Ini mengaktifkan lingkungan virtual dan membuat emu-docker yang dapat dieksekusi tersedia. Untuk mendapatkan informasi rinci tentang penggunaannya, luncurkan:
    emu-docker -h
    
  3. Untuk membuat kontainer Docker, terima perjanjian lisensi.
  4. Bangun wadah Docker Emulator AAOS.
  5. Unduh versi emulator yang lebih baru dari versi 7154743. Misalnya:
    sdk-repo-linux-emulator-7154743.zip
    
  6. Unduh image sistem emulator AAOS. Misalnya, sdk-repo-linux-system-images-7115454.zip :
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. Buat Kontainer Web dan atur nama pengguna dan kata 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 telah berhasil memulai Layanan Web Emulator AAOS! Gunakan yang berikut ini untuk mengaksesnya di browser web:

https://<VM_External__IP>

Penyelesaian masalah

Jika terjadi kesalahan koneksi ke IP eksternal VM, pastikan VM diatur untuk mengizinkan lalu lintas HTTP dan HTTPS. Untuk memvalidasinya, lihat Menjalankan server web Apache dasar .

Siapkan server giliran

Anda selalu dapat menggunakan server giliran Anda sendiri. Di bawah ini adalah contoh instance VM Google Cloud.

Catatan: Agar server giliran berfungsi pada instance VM Google Cloud, pastikan untuk mengonfigurasi aturan firewall VM untuk mengizinkan lalu lintas pada 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 Docker Compose YAML 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 giliran. Pastikan untuk mengganti IP server giliran, nama pengguna, dan kredensial di bawah ini 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