Kendi Bulut Emülatörünüzü Oluşturun

Bu makalede, AAOS Öykünücüsünün bir Web Hizmeti olarak nasıl çalıştırılacağı ve kullanıcılara uzaktan erişilebilmesi için bir web tarayıcısında nasıl çalıştırılacağı anlatılmaktadır. Bunu yapmak, Google Cloud Compute Engine aracılığıyla uçtan uca, minimum düzeyde uygulanabilir bir referans sağlar. Bununla birlikte, bu hizmeti istediğiniz herhangi bir genel veya özel bulut platformunda kullanabilirsiniz.

Amaç

Bu merkezi yapılandırma ve kurulum, AAOS Emulator'ı tüm şirket, tedarikçi ve evden çalışan geliştiriciler için erişilebilir hale getirir. Bunu yapmak, AAOS Öykünücüsünü yönetmeyi ve yeni sürümlere yükseltmeyi daha verimli hale getirir ve bireysel kullanıcılar için yerel makineleri kurmak ve yönetmek için gereken süreyi ortadan kaldırır. Bu çözüm, donanım kaynaklarının kullanımını optimize eder ve daha düşük maliyetli bir uygulama geliştirme ortamı sağlar. Örneğin, amaçlar için:

  • Kullanıcı araştırması, kullanıcı deneyimi incelemesi, müşteri desteği ve eğitim.
  • Potansiyel müşterilere ve satış kanallarında demolar.
  • Uygulamaları (günlük OEM HMI derlemeleri dahil) uygun ölçekte test edin, doğrulayın ve hatta hata ayıklayın. Emulator'ı, uygulama geliştirmek için kullanılan test tezgahlarının yerine bir alternatif olarak düşünün.
  • OEM müşteri çağrı merkezi temsilcilerinin tek tip, erişimi kolay bir HU UI'si vardır.

AAOS Öykünücüsünü kullanmanın faydaları çoktur:

  • Özelleştirilmiş ve bulut tabanlı bir AAOS Öykünücüsü (bulut öykünücüsü) oluşturmak için bir kurulum komut dosyası kullanın.
  • Sanal makine örnekleri için özelleştirilmiş bir AAOS Cloud Emulator görüntüsü oluşturun:
    • Bulut tabanlı bir öykünücünün hazır kurulumu.
    • Bir komutla bir AAOS AVD başlatmak için hizmeti oluşturanın kullanabileceği genel AAOS AVD görüntüleri. Örneğin, ortakların uyarlaması ve uygulaması için örnekler olarak genel OEM AVD görüntüleri.

Mimari

Bulut öykünücüsü örneğinin mimarisi aşağıda gösterilmiştir. Minimum düzeyde uygulanabilir ilk hizmetiniz, kendi OEM AVD görüntülerinizi ekleyerek çalışacaktır.

Şekil 1. Bulut AVD mimarisi

Temel öykünücü yapı taşları şunlardır:

Öğe Amaç
Android Emülatörü Emülatör örneği, AVD görüntülerini barındırır
Japon balığı-webrtc köprüsü Tepki uygulaması ile AAOS Emulator arasında iletişim sağlamak için Linux uygulaması
android-emülatör-webrtc Emülatör kullanıcı arayüzünü bir web tarayıcısında görüntülemek için uygulama tepki verin . React ayrıca kullanıcı girdi olaylarını yakalar ve bunları sunucuya geri gönderir.
Android Emulator Konteyner Komut Dosyaları Yukarıdaki yazılım modülleri için Docker görüntüleri ve kapsayıcılarını yönetmek ve oluşturmak için Python komut dosyaları.
JWT Hizmeti (JSON Web Simgesi hizmeti) Öykünücünün erişim izinlerini yönetmek için belirteçler üretir.
sunucuyu çevir İstemci ve sunucu arasında bir WebRTC doğrudan bağlantısı kurar. Turn server, yalnızca Emulator hizmeti güvenlik duvarları veya proxy'lerin arkasında çalışırken gereklidir.
elçi

Şunlar için bir proxy hizmeti:

  • Kendinden imzalı bir sertifika kullanarak HTTPS sağlayın.
  • 80 (http) bağlantı noktasındaki trafiği 443 (https) bağlantı noktasına yönlendirin.
  • Öykünücü için bir gRPC proxy'si olarak hareket edin.
  • Öykünücü gRPC uç noktasına erişime izin vermek için belirteçleri doğrulayın.
  • Diğer istekleri, bir React uygulamasını barındıran Nginx bileşenine yönlendirin.

Bir bulut sanal makinesinde öykünücü kurma

Bir GCP projesi oluşturmak için:

  1. Google Cloud Console'a gidin ve Bir Proje Seçin .
  2. Google Cloud projeniz için faturalandırmanın etkinleştirildiğini onaylamak için Bir proje için faturalandırmayı etkinleştirme, devre dışı bırakma veya değiştirme konusuna bakın.
  3. API'yi etkinleştirin .

GCE'de bir Linux sanal makinesi oluşturun

1. İç içe sanallaştırmayı etkinleştirin

Varsayılan olarak proje, klasör veya kuruluş düzeyinde iç içe sanallaştırmaya izin verilir. Kuruluşunuzdan biri iç içe sanallaştırmayı devre dışı bırakmadıkça, etkinleştirmek için hiçbir şey yapmanız gerekmez.

  1. İç İçe Sanallaştırmaya izin verildiğini doğrulamak için gcloud komut satırı aracını kullanın:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. Bir Ubuntu-1804-lts önyüklenebilir disk oluşturun

  1. Bulut Konsolu'na gidin.
  2. GCP projesini seçin.
  3. Gezinme menüsü > Compute Engine > Diskler > Disk Oluştur'a gidin.
    1. Bir disk adı sağlayın. Örneğin, ubuntu1804lts
    2. Bir Bölge ve Bölge seçin. İç İçe Sanallaştırmayı desteklemek için, seçtiğiniz Bölge ve Bölgenin Haswell (veya üstü) işlemcileri desteklediğinden emin olun. Daha fazla bilgi edinmek için Bölgeler ve Bölgeler bölümüne bakın.
    3. ubuntu-1804-bionic-v20210211 kaynak görüntüsünü seçin
    4. Uygun bir disk boyutu ayarlayın (100 GB veya daha büyük önerilir).

Şekil 1. Ubuntu önyüklenebilir diski oluşturun

3. VMX'i etkinleştirmek için özel lisans anahtarıyla özel bir görüntü oluşturun

  1. Bulut Konsolu'na gidin.
  2. Bir Cloud Shell açın ve şu komutu kullanın:
    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"
    
    • Bir Resim adı girin. Örneğin, aaos-emulator-image
    • Disk Bölgesini, diski oluşturduğunuz bölgeye ayarlayın.
    • Disk adını, diski oluşturmak için kullandığınız ada ayarlayın.

    Örneğin:

    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"
    

Ayrıntılar için bkz. İç İçe Sanallaştırma VM Örneği .

4. Özelleştirilmiş görüntüyü kullanarak bir sanal makine örneği oluşturun

  1. Bulut Konsolu'na gidin.
  2. GCP projesini seçin.
  3. Gezinme Menüsü > Compute Engine > Sanal Makine örneği'ne gidin.

    Şekil 1. Bir VM örneği oluşturun

  4. Bir örnek adı girin. Örneğin, aaosemulator
  5. İstediğiniz makine ailesini ve tipini seçin. Makinenin dört vCPU ve 16 GB bellek (veya daha fazla) içerdiğinden emin olun.
  6. Intel Cascade Lake (veya üstü) olacak CPU platformunu seçin.
  7. Önyükleme diskini önceki adımda oluşturulan görüntüyle değiştirin.
  8. Güvenlik Duvarını şunlar için etkinleştirin:
    • HTTP trafiğine izin ver
    • HTTPS trafiğine izin ver

5. Güvenlik duvarını 80 ve 443 numaralı bağlantı noktalarını açacak şekilde yapılandırın

  1. Bulut Konsolu'na gidin.
  2. GCP projesini seçin.
  3. Gezinme Menüsü > Compute Engine > VM örneği > Güvenlik duvarı kuralı ayarla'ya gidin.

Sanal makineye gerekli yazılımı yükleyin

  1. Python 3 ve Python3-env'i yükleyin:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. Yolda bulunan Android SDK ve ADB'yi yükleyin.
    sudo apt install android-sdk
    

    Docker ve Docker-compose'u yüklemek için bkz. Docker ve Docker-compose . Bunları root olmayan kullanıcı olarak çalıştırabildiğinizden emin olun.

  3. CPU'nun donanım sanallaştırmasını desteklediğini doğrulamak için (komut sıfırdan farklı bir sayı ile sonuçlanmalıdır):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Çekirdek Sanal Makinesini (KVM) kurun. KVM'yi kurmak için şunu çalıştırın:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. KVM'nin çalıştığını doğrulamak için:
    sudo apt install cpu-checker
    kvm-ok
    
    Çıktı şu şekilde olmalıdır:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. Node.js ve Node Packet Manager'ı (NPM) yüklemek için:
    sudo apt install nodejs npm
    

Barındırılan kapsayıcıları başlatın

  1. Yüklemeyi doğrulamak için, genel depodan barındırılan Android Emulator kapsayıcılarını çalıştırın. Konteynerlerle ilgili detayları burada bulabilirsiniz . Artık bu kapsayıcıları oluşturmadan çalıştırabilirsiniz. Örneğin:
    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
    

    Bu, kabı aşağı çeker (yerel olarak mevcut değilse) ve başlatır.

  2. Kapsayıcı başlatıldığında, yerel bir ana bilgisayara bir AVD'yi bağlamayla aynı şekilde ADB'yi yapılandırarak cihaza bağlanın. Örneğin:
    adb connect localhost:5555
    adb devices
    
    Çıktı şöyle olmalıdır:
    List of devices attached
    localhost:5555 device
    

AAOS Öykünücü hizmetini ayarlayın

Emülatör hizmetini kurmak için:

  1. Android Emulator Docker kapsayıcı komut dosyasını yükleyin:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. Bu, sanal bir ortamı etkinleştirir ve yürütülebilir emu-docker'ı kullanılabilir hale getirir. Kullanımı hakkında ayrıntılı bilgi almak için başlatın:
    emu-docker -h
    
  3. Docker kapsayıcılarını oluşturmak için lisans sözleşmelerini kabul edin.
  4. AAOS Emulator Docker kapsayıcısını oluşturun.
  5. 7154743 sürümünden sonraki bir öykünücü derlemesini indirin. Örneğin:
    sdk-repo-linux-emulator-7154743.zip
    
  6. AAOS öykünücüsü sistem görüntüsünü indirin. Örneğin, sdk-repo-linux-system-images-7115454.zip :
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. Web Kapsayıcılarını oluşturun ve uzaktan erişim için kullanıcı adı ve parola belirleyin.
    ./create_web_container.sh -p user1,passwd1
    
  8. AAOS Öykünücü Web Hizmetini başlatın:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

Bir AAOS Öykünücü Web Hizmetini başarıyla başlattınız! Bir web tarayıcısından erişmek için aşağıdakileri kullanın:

https://<VM_External__IP>

Sorun giderme

VM harici IP'sine bir bağlantı hatası oluşursa, VM'nin hem HTTP hem de HTTPS trafiğine izin verecek şekilde ayarlandığından emin olun. Bunu doğrulamak için, bkz. Temel bir Apache web sunucusu çalıştırma .

Turn sunucusunu kurun

Her zaman kendi sıra sunucunuzu kullanabilirsiniz. Aşağıda, bir Google Cloud VM örneğine ilişkin bir örnek verilmiştir.

Not: Dönüş sunucusunun bir Google Cloud VM örneğinde çalışmasını sağlamak için, VM güvenlik duvarı kuralını, 3478 ve 3479 numaralı TCP ve UDP bağlantı noktalarında trafiğe izin verecek şekilde yapılandırdığınızdan emin olun.

  1. Coturn sunucusunu kurun:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. Aşağıdaki satırları ekleyerek /etc/turnserver.conf değiştirin:
    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 dosyasını TURN yapılandırmasını içerecek şekilde değiştirin:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. Öykünücü bölümüne aşağıdaki iki ortam satırını ekleyin:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. AAOS Emulator hizmetini dönüş yapılandırmasıyla yeniden başlatın. Aşağıdaki dönüş sunucusu IP'sini, kullanıcı adını ve kimlik bilgilerini kendinizle değiştirdiğinizden emin olun:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up