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

Bu makalede , AAOS Emulator'un bir Web Hizmeti olarak nasıl çalıştırılacağı ve kullanıcıların uzaktan erişebilmesini sağlamak için bir web tarayıcısında nasıl çalıştırılacağı açıklanmaktadı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'u 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:

  • 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) geniş ölçekte test edin, doğrulayın ve hatta hata ayıklayın. Emülatörü, uygulama geliştirmek için kullanılan test tezgahlarının yerine geçecek bir araç olarak düşünün.
  • OEM müşteri çağrı merkezi temsilcileri tek tip, erişimi kolay bir HU kullanıcı arayüzüne sahiptir.

AAOS Emülatörünü kullanmanın faydaları çoktur:

  • Özelleştirilmiş ve bulut tabanlı bir AAOS Emulator (bulut emülatörü) oluşturmak için bir kurulum komut dosyası kullanın.
  • VM ö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 bir AAOS AVD başlatması için kullanabileceği genel AAOS AVD görüntüleri. Örneğin, iş ortaklarının uyarlaması ve uygulaması için örnek olarak herkese açık OEM AVD görüntüleri.

Mimari

Bulut emülatör örneğinin mimarisi aşağıda gösterilmiştir. Minimum düzeyde uygulanabilir ilk hizmetiniz, kendi OEM AVD görsellerinizi ekleyerek çalışacaktır.

Şekil 1. Bulut AVD mimarisi

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

Burada .
Öğ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ü React uygulaması ile AAOS Emulator arasında iletişimi sağlayan Linux uygulaması
android-emülatör-webrtc Emulator kullanıcı arayüzünü bir web tarayıcısında görüntülemek için uygulamayı reaksiyona sokun . React ayrıca kullanıcı giriş olaylarını yakalar ve bunları sunucuya geri gönderir.
Android Emülatörü Konteyner 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 için Python komut dosyaları.
Emülatörün erişim izinlerini yönetmek için belirteçler oluşturur.
Sunucuyu çevir İstemci ile sunucu arasında WebRTC doğrudan bağlantısı kurar. Sunucuyu çevirme yalnızca Emulator hizmeti güvenlik duvarlarının veya proxy'lerin arkasında çalışırken gereklidir.
Elçi

Şunlara yönelik 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 görevi görür.
  • Emülatörün gRPC uç noktasına erişime izin vermek için belirteçleri doğrulayın.
  • Diğer istekleri React uygulamasını barındıran Nginx bileşenine yönlendirin.

Bulut sanal makinesinde öykünücüyü ayarlama

GCP projesi oluşturmak için:

  1. Google Cloud Console'a gidin ve Bir Proje Seçin .
  2. Google Cloud projenizde faturalandırmanın etkinleştirildiğini doğrulamak için 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 VM oluşturma

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

Varsayılan olarak iç içe sanallaştırmaya proje, klasör veya kuruluş düzeyinde izin verilir. Kuruluşunuzdaki bir kişi iç içe sanallaştırmayı devre dışı bırakmadığı sürece, onu etkinleştirmek için herhangi bir şey yapmanıza gerek yoktur.

  1. Yuvalanmış 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 bir 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ı girin. Ö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 üzeri) işlemcileri desteklediğinden emin olun. Daha fazla bilgi edinmek için Bölgeler ve Bölgeler'e 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 fazlası ö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 Zone'u diski oluşturduğunuz bölgeye ayarlayın.
    • Disk adını, diski oluşturmak için kullandığınız adla 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 Sanal Makine Örneği .

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

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

    Şekil 1. VM örneği oluşturma

  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. CPU platformunu Intel Cascade Lake (veya üzeri) olarak seçin.
  7. Önyükleme diskini önceki adımda oluşturulan görüntüyle değiştirin.
  8. Güvenlik Duvarını şunun 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ını ayarla'ya gidin.

Gerekli yazılımı VM'ye yükleyin

  1. Python 3 ve Python3-env'yi yükleyin:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. Yolda bulunan Android SDK'yı 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ıyla sonuçlanmalıdır):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Çekirdek Sanal Makinesini (KVM) yükleyin. KVM'yi yüklemek 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ı şöyle 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. Kurulumu doğrulamak için, barındırılan Android Emulator kapsayıcılarını genel depodan çalıştırın. Konteynerlerle ilgili detayları burada bulabilirsiniz. Artık bu konteynerleri 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 onu başlatır.

  2. Kap başlatıldığında, ADB'yi, bir AVD'yi yerel bir ana bilgisayara bağlarken olduğu gibi 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 Emulator hizmetini kurma

Emulator 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, sanal 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 şifreyi ayarlayın.
    ./create_web_container.sh -p user1,passwd1
    
  8. AAOS Emulator Web Hizmetini başlatın:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

AAOS Emulator 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 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 sunucusunu çalıştırma .

Dönüş sunucusunu ayarlama

Her zaman kendi dönüş sunucunuzu kullanabilirsiniz. Aşağıda Google Cloud VM örneğindeki 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ı TCP ve UDP bağlantı noktaları 3478 ve 3479'daki 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 dosyasını 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 dönüş sunucusu IP'sini, kullanıcı adını ve kimlik bilgilerini kendi IP'nizle 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