Bangun Emulator Cloud Anda Sendiri

Artikel ini menjelaskan cara menjalankan AAOS Emulator sebagai Layanan Web dan menjalankannya di browser web agar dapat diakses pengguna dari jarak jauh. Melakukannya akan memberikan referensi menyeluruh dan minimal yang layak melalui Google Cloud Compute Engine . Karena itu, Anda dapat menggunakan layanan ini di platform cloud publik atau pribadi apa pun pilihan Anda.

Tujuan

Konfigurasi dan pengaturan terpusat ini membuat AAOS Emulator dapat diakses oleh seluruh perusahaan, pemasok, dan pengembang kerja dari rumah. Melakukannya akan membuatnya lebih efisien untuk mengelola dan memutakhirkan AAOS Emulator ke versi baru 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 dengan biaya lebih rendah. Misalnya, untuk tujuan:

  • Riset pengguna, tinjauan pengalaman pengguna, dukungan pelanggan, dan pelatihan.
  • Demo ke pelanggan potensial dan di 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.

Manfaat menggunakan AAOS Emulator sangat banyak:

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

Arsitektur

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

Gambar 1. Arsitektur Cloud AVD

Blok penyusun emulator utama adalah:

Barang Tujuan
Emulator Android 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 browser web. React juga menangkap kejadian input 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.
Layanan JWT (layanan Token Web JSON) Menghasilkan token untuk mengelola izin akses emulator.
Hidupkan 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 ke:

  • Berikan HTTPS menggunakan sertifikat yang ditandatangani sendiri.
  • Arahkan ulang lalu lintas pada port 80 (http) ke port 443 (https).
  • Bertindak sebagai proxy gRPC untuk emulator.
  • Verifikasi token untuk mengizinkan akses ke endpoint gRPC emulator.
  • Arahkan 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 API .

Buat VM Linux di GCE

1. Aktifkan virtualisasi bersarang

Secara default, virtualisasi bertingkat diperbolehkan di tingkat proyek, folder, atau organisasi. Kecuali seseorang di organisasi Anda telah menonaktifkan virtualisasi bersarang , 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 Cloud Console .
  2. Pilih proyek GCP.
  3. Buka menu Navigasi > Mesin Hitung > 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 yang lebih baru). Untuk mempelajari lebih lanjut, lihat Wilayah dan Zona .
    3. Pilih gambar sumber ubuntu-1804-bionic-v20210211
    4. Atur ukuran disk yang sesuai (disarankan 100GB atau lebih besar).

Gambar 1. Buat disk bootable Ubuntu

3. Buat gambar khusus 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
    • Atur Disk Zone ke zona tempat Anda membuat disk.
    • Tetapkan nama disk ke nama yang Anda gunakan untuk membuat disk.

    Sebagai 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 detailnya, lihat Instans VM Virtualisasi Bersarang .

4. Buat instance VM menggunakan gambar yang disesuaikan

  1. Buka Cloud Console .
  2. Pilih proyek GCP.
  3. Buka Menu Navigasi > Compute Engine > Instance VM.

    Gambar 1. Buat instance VM

  4. Masukkan nama instance. 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 untuk menjadi Intel Cascade Lake (atau lebih baru).
  7. Ubah boot disk ke gambar 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 Cloud Console .
  2. pilih proyek GCP.
  3. Buka Menu Navigasi > Compute Engine > Instance VM > 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 menjalankan ini sebagai pengguna non-root .

  3. Untuk mengonfirmasi 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 penginstalan, jalankan wadah Android Emulator yang dihosting dari repositori publik. Anda dapat menemukan detail 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
    

    Ini menarik wadah (jika tidak tersedia secara lokal) dan meluncurkannya.

  2. Saat wadah 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 AAOS Emulator

Untuk menyiapkan layanan Emulator:

  1. Instal skrip wadah 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 mendetail tentang penggunaannya, luncurkan:
    emu-docker -h
    
  3. Untuk membuat wadah Docker, terima perjanjian lisensi.
  4. Bangun wadah AAOS Emulator Docker.
  5. Unduh build emulator setelah versi 7154743. Misalnya:
    sdk-repo-linux-emulator-7154743.zip
    
  6. Unduh citra sistem emulator AAOS. Misalnya, sdk-repo-linux-system-images-7115454.zip : l10n
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. Buat Wadah 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 memvalidasi ini, lihat Menjalankan server web Apache dasar .

Siapkan server giliran

Anda selalu dapat menggunakan server giliran Anda sendiri. Di bawah ini adalah contoh pada 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: l10n
    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. Restart layanan AAOS Emulator dengan konfigurasi belokan. Pastikan untuk mengganti IP turn server, username, dan credential 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