打造專屬的雲端模擬器

本頁面說明如何以網路服務的形式執行 AAOS Emulator, 供使用者遠端存取此舉提供了端對端 透過 Google Cloud 取得以最少可行的參考資料 Compute Engine。 不過,這項服務可以在您選擇的公用或私人雲端平台上使用。

目的

這個集中式設定與設定讓全公司都能存取 AAOS 模擬器, 供應商和在家工作的開發人員簡化管理及升級作業 安裝新版本的 AAOS 模擬器後,即可省下設定及管理本機機器所需的時間 提供給個別使用者使用這項解決方案可最佳化硬體資源的使用方式,並支援 成本較低的應用程式開發環境。例如:

  • 使用者研究、使用者體驗審查、客戶服務與訓練。
  • 針對潛在客戶和銷售通路中的示範畫面。
  • 大規模測試、驗證甚至偵錯應用程式 (包括每天推出的原始設備製造商 (OEM) HMI 版本)。您可以考慮使用 將模擬器替代用在開發應用程式的測試長凳。
  • 原始設備製造商 (OEM) 客戶客服中心服務專員會提供統一且易於存取的 HU UI。

使用 AAOS Emulator 有許多優點:

  • 使用設定指令碼建立自訂雲端式 AAOS 模擬器 (雲端模擬器)。
  • 建構 VM 執行個體適用的自訂 AAOS Cloud Emulator 映像檔:
    • 可開始設定雲端式模擬器。
    • 服務創作者可透過以下方式啟動 AAOS AVD 公開 AAOS AVD 映像檔: 指令舉例來說,提供公開 OEM AVD 映像檔做為合作夥伴調整及套用的範例。

建築

雲端模擬器範例的架構如下圖所示。您的第一個 只要使用您自己的 OEM AVD 映像檔,即可使用最小可行的服務。

圖 1. Cloud AVD 架構。

主要模擬器建構模塊如下:

請按這裡
產品 目的
Android Emulator 模擬器執行個體代管 AVD 映像檔
Goldfish-webrtc 橋 Linux 應用程式,用於提供回應應用程式與 AAOS 模擬器之間的通訊
android-emulator-webrtc React 應用程式,在網頁版中顯示模擬器 UI 。React 也會擷取使用者輸入事件,並傳回至伺服器。
Android Emulator 容器指令碼 Python 指令碼可用於管理及建立上述軟體模組的 Docker 映像檔和容器。
產生權杖來管理模擬器存取權限。
轉彎伺服器 在用戶端與伺服器之間建立 WebRTC 直接連線。轉彎伺服器 只有在模擬器服務在防火牆或 Proxy 後方執行時才需要。
Envoy

Proxy 服務:

  • 使用自行簽署的憑證提供 HTTPS。
  • 將通訊埠 80 (http) 的流量重新導向至通訊埠 443 (https)。
  • 做為模擬器的 gRPC Proxy。
  • 驗證權杖以允許存取模擬器 gRPC 端點。
  • 將其他要求重新導向至代管 React 應用程式的 Nginx 元件。

在雲端 VM 上設定模擬器

如要建立 GCP 專案,請按照下列指示操作:

  1. 前往 Google Cloud 控制台 選取專案
  2. 如要確認 Google Cloud 專案已啟用計費功能,請參閱 啟用、停用或變更專案的計費功能
  3. 啟用 API

在 GCE 中建立 Linux VM

1. 啟用巢狀虛擬化功能

根據預設,專案、資料夾或機構層級允許使用巢狀虛擬化功能。 除非貴機構中有人 已停用巢狀虛擬化功能 則不必執行任何操作即可啟用

  1. 使用 gcloud 指令列工具 來確認是否允許巢狀虛擬化:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. 建立 Ubuntu-1804-lts 可開機磁碟

  1. 前往 Cloud 控制台
  2. 選取 GCP 專案。
  3. 前往「導航」「導航」選單,然後選取「Compute Engine」[Compute Engine]磁碟 > 建立磁碟
    1. 提供磁碟名稱。例如:ubuntu1804lts
    2. 選取區域和可用區。如要支援巢狀虛擬化功能,請確認該區域 您選取的可用區則支援 Haswell (或之後版本) 處理器。詳情請參閱: 區域和可用區
    3. 選取「ubuntu-1804-bionic-v20210211」的來源圖片
    4. 設定適當的磁碟大小 (建議設為 100 GB 以上)。

圖 2. 建立 Ubuntu 可開機磁碟。

3. 建立包含特殊授權金鑰的自訂映像檔來啟用 VMX

  1. 前往 Cloud 控制台
  2. 開啟 Cloud Shell 並執行下列指令:
    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"
    
    • 輸入映像檔名稱。例如:aaos-emulator-image
    • 將「磁碟可用區」設為您建立磁碟的區域。
    • 將磁碟名稱設為您用來建立磁碟的名稱。

    例如:

    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"
    

詳情請參閱 巢狀虛擬化 VM 執行個體

4. 使用自訂映像檔建立 VM 執行個體

  1. 前往 Cloud 控制台
  2. 選取 GCP 專案。
  3. 前往導覽選單 >Compute Engine >VM 執行個體

    圖 3. 建立 VM 執行個體。

  4. 輸入執行個體名稱。例如:aaosemulator
  5. 選取需要的機器系列和類型。確認機器包含四個 vCPU 16 GB 以上的記憶體。
  6. 選取 Intel Cascade Lake (或更新版本) 的 CPU 平台。
  7. 將開機磁碟變更為在上一步建立的映像檔。
  8. 為以下項目啟用防火牆:
    • 允許 HTTP 流量
    • 允許 HTTPS 流量

5. 將防火牆設為開啟通訊埠 80 和 443

  1. 前往 Cloud 控制台
  2. 選取 GCP 專案
  3. 前往導覽選單 >Compute Engine >VM 執行個體 >設定防火牆規則。

在 VM 上安裝必要軟體

  1. 安裝 Python 3 和 Python3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. 安裝 Android SDK 和 ADB
    sudo apt install android-sdk
    

    如要安裝 Docker 和 Docker-compose,請參閱 DockerDocker-compose:確保您可以執行 做為非超級使用者

  3. 確認 CPU 支援硬體虛擬化功能 (指令應會產生 非零的數值):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. 安裝核心虛擬機器 (KVM)。如要安裝 KVM,請執行:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. 如要確認 KVM 是否正常運作:
    sudo apt install cpu-checker
    kvm-ok
    
    輸出內容應如下所示:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. 如要安裝 Node.js 和 Node Packet Manager (NPM):
    sudo apt install nodejs npm
    

啟動託管容器

  1. 如要驗證安裝,請公開執行託管的 Android Emulator 容器 Cloud Storage 也提供目錄同步處理功能您可以查看容器中 請按這裡。 您現在可以在不建構容器的情況下執行這些容器。例如:
    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
    

    這項操作會提取並啟動容器 (如未在本機提供)。

  2. 容器啟動後,按照相同的方式設定 ADB,以便連線至裝置 例如連接本機主機上的 AVD。例如:
    adb connect localhost:5555
    adb devices
    
    輸出內容應如下所示:
    List of devices attached
    localhost:5555 device
    

設定 AAOS 模擬器服務

如要設定 Android Emulator 服務,請按照以下步驟操作:

  1. 安裝 Android Emulator Docker 容器指令碼:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. 這項操作會啟用虛擬環境,並提供可執行的 emu-docker。 如要進一步瞭解其用途,請啟動應用程式:
    emu-docker -h
    
  3. 如要建立 Docker 容器,請接受授權協議。
  4. 建構 AAOS 模擬器 Docker 容器。
  5. 下載 7154743 以上版本的模擬器版本。例如:
    sdk-repo-linux-emulator-7154743.zip
    
  6. 下載 AAOS 模擬器系統映像檔。例如: sdk-repo-linux-system-images-7115454.zip:
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. 建立網站容器,並設定遠端存取的使用者名稱和密碼。
    ./create_web_container.sh -p user1,passwd1
    
  8. 啟動 AAOS 模擬器網路服務:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

您已成功啟動 AAOS 模擬器網路服務!請使用下列方式存取 請從網路瀏覽器中載入:

https://<VM_External__IP>

疑難排解

如果 VM 外部 IP 發生連線錯誤,請確認 VM 已設為允許 HTTP「和」HTTPS 流量。如要驗證這項資訊,請參閱 執行基本 Apache 網路伺服器

設定輪轉伺服器

你也可以隨時使用自己的回合伺服器。以下提供一個 Google Cloud VM 的範例 執行個體。

注意:如要讓啟用伺服器在 Google Cloud VM 執行個體上運作,請務必 設定 VM 防火牆規則,允許 TCP 和 UDP 通訊埠 3478 和 3479 的流量。

  1. 安裝 Coturn 伺服器:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. 加入下列程式碼即可修改 /etc/turnserver.conf
    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. 修改 Docker Compose YAML 檔案以加入 TURN 設定:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. 在模擬器區段中新增以下兩個環境行:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. 使用回合設定重新啟動 AAOS Emulator 服務。 請務必將下方的回合伺服器 IP、使用者名稱和憑證替換成您自己的憑證:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up