Kendi bulut emülatörünüzü oluşturun

Bu sayfada, AAOS Emülatörü'nün web hizmeti olarak nasıl çalıştırılacağı ve kullanıcıların uzaktan erişebilmesi için bir web tarayıcısında nasıl çalıştırılacağı açıklanmaktadır. Bu işlem, Google Cloud Compute Engine üzerinden uçtan uca, minimum düzeyde uygulanabilir bir referans sağlar. Bununla birlikte, bu hizmeti dilediğiniz herkese açık veya özel bulut platformunda kullanabilirsiniz.

Amaç

Bu merkezi yapılandırma ve kurulum, AAOS Emulator'a şirketin tamamının, tedarikçi firmaların ve evden çalışan geliştiricilerin erişebilmesini sağlar. Bu sayede AAOS Emulator'u yönetmek ve yeni sürümlere yükseltmek daha verimli hale gelir ve her kullanıcı için yerel makineleri kurmak ve yönetmek için gereken süre ortadan kalkar. 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, aşağıdaki amaçlarla:

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

AAOS emülatörünü kullanmanın birçok avantajı vardır:

  • Özelleştirilmiş ve bulut tabanlı bir AAOS emülatörü (bulut emülatörü) 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 emülatörün hazır kurulumu.
    • Hizmet oluşturucunun bir komutla AAOS AVD'yi başlatmak için kullanabileceği herkese açık AAOS AVD resimleri. Örneğin, iş ortaklarının uyarlayıp uygulayabileceği örnekler olarak herkese açık OEM AVD görüntüleri.

Mimari

Bulut emülatör örneğinin mimarisi aşağıda gösterilmektedir. İlk minimum uygulanabilir hizmetiniz, kendi OEM AVD resimlerinizi ekleyerek çalışır.

Şekil 1. Cloud AVD mimarisi.

Önemli emülatör yapı taşları şunlardır:

burada bulabilirsiniz.
Öğe Amaç
Android Emulator Emülatör örneği AVD görüntüleri barındırıyor
Goldfish-webrtc köprüsü React uygulaması ile AAOS Emulator arasında iletişim sağlayan Linux uygulaması
android-emulator-webrtc Emülatör kullanıcı arayüzünü web tarayıcısında görüntülemek için React uygulaması. React, kullanıcı girişi etkinliklerini de yakalayıp sunucuya geri gönderir.
Android Emulator Kapsayıcı Komut Dosyaları Yukarıdaki yazılım modülleri için Docker görüntülerini ve kapsayıcılarını yönetmek ve oluşturmak üzere kullanılan Python komut dosyaları.
Emülatörün erişim izinlerini yönetmek için jeton oluşturur.
Sunucuyu döndürme İstemci ile sunucu arasında WebRTC doğrudan bağlantısı oluşturur. Sunucuyu döndürme seçeneği yalnızca Emulator hizmeti güvenlik duvarları veya proxy'ler arkasında çalışırken gereklidir.
Elçi

Şunlar için bir proxy hizmeti:

  • Kendinden imzalı bir sertifika kullanarak HTTPS sağlayın.
  • 80 numaralı bağlantı noktasındaki (http) trafiği 443 numaralı bağlantı noktasına (https) yönlendirin.
  • Emülatör için gRPC proxy'si olarak çalışır.
  • Emülatör gRPC uç noktasına erişim izni vermek için jetonları doğrulayın.
  • Diğer istekleri, bir React uygulaması barındıran Nginx bileşenine yönlendirin.

Bulut sanal makinesinde emülatör ayarlama

GCP projesi oluşturmak için:

  1. Google Cloud Console'a gidip Proje Seçin.
  2. Google Cloud projeniz için faturalandırmanın etkinleştirildiğini onaylamak isterseniz Bir projenin faturalandırmasını etkinleştirme, devre dışı bırakma veya değiştirme başlıklı makaleyi inceleyin.
  3. API'yi etkinleştirin.

GCE'de Linux sanal makinesi oluşturma

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

Varsayılan olarak, proje, klasör veya kuruluş düzeyinde iç içe yerleştirilmiş sanallaştırmaya izin verilir. Kuruluşunuzdaki bir kullanıcı iç içe yerleştirilmiş sanallaştırmayı devre dışı bırakmadıysa bu özelliği etkinleştirmek için herhangi bir işlem yapmanız gerekmez.

  1. İç içe sanallaştırmaya izin verildiğini onaylamak 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. Ubuntu-1804-lts önyüklenebilir diski oluşturma

  1. Cloud Console'a gidin.
  2. GCP projesini seçin.
  3. Gezinme menüsüne gidin ve Compute Engine > Diskler > Disk Oluştur'u seçin.
    1. Disk adı girin. Örneğin, ubuntu1804lts
    2. Bir bölge ve alt bölge seçin. İç içe yerleştirilmiş sanallaştırmayı desteklemek için seçtiğiniz bölgenin ve alt bölgenin Haswell (veya daha yeni) işlemcileri desteklediğinden emin olun. Daha fazla bilgi edinmek için Bölgeler ve Alt Bölgeler başlıklı makaleyi inceleyin.
    3. ubuntu-1804-bionic-v20210211 kaynağının resmini seçin
    4. Uygun bir disk boyutu ayarlayın (100 GB veya daha büyük boyutlar önerilir).

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

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

  1. Cloud Console'a gidin.
  2. Cloud Shell'i açıp aşağıdaki 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ölgesi'ni, diski oluşturduğunuz bölge olarak ayarlayın.
    • Disk adını, diski oluşturmak için kullandığınız ada ayarlayın.

    Örnek:

    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ılı bilgi için İç İçe Sanallaştırma Sanal Makinesi Örneği başlıklı makaleyi inceleyin.

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

  1. Cloud Console'a gidin.
  2. GCP projesini seçin.
  3. Gezinme menüsü > Compute Engine > Sanal makine örneği'ne gidin.

    Şekil 3. Sanal makine örneği oluşturun.

  4. Bir örnek adı girin. Örneğin, aaosemulator
  5. İstediğiniz makine ailesini ve türünü seçin. Makinenin dört vCPU ve 16 GB (veya daha fazla) bellek içerdiğinden emin olun.
  6. Intel Cascade Lake (veya sonraki bir sürüm) olacak şekilde 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ı 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ırma

  1. Cloud Console'a gidin.
  2. GCP projesini seçin.
  3. Gezinme menüsü > Compute Engine > Sanal makine örneği > Güvenlik duvarı kur'a gidin.

Sanal makineye gerekli yazılımları yükleme

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

    Docker ve Docker-compose'i yüklemek için Docker ve Docker-compose başlıklı makalelere göz atın. Bunları root olmayan kullanıcı olarak çalıştırabileceğinizden emin olun.

  3. CPU'nun donanım sanallaştırmayı desteklediğini doğrulamak için (komut sıfır olmayan bir sayı döndürmelidir):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Kernel Sanal Makinesi'ni (KVM) yükleyin. KVM'yi yüklemek için:
    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
    
    Çıkış şu şekilde olmalıdır:
    INFO: /dev/kvm exists
    KVM acceleration can be used
  6. Node.js ve Node Paket Yöneticisi'ni (NPM) yüklemek için:
    sudo apt install nodejs npm
    

Barındırılan kapsayıcıları başlatma

  1. Yüklemeyi doğrulamak için barındırılan Android Emulator kapsayıcılarını herkese açık depodan çalıştırın. Kapsayıcılarla ilgili ayrıntıları burada bulabilirsiniz. Artık bu kapsayıcıları oluşturmadan çalıştırabilirsiniz. Örnek:
    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 işlem, kapsayıcıyı (yerel olarak mevcut değilse) indirir ve başlatır.

  2. Kapsayıcı başlatıldığında, ADB'yi yerel bir ana makinede AVD bağlar gibi yapılandırarak cihaza bağlanın. Örnek:
    adb connect localhost:5555
    adb devices
    
    Çıkış şu şekilde olmalıdır:
    List of devices attached
    localhost:5555 device

AAOS Emülatör hizmetini ayarlama

Emülatör hizmetini ayarlamak 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 işlem, sanal bir ortamı etkinleştirir ve emu-docker yürütülebilir dosyasını kullanılabilir hale getirir. Kullanımı hakkında ayrıntılı bilgi edinmek için uygulamayı 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 container'ını derleyin.
  5. 7154743 sürümünden sonraki bir emülatör derlemesini indirin. Örnek:
    sdk-repo-linux-emulator-7154743.zip
    
  6. AAOS emülatör 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 uzak erişim için kullanıcı adını ve şifreyi ayarlayın.
    ./create_web_container.sh -p user1,passwd1
    
  8. AAOS Emulator Web Hizmeti'ni başlatın:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

AAOS emülatör web hizmetini başarıyla başlattınız. Web tarayıcısında erişmek için aşağıdakileri kullanın:

https://<VM_External__IP>

Sorun giderme

Sanal makinenin harici IP'sine bağlantı hatası oluşursa sanal makinenin hem HTTP hem de HTTPS trafiğine izin verecek şekilde ayarlandığından emin olun. Bunu doğrulamak için Temel Apache web sunucusu çalıştırma başlıklı makaleyi inceleyin.

Dönüş sunucusunu ayarlama

İstediğiniz zaman kendi sıra sunucunuzu kullanabilirsiniz. Aşağıda, Google Cloud sanal makine örneğinde bir örnek verilmiştir.

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

  1. coturn sunucusunu yükleyin:
    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ğerini 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. Emülatör 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 çeviri sunucusu IP'sini, kullanıcı adını ve kimlik bilgilerini kendi bilgilerinizle 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