Z tej strony dowiesz się, jak uruchomić emulację AAOS jako usługę internetową i uruchomić ją w przeglądarce, aby była dostępna dla użytkowników zdalnie. Dzięki temu uzyskasz kompleksowe, minimalnie możliwe do wdrożenia rozwiązanie w Google Cloud Compute Engine. Możesz jednak korzystać z tej usługi na dowolnej wybranej przez siebie platformie publicznej lub prywatnej chmury.
Cel
Ta scentralizowana konfiguracja i ustawienie sprawiają, że emulator AAOS jest dostępny dla całej firmy, dostawców i programistów pracujących z domu. Dzięki temu można efektywniej zarządzać emulatorem AAOS i aktualizować go do nowych wersji, a także zaoszczędzić czas potrzebny na konfigurowanie maszyn lokalnych i zarządzanie nimi przez poszczególnych użytkowników. To rozwiązanie optymalizuje wykorzystanie zasobów sprzętowych i umożliwia tworzenie aplikacji w środowisku o niższych kosztach. Na przykład w celu:
- Badania użytkowników, przeglądanie doświadczeń użytkowników, obsługa klienta i szkolenia.
- prezentacje dla potencjalnych klientów i w kanałach sprzedaży;
- testować, sprawdzać i nawet debugować aplikacje (w tym codzienne kompilacje HMI OEM) na dużą skalę. Rozważ użycie emulatora zamiast testów wykonywanych na stanowiskach testowych.
- Pracownicy obsługi klienta OEM w centrum obsługi klienta mają jednolity, łatwy w użyciu interfejs HU.
Emulator AAOS ma wiele zalet:
- Użyj skryptu konfiguracyjnego, aby utworzyć dostosowany emulator AAOS w chmurze (emulator w chmurze).
- Utwórz niestandardowy obraz AAOS Cloud Emulator dla instancji maszyn wirtualnych:
- gotowa konfiguracja emulatora działającego w chmurze.
- Publiczne obrazy AAOS AVD dostępne dla twórcy usługi, aby uruchomić AAOS AVD za pomocą polecenia. Na przykład publiczne obrazy AVD OEM jako przykłady, które partnerzy mogą dostosować i zastosować.
Architektura
Poniżej przedstawiono architekturę przykładowego emulatora chmury. Pierwsza minimalnie wystarczająca usługa będzie działać po dodaniu własnych obrazów OEM AVD.
Rysunek 1. Architektura AVD w chmurze.
Główne elementy składowe emulatora to:
tutaj.Produkt | Cel |
---|---|
Emulator Androida | Instancja emulatora hostuje obrazy AVD |
Most Goldfish-WebRTC | Aplikacja na Linuksa umożliwiająca komunikację między aplikacją React a emulatorem AAOS |
android-emulator-webrtc | Aplikacja React, aby wyświetlić interfejs emulatora w przeglądarce. React rejestruje też zdarzenia wejściowe użytkownika i wysyła je z powrotem na serwer. |
Skrypty kontenera emulatora Androida | skrypty Pythona do zarządzania obrazami i kontenerami Dockera oraz tworzenia ich dla powyższych modułów oprogramowania; |
Generuje tokeny do zarządzania uprawnieniami dostępu emulatora. | |
Włączanie serwera | Ustawia bezpośrednie połączenie WebRTC między klientem a serwerem. Włączanie serwera jest wymagane tylko wtedy, gdy usługa emulatora działa za zaporami ogniowymi lub serwerami proxy. |
Envoy | usługa pośrednicząca:
|
Konfigurowanie emulatora w maszynie wirtualnej w chmurze
Aby utworzyć projekt GCP:
- Otwórz konsolę Google Cloud i wybierz projekt.
- Aby sprawdzić, czy w projekcie Google Cloud włączone są płatności, zapoznaj się z artykułem Włączanie, wyłączanie i zmienianie rozliczeń w projekcie .
- Włącz interfejs API.
Tworzenie maszyny wirtualnej z systemem Linux w GCE
1. Włączanie zagnieżdżonej wirtualizacji
Domyślnie zhierarchizowana wirtualizacja jest dozwolona na poziomie projektu, folderu lub organizacji. Jeśli ktoś z Twojej organizacji nie wyłączył zduplikowanej wirtualizacji, nie musisz nic robić, aby ją włączyć.
- Aby sprawdzić, czy dozwolona jest wirtualizacja zagnieżdżona, użyj narzędzia wiersza poleceń gcloud:
gcloud beta resource-manager org-policies describe \ constraints/compute.disableNestedVirtualization --effective --project=[PROJECT_ID]
2. Tworzenie rozruchowego dysku Ubuntu-1804-lts
- Otwórz Cloud Console.
- Wybierz projekt GCP.
- Otwórz menu Nawigacja i wybierz Compute Engine > Dyski > Utwórz dysk.
- Podaj nazwę dysku. Na przykład:
ubuntu1804lts
- Wybierz region i strefę. Aby umożliwić stosowanie zduplikowanej wirtualizacji, wybierz region i strefę, które obsługują procesory Haswell (lub nowsze). Więcej informacji znajdziesz w artykule Regiony i strefy.
- Wybierz obraz źródłowy
ubuntu-1804-bionic-v20210211
- Ustaw odpowiedni rozmiar dysku (zalecane co najmniej 100 GB).
- Podaj nazwę dysku. Na przykład:
Rysunek 2. Utwórz dysk rozruchowy Ubuntu.
3. Tworzenie obrazu niestandardowego za pomocą specjalnego klucza licencyjnego w celu włączenia VMX
- Otwórz Cloud Console.
- Otwórz Cloud Shell i użyj tego polecenia:
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"
- Wpisz nazwę obrazu. Na przykład:
aaos-emulator-image
- Ustaw opcję Dysk strefy na strefę, w której został utworzony dysk.
- Ustaw nazwę dysku na nazwę użytą do utworzenia dysku.
Przykład:
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"
- Wpisz nazwę obrazu. Na przykład:
Więcej informacji znajdziesz w artykule Nested Virtualization VM Instance (w języku angielskim).
4. Tworzenie instancji maszyny wirtualnej przy użyciu niestandardowego obrazu
- Otwórz Cloud Console.
- Wybierz projekt GCP.
- Kliknij Menu nawigacyjne > Compute Engine > VM instance (Instalacja maszyny wirtualnej).
Rysunek 3. Utwórz maszynę wirtualną.
- Wpisz nazwę instancji. Na przykład:
aaosemulator
- Wybierz odpowiednią rodzinę i typ maszyny. Upewnij się, że maszyna ma 4 procesory wirtualne i co najmniej 16 GB pamięci.
- Wybierz platformę procesora Intel Cascade Lake (lub nowszą).
- Zmień dysk rozruchowy na obraz utworzony w poprzednim kroku.
- Włącz zaporę sieciową:
- Zezwalanie na ruch HTTP
- Zezwalanie na ruch HTTPS
5. Skonfiguruj zaporę sieciową, aby otworzyć porty 80 i 443
- Otwórz Cloud Console.
- wybierz projekt GCP.
- Kliknij Menu nawigacyjne > Compute Engine > instancja maszyny wirtualnej > Skonfiguruj regułę zapory.
Instalowanie wymaganego oprogramowania w maszynie wirtualnej
- Zainstaluj Pythona 3 i Pythona 3-env:
sudo apt update sudo apt install python3 sudo apt-get install python3-venv
- Zainstaluj Android SDK i ADB na ścieżce.
sudo apt install android-sdk
Aby zainstalować Dockera i Docker-compose, zapoznaj się z artykułami Docker i Docker-compose. Upewnij się, że możesz uruchomić te polecenia jako użytkownik inny niż root.
- Aby sprawdzić, czy procesor obsługuje wirtualizację sprzętową (polecenie powinno zwrócić liczbę różną od 0):
egrep -c '(vmx|svm)' /proc/cpuinfo
- Zainstaluj maszynę wirtualną jądra (KVM). Aby zainstalować KVM, uruchom:
sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
- Aby sprawdzić, czy KVM działa:
Wynik:sudo apt install cpu-checker kvm-ok
INFO: /dev/kvm exists KVM acceleration can be used
- Aby zainstalować Node.js i Node Packet Manager (NPM):
sudo apt install nodejs npm
Uruchom hostowane kontenery.
- Aby sprawdzić instalację, uruchom hostowane kontenery emulatora Androida z publicznego repozytorium. Szczegółowe informacje o kontenerach znajdziesz tutaj.
Możesz teraz uruchomić te kontenery bez ich kompilowania. Przykład:
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
W ten sposób pobierasz kontener (jeśli nie jest dostępny lokalnie) i uruchamiasz go.
- Po uruchomieniu kontenera połącz się z urządzeniem, konfigurując ADB w taki sam sposób jak w przypadku połączenia z AVD na lokalnym hoście. Przykład:
Dane wyjściowe powinny wyglądać tak:adb connect localhost:5555 adb devices
List of devices attached localhost:5555 device
Konfigurowanie usługi AAOS Emulator
Aby skonfigurować usługę emulatora:
- Zainstaluj skrypt kontenera Dockera emulatora Androida:
git clone https://github.com/google/android-emulator-container-scripts.git
cd android-emulator-container-script source ./configure.sh
- Spowoduje to aktywowanie środowiska wirtualnego i udostępni plik wykonywalny emu-docker.
Aby uzyskać szczegółowe informacje o jej użyciu, uruchom ją:
emu-docker -h
- Aby utworzyć kontenery Dockera, zaakceptuj umowy licencyjne.
- Utwórz kontener Dockera AAOS Emulator.
- Pobierz wersję emulatora nowszą niż 7154743. Przykład:
sdk-repo-linux-emulator-7154743.zip
- Pobierz obraz systemu emulatora AAOS. Na przykład:
sdk-repo-linux-system-images-7115454.zip
:emu-docker create <emulator-zip> <system-image-zip>
- Utwórz kontenery internetowe i ustaw nazwę użytkownika oraz hasło do dostępu zdalnego.
./create_web_container.sh -p user1,passwd1
- Uruchom usługę internetową emulatora AAOS:
docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
Udało Ci się uruchomić usługę internetową emulatora AAOS. Aby uzyskać do niego dostęp w przeglądarce:
https://<VM_External__IP>
Rozwiązywanie problemów
Jeśli wystąpi błąd połączenia z zewnętrznym adresem IP maszyny wirtualnej, sprawdź, czy maszyna wirtualna jest skonfigurowana tak, aby zezwalać na ruch HTTP i HTTPS. Aby to sprawdzić, zapoznaj się z artykułem Uruchamianie podstawowego serwera WWW Apache.
Konfigurowanie serwera kolejek
Możesz zawsze użyć własnego serwera. Poniżej znajduje się przykład instancji maszyny wirtualnej Google Cloud.
Uwaga: aby serwer turn działał na instancji maszyny wirtualnej Google Cloud, skonfiguruj regułę zapory maszyny wirtualnej tak, aby zezwalała na ruch na portach TCP i UDP 3478 oraz 3479.
- Zainstaluj serwer coturn:
sudo apt install coturn systemctl stop coturn echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
- Zmodyfikuj plik
/etc/turnserver.conf
, dodając te wiersze: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
- Zmodyfikuj plik Docker Compose YAML, aby uwzględnić konfigurację TURN:
cd android-emulator-container-script nano js/docker/docker-compose-build.yaml
- W sekcji emulatora dodaj te 2 wiersze kodu środowiska:
shm_size: 128M expose: - "8554" + environment: + - TURN=printf $SNIPPET
- Ponownie uruchom usługę AAOS Emulator z konfiguracją turn.
Pamiętaj, aby zastąpić podane niżej adresy IP serwera turn, nazwę użytkownika i dane logowania własnymi:
export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}" docker-compose -f js/docker/docker-compose-build.yaml up