本文介紹瞭如何將AAOS Emulator作為 Web 服務運行並在 Web 瀏覽器中運行,以使用戶可以遠程訪問它。這樣做通過 Google Cloud Compute Engine提供了一個端到端的、最低限度可行的參考。也就是說,您可以在您選擇的任何公共或私有云平台上使用此服務。
目的
這種集中配置和設置使整個公司、供應商和在家工作的開發人員都可以訪問 AAOS 仿真器。這樣做可以更有效地管理和升級 AAOS Emulator 到新版本,並消除為單個用戶設置和管理本地計算機所需的時間。該解決方案優化了硬件資源的使用,並實現了成本更低的應用程序開發環境。例如,出於以下目的:
- 用戶研究、用戶體驗審查、客戶支持和培訓。
- 向潛在客戶和銷售渠道進行演示。
- 大規模測試、驗證甚至調試應用程序(包括每日 OEM HMI 構建)。將模擬器視為用於開發應用程序的測試台的替代品。
- OEM 客戶呼叫中心座席擁有統一、易於訪問的 HU UI。
使用 AAOS 模擬器的好處有很多:
- 使用設置腳本創建自定義和基於雲的 AAOS 模擬器(雲模擬器)。
- 為 VM 實例構建定制的 AAOS Cloud Emulator 映像:
- 準備好基於雲的模擬器的設置。
- 公共 AAOS AVD 映像可供服務創建者使用命令啟動 AAOS AVD。例如,將公開的 OEM AVD 圖像作為樣本供合作夥伴進行適配和應用。
建築學
雲模擬器示例的架構如下圖所示。您的第一個最小可行服務將通過添加您自己的 OEM AVD 圖像來工作。
圖 1.雲 AVD 架構
關鍵的模擬器構建塊是:
物品 | 目的 |
---|---|
安卓模擬器 | 模擬器實例託管 AVD 圖像 |
Goldfish-webrtc 網橋 | Linux 應用程序提供 react 應用程序和 AAOS 模擬器之間的通信 |
安卓模擬器-webrtc | React應用程序以在 Web 瀏覽器中顯示 Emulator UI。 React 還捕獲用戶輸入事件並將它們發送回服務器。 |
Android 模擬器容器腳本 | 用於管理和創建上述軟件模塊的 Docker 映像和容器的 Python 腳本。 |
JWT 服務(JSON Web Token 服務) | 生成令牌以管理模擬器的訪問權限。 |
轉服務器 | 在客戶端和服務器之間建立 WebRTC 直接連接。僅當 Emulator 服務在防火牆或代理後運行時才需要 Turn server。 |
使者 | 代理服務:
|
在雲 VM 上設置模擬器
要創建 GCP 項目:
- 轉到 Google Cloud Console 並選擇一個項目。
- 要確認已為您的 GCP 項目啟用結算功能,請參閱為項目啟用、禁用或更改結算。
- 啟用 API 。
在 GCE 中創建 Linux VM
1.啟用嵌套虛擬化
默認情況下,在項目、文件夾或組織級別允許嵌套虛擬化。除非您的組織中有人禁用了嵌套虛擬化,否則您無需執行任何操作來啟用它。
- 使用gcloud 命令行工具確認允許嵌套虛擬化:
gcloud beta resource-manager org-policies describe \ constraints/compute.disableNestedVirtualization --effective --project=[PROJECT_ID]
2.創建Ubuntu-1804-lts啟動盤
- 轉到雲控制台。
- 選擇 GCP 項目。
- 轉到導航菜單 > 計算引擎 > 磁盤 > 創建磁盤。
- 提供磁盤名稱。例如,
ubuntu1804lts
- 選擇區域和區域。要支持嵌套虛擬化,請確保您選擇的區域和區域支持 Haswell(或更高版本)處理器。要了解更多信息,請參閱區域和區域。
- 選擇
ubuntu-1804-bionic-v20210211
的源鏡像 - 設置適當的磁盤大小(推薦 100GB 或更大)。
- 提供磁盤名稱。例如,
圖 1.創建 Ubuntu 可啟動磁盤
3. 使用特殊許可證密鑰創建自定義映像以啟用 VMX
- 轉到Cloud Console 。
- 打開 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. 使用自定義鏡像創建虛擬機實例
- 轉到雲控制台。
- 選擇 GCP 項目。
- 轉到導航菜單 > 計算引擎 > 虛擬機實例。
圖 1.創建 VM 實例
- 輸入實例名稱。例如,
aaosemulator
- 選擇所需的機器系列和類型。確保機器包含四個 vCPU 和 16 GB 內存(或更多)。
- 選擇 CPU 平台為 Intel Cascade Lake(或更高版本)。
- 將啟動盤更改為上一步中創建的映像。
- 啟用防火牆:
- 允許 HTTP 流量
- 允許 HTTPS 流量
5.配置防火牆開放80和443端口
- 轉到雲控制台。
- 選擇 GCP 項目。
- 轉到導航菜單 > 計算引擎 > 虛擬機實例 > 設置防火牆規則。
在 VM 上安裝所需的軟件
- 安裝 Python 3 和 Python3-env:
sudo apt update sudo apt install python3 sudo apt-get install python3-venv
- 安裝路徑上可用的Android SDK和 ADB。
sudo apt install android-sdk
要安裝 Docker 和 Docker-compose,請參閱Docker和Docker-compose 。確保您可以以非 root 用戶身份運行它們。
- 確認 CPU 支持硬件虛擬化(該命令應生成非零數字):
egrep -c '(vmx|svm)' /proc/cpuinfo
- 安裝內核虛擬機 (KVM)。要安裝 KVM,請運行:
sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
- 驗證 KVM 是否正常工作:
sudo apt install cpu-checker kvm-ok
輸出應為:INFO: /dev/kvm exists KVM acceleration can be used
- 安裝 Node.js 和 Node Packet Manager (NPM):
sudo apt install nodejs npm
啟動託管容器
- 要驗證安裝,請從公共存儲庫運行託管的 Android Emulator 容器。您可以在此處找到有關容器的詳細信息。您現在可以在不構建它們的情況下運行這些容器。例如:
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
這會拉下容器(如果它在本地不可用)並啟動它。
- 啟動容器後,通過配置 ADB 連接到設備,方法與連接本地主機上的 AVD 相同。例如:
adb connect localhost:5555 adb devices
輸出應該是:List of devices attached localhost:5555 device
設置 AAOS 模擬器服務
要設置模擬器服務:
- 安裝 Android Emulator Docker 容器腳本:
git clone https://github.com/google/android-emulator-container-scripts.git
cd android-emulator-container-script source ./configure.sh
- 這將激活一個虛擬環境並使可執行的 emu-docker 可用。要獲取有關其使用的詳細信息,請啟動它:
emu-docker -h
- 要創建 Docker 容器,請接受許可協議。
- 構建 AAOS 模擬器 Docker 容器。
- 下載版本高於 7154743 的模擬器版本。例如:
sdk-repo-linux-emulator-7154743.zip
- 下載 AAOS 仿真器系統映像。例如,
sdk-repo-linux-system-images-7115454.zip
:emu-docker create <emulator-zip> <system-image-zip>
- 創建 Web 容器並設置遠程訪問的用戶名和密碼。
./create_web_container.sh -p user1,passwd1
- 啟動 AAOS Emulator Web 服務:
docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
您已成功啟動 AAOS 模擬器 Web 服務!使用以下命令在 Web 瀏覽器上訪問它:
https://<VM_External__IP>
故障排除
如果出現與 VM 外部 IP 的連接錯誤,請確保將 VM 設置為允許 HTTP和HTTPS 流量。要驗證這一點,請參閱運行基本的 Apache Web 服務器。
設置轉彎服務器
您始終可以使用自己的回合服務器。下面提供的是 Google Cloud VM 實例上的示例。
注意:要使轉向服務器在 Google Cloud VM 實例上運行,請務必配置 VM 防火牆規則以允許 TCP 和 UDP 端口 3478 和 3479 上的流量。
- 安裝coturn服務器:
sudo apt install coturn systemctl stop coturn echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
- 通過添加以下行
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
修改/etc/turnserver.conf
- 修改 Docker Compose YAML 文件以包含 TURN 配置:
cd android-emulator-container-script nano js/docker/docker-compose-build.yaml
- 在模擬器部分添加以下兩個環境行:
shm_size: 128M expose: - "8554" + environment: + - TURN=printf $SNIPPET
- 使用輪次配置重新啟動 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