本頁面說明如何將 AAOS Emulator 當作網路服務執行,並在網路瀏覽器中執行,讓使用者可透過遠端存取。這樣一來,您就能透過 Google Cloud Compute Engine 取得端對端的最低可行參考資料。不過,您可以選擇在任何公有或私有雲平台上使用這項服務。
目的
透過這項集中設定,整間公司、供應商和在家工作的開發人員都能使用 AAOS Emulator。這樣一來,您就能更有效率地管理 AAOS Emulator 並升級至新版本,也不必為個別使用者設定及管理本機電腦。這項解決方案可最佳化硬體資源的使用方式,並提供成本較低的應用程式開發環境。例如:
- 使用者研究、使用者體驗評估、客戶支援和訓練。
- 向潛在客戶和銷售通路展示產品。
- 大規模測試、驗證,甚至是偵錯應用程式 (包括每日的 OEM HMI 版本)。請考慮將模擬器視為測試台的替代方案,用於開發應用程式。
- 原始設備製造商 (OEM) 客戶服務中心服務專員可使用統一且容易存取的 HU UI。
使用 AAOS Emulator 的好處如下:
- 使用設定指令碼建立自訂的雲端 AAOS Emulator (雲端模擬器)。
- 為 VM 執行個體建構自訂的 AAOS Cloud Emulator 映像檔:
- 雲端模擬器的設定已就緒。
- 服務建立者可使用公開的 AAOS AVD 映像檔,透過指令啟動 AAOS AVD。例如,公開原始設備製造商 (OEM) AVD 映像檔做為合作夥伴可調整及套用的範例。
建築
下圖說明雲端模擬器範例的架構。您可以新增自有的 OEM AVD 圖片,讓第一個最低可行服務運作。
圖 1. 雲端 AVD 架構。
主要模擬器建構模塊如下:
這裡。產品 | 目的 |
---|---|
Android Emulator | 模擬器執行個體會代管 AVD 映像檔 |
Goldfish-WebRTC 橋接器 | Linux 應用程式,可提供 React 應用程式與 AAOS Emulator 之間的通訊 |
android-emulator-webrtc | React 應用程式,可在網路瀏覽器中顯示模擬器 UI。React 也會擷取使用者輸入事件,並將事件傳回伺服器。 |
Android Emulator 容器腳本 | Python 指令碼,用於管理及建立上述軟體模組的 Docker 映像檔和容器。 |
產生權杖,以便管理模擬器的存取權限。 | |
開啟伺服器 | 在用戶端和伺服器之間建立 WebRTC 直接連線。只有在防火牆或 Proxy 後方執行模擬器服務時,才需要使用 Turn 伺服器。 |
Envoy | 提供以下 Proxy 服務:
|
在雲端 VM 上設定模擬器
如要建立 GCP 專案,請按照下列指示操作:
- 前往 Google Cloud 控制台,然後選取專案。
- 如要確認 Google Cloud 專案已啟用計費功能,請參閱「啟用、停用或變更專案計費功能 」。
- 啟用 API。
在 GCE 中建立 Linux VM
1. 啟用巢狀虛擬化
根據預設,系統會在專案、資料夾或機構層級允許巢狀虛擬化。除非貴機構的某人已停用巢狀虛擬化,否則您無須採取任何行動即可啟用。
- 使用 gcloud 指令列工具確認是否允許巢狀虛擬化:
gcloud beta resource-manager org-policies describe \ constraints/compute.disableNestedVirtualization --effective --project=[PROJECT_ID]
2. 建立 Ubuntu-1804-lts 可開機磁碟
- 前往 Cloud 控制台。
- 選取 GCP 專案。
- 前往「Navigation」選單,依序選取「Compute Engine」>「Disks」>「Create Disk」。
- 提供磁碟名稱。例如:
ubuntu1804lts
- 選取區域和可用區。如要支援巢狀虛擬化,請確認您選取的地區和區域支援 Haswell (或更新) 處理器。詳情請參閱「地區和區域」。
- 選取
ubuntu-1804-bionic-v20210211
的來源圖片 - 設定適當的磁碟大小 (建議為 100 GB 以上)。
- 提供磁碟名稱。例如:
圖 2. 建立 Ubuntu 可開機磁碟。
3. 使用特殊授權金鑰建立自訂映像檔,以便啟用 VMX
- 前往 Cloud 控制台。
- 開啟 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 執行個體
- 前往 Cloud 控制台。
- 選取 GCP 專案。
- 依序前往「導覽選單」>「Compute Engine」>「VM 執行個體」。
圖 3. 建立 VM 執行個體。
- 輸入執行個體名稱。例如:
aaosemulator
- 選取所需的機器系列和類型。請確認機器含有四個 vCPU 和 16 GB 以上的記憶體。
- 選取 CPU 平台為 Intel Cascade Lake (或更高版本)。
- 將開機磁碟變更為先前步驟中建立的映像檔。
- 啟用防火牆:
- 允許 HTTP 流量
- 允許 HTTPS 流量
5. 設定防火牆以開啟通訊埠 80 和 443
- 前往 Cloud 控制台。
- 選取 GCP 專案。
- 依序前往「導覽選單」>「Compute Engine」>「VM 執行個體」>「設定防火牆規則」。
在 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。請確認您可以以非超級使用者身分執行這些指令。
- 如要確認 CPU 支援硬體虛擬化 (指令應會產生非零數字):
egrep -c '(vmx|svm)' /proc/cpuinfo
- 安裝 Kernel Virtual Machine (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
這會下載容器 (如果本機沒有) 並啟動。
- 啟動容器時,請按照與在本機主機上連線至 AVD 相同的方式設定 ADB,以便連線至裝置。例如:
輸出內容應如下所示:adb connect localhost:5555 adb devices
List of devices attached localhost:5555 device
設定 AAOS Emulator 服務
如要設定模擬器服務,請按照下列步驟操作:
- 安裝 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 Emulator 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 Service:
docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
您已成功啟動 AAOS Emulator 網路服務!使用下列方式在網路瀏覽器中存取:
https://<VM_External__IP>
疑難排解
如果發生 VM 外部 IP 連線錯誤,請確認 VM 已設定為允許 HTTP 和 HTTPS 流量。如要驗證這項資訊,請參閱「執行基本 Apache 網路伺服器」。
設定轉換伺服器
您隨時可以使用自己的轉換伺服器。以下提供 Google Cloud VM 執行個體的範例。
注意:如要讓轉換伺服器在 Google Cloud VM 執行個體上運作,請務必設定 VM 防火牆規則,允許通訊埠 3478 和 3479 的 TCP 和 UDP 流量。
- 安裝 coturn 伺服器:
sudo apt install coturn systemctl stop coturn echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
- 新增下列指令行來修改
/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
- 修改 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