قم ببناء محاكي السحابة الخاص بك

توضح هذه المقالة كيفية تشغيل AAOS Emulator كخدمة ويب وتشغيله في مستعرض ويب لجعله في متناول المستخدمين عن بُعد. يوفر القيام بذلك مرجعًا شاملاً وقابل للتطبيق إلى الحد الأدنى من خلال Google Cloud Compute Engine . ومع ذلك ، يمكنك استخدام هذه الخدمة على أي منصة سحابية عامة أو خاصة من اختيارك.

هدف

يتيح هذا التكوين والإعداد المركزيان إمكانية الوصول إلى AAOS Emulator لشركة بالكامل ومورد ومطوري العمل من المنزل. يؤدي القيام بذلك إلى زيادة كفاءة إدارة محاكي AAOS وترقيته إلى إصدارات جديدة ويقضي على الوقت اللازم لإعداد وإدارة الأجهزة المحلية للمستخدمين الفرديين. يعمل هذا الحل على تحسين استخدام موارد الأجهزة ويتيح بيئة تطوير تطبيقات منخفضة التكلفة. على سبيل المثال ، لأغراض:

  • بحث المستخدم ، ومراجعة تجربة المستخدم ، ودعم العملاء ، والتدريب.
  • عروض توضيحية للعملاء المحتملين وفي قنوات البيع.
  • اختبر التطبيقات وتحقق من صحتها وحتى تصحيح أخطائها (بما في ذلك إصدارات OEM HMI اليومية) على نطاق واسع. اعتبر المحاكي بديلاً عن مقاعد الاختبار المستخدمة في تطوير التطبيقات.
  • وكلاء مركز اتصال عملاء OEM لديهم واجهة مستخدم HU موحدة يسهل الوصول إليها.

فوائد استخدام محاكي AAOS عديدة:

  • استخدم البرنامج النصي للإعداد لإنشاء محاكي AAOS مخصص وقائم على السحابة (محاكي السحابة).
  • قم ببناء صورة AAOS Cloud Emulator مخصصة لمثيلات الأجهزة الافتراضية:
    • إعداد جاهز لمحاكي قائم على السحابة.
    • تتوفر صور AAOS AVD العامة لمنشئ الخدمة لبدء تشغيل AAOS AVD بأمر. على سبيل المثال ، صور OEM AVD العامة كعينات للشركاء للتكيف والتطبيق.

بنيان

تم توضيح هندسة مثال محاكي السحابة أدناه. ستعمل أول خدمة قابلة للتطبيق على الحد الأدنى من خلال إضافة صور OEM AVD الخاصة بك.

الشكل 1. بنية السحابة AVD

اللبنات الأساسية للمحاكي الرئيسي هي:

العنصر هدف
محاكي الأندرويد يستضيف مثيل المحاكي صور AVD
جسر Goldfish-webrtc تطبيق Linux لتوفير الاتصال بين التطبيق التفاعلي ومحاكي AAOS
محاكي android- webrtc تطبيق React لعرض Emulator UI في متصفح الويب. تلتقط React أيضًا أحداث إدخال المستخدم وترسلها مرة أخرى إلى الخادم.
نصوص حاوية محاكي Android نصوص Python لإدارة وإنشاء صور وحاويات Docker لوحدات البرامج المذكورة أعلاه.
خدمة JWT (خدمة JSON Web Token) يولد الرموز لإدارة أذونات الوصول للمحاكي.
بدوره الخادم ينشئ اتصال WebRTC المباشر بين العميل والخادم. لا يلزم تشغيل الخادم إلا عندما تعمل خدمة المحاكي خلف جدران الحماية أو الوكلاء.
مبعوث

خدمة الوكيل من أجل:

  • قدم HTTPS باستخدام شهادة موقعة ذاتيًا.
  • أعد توجيه حركة المرور على المنفذ 80 (http) إلى المنفذ 443 (https).
  • العمل كوكيل gRPC للمحاكي.
  • تحقق من الرموز المميزة للسماح بالوصول إلى نقطة نهاية gRPC للمحاكي.
  • أعد توجيه الطلبات الأخرى إلى مكون Nginx ، الذي يستضيف تطبيق React.

قم بإعداد المحاكي على سحابة VM

لإنشاء مشروع GCP:

  1. انتقل إلى Google Cloud Console وحدد مشروعًا .
  2. لتأكيد تمكين الفوترة لمشروع Google Cloud الخاص بك ، راجع تمكين أو تعطيل أو تغيير الفوترة لمشروع .
  3. تمكين API .

قم بإنشاء Linux VM في GCE

1. تمكين الافتراضية المتداخلة

افتراضيًا ، يُسمح بالافتراضية المتداخلة على مستوى المشروع أو المجلد أو المؤسسة. ما لم يقم شخص ما في مؤسستك بتعطيل المحاكاة الافتراضية المتداخلة ، فلن تحتاج إلى فعل أي شيء لتمكينها.

  1. استخدم أداة سطر الأوامر gcloud لتأكيد السماح بالظاهرية المتداخلة:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. أنشئ قرص Ubuntu-1804-lts قابل للتمهيد

  1. انتقل إلى Cloud Console .
  2. حدد مشروع GCP.
  3. اذهب إلى قائمة التنقل> Compute Engine> Disks> Create Disk.
    1. أدخل اسم القرص. على سبيل المثال ، ubuntu1804lts
    2. حدد المنطقة والمنطقة. لدعم المحاكاة الافتراضية المتداخلة ، تأكد من أن المنطقة والمنطقة التي تحددها تدعم معالجات Haswell (أو الأحدث). لمعرفة المزيد ، راجع المناطق والمناطق .
    3. حدد الصورة المصدر لـ ubuntu-1804-bionic-v20210211
    4. قم بتعيين حجم قرص مناسب (يوصى بـ 100 جيجابايت أو أكبر).

الشكل 1. إنشاء قرص Ubuntu قابل للتمهيد

3. قم بإنشاء صورة مخصصة بمفتاح ترخيص خاص لتمكين VMX

  1. انتقل إلى Cloud Console .
  2. افتح 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 باستخدام الصورة المخصصة

  1. انتقل إلى Cloud Console .
  2. حدد مشروع GCP.
  3. انتقل إلى قائمة التنقل> محرك الحساب> مثيل VM.

    الشكل 1. إنشاء مثيل VM

  4. أدخل اسم مثيل. على سبيل المثال ، aaosemulator
  5. حدد عائلة الماكينة والنوع المطلوب. تأكد من أن الجهاز يحتوي على أربعة وحدات معالجة مركزية (vCPU) وذاكرة سعة 16 جيجابايت (أو أكثر).
  6. حدد منصة وحدة المعالجة المركزية لتكون Intel Cascade Lake (أو أحدث).
  7. قم بتغيير قرص التمهيد إلى الصورة التي تم إنشاؤها في الخطوة السابقة.
  8. تمكين جدار الحماية لـ:
    • السماح بحركة مرور HTTP
    • السماح بحركة مرور HTTPS

5. قم بتكوين جدار الحماية لفتح المنفذ 80 و 443

  1. انتقل إلى Cloud Console .
  2. حدد مشروع GCP.
  3. انتقل إلى قائمة التنقل> محرك الحساب> مثيل VM> إعداد قاعدة جدار الحماية.

قم بتثبيت البرنامج المطلوب على الجهاز الظاهري

  1. قم بتثبيت Python 3 و Python3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. قم بتثبيت Android SDK و ADB المتاحين على المسار.
    sudo apt install android-sdk
    

    لتثبيت Docker و Docker-compose ، راجع Docker and Docker-compose . تأكد من أنه يمكنك تشغيلها كمستخدم غير جذر .

  3. لتأكيد أن وحدة المعالجة المركزية تدعم ظاهرية الأجهزة (يجب أن ينتج عن الأمر رقم غير صفري):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. قم بتثبيت Kernel Virtual Machine (KVM). لتثبيت KVM ، قم بتشغيل:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. للتحقق من عمل KVM:
    sudo apt install cpu-checker
    kvm-ok
    
    يجب أن يكون الإخراج:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. لتثبيت Node.js و Node Packet Manager (NPM):
    sudo apt install nodejs npm
    

ابدأ تشغيل الحاويات المستضافة

  1. للتحقق من التثبيت ، قم بتشغيل حاويات 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
    

    يؤدي هذا إلى سحب الحاوية (إذا لم تكن متوفرة محليًا) وتشغيلها.

  2. عندما يتم تشغيل الحاوية ، قم بالاتصال بالجهاز عن طريق تكوين ADB بنفس طريقة توصيل جهاز AVD على مضيف محلي. على سبيل المثال:
    adb connect localhost:5555
    adb devices
    
    يجب أن يكون الناتج:
    List of devices attached
    localhost:5555 device
    

قم بإعداد خدمة محاكي AAOS

لإعداد خدمة المحاكي:

  1. قم بتثبيت البرنامج النصي حاوية Android Emulator Docker:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. هذا ينشط بيئة افتراضية ويجعل emu-docker القابل للتنفيذ متاحًا. للحصول على معلومات مفصلة حول استخدامه ، قم بتشغيله:
    emu-docker -h
    
  3. لإنشاء حاويات Docker ، اقبل اتفاقيات الترخيص.
  4. قم ببناء حاوية AAOS Emulator Docker.
  5. قم بتنزيل إصدار محاكاة أحدث من الإصدار 7154743. على سبيل المثال:
    sdk-repo-linux-emulator-7154743.zip
    
  6. قم بتنزيل صورة نظام محاكي AAOS. على سبيل المثال ، sdk-repo-linux-system-images-7115454.zip :
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. قم بإنشاء حاويات الويب وتعيين اسم المستخدم وكلمة المرور للوصول عن بُعد.
    ./create_web_container.sh -p user1,passwd1
    
  8. ابدأ تشغيل خدمة ويب محاكي AAOS:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

لقد بدأت بنجاح خدمة ويب محاكي AAOS! استخدم ما يلي للوصول إليه من متصفح الويب:

https://<VM_External__IP>

استكشاف الأخطاء وإصلاحها

إذا حدث خطأ في الاتصال بعنوان IP الخارجي للجهاز الظاهري ، فتأكد من إعداد الجهاز الظاهري للسماح بحركة مرور HTTP و HTTPS. للتحقق من ذلك ، راجع تشغيل خادم ويب Apache أساسي .

قم بإعداد خادم الدور

يمكنك دائمًا استخدام خادم الدور الخاص بك. المقدم أدناه هو عينة على مثيل Google Cloud VM.

ملاحظة: لجعل خادم الدوران يعمل على مثيل Google Cloud VM ، تأكد من تكوين قاعدة جدار الحماية VM للسماح بحركة المرور على منفذي TCP و UDP 3478 و 3479.

  1. قم بتثبيت خادم coturn:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. قم بتعديل /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
    
  3. قم بتعديل ملف Docker Compose YAML ليشمل تكوين TURN:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. أضف سطري البيئة التاليين في قسم المحاكي:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. أعد تشغيل خدمة محاكي AAOS باستخدام تكوين الانعطاف. تأكد من استبدال عنوان 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