صمِّم محاكي السحابة الإلكترونية الخاص بك

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

الغرض

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

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

توجد مزايا استخدام محاكي AAOS العديدة:

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

هندسة معمارية

يتم توضيح بنية مثال محاكي السحابة أدناه. أول عن طريق إضافة صور متوسّط مدة المشاهدة الخاصة بالمصنّع الأصلي للجهاز.

الشكل 1. بنية Cloud AVD.

الوحدات الأساسية للمحاكي هي:

هنا.
اسم الغرض
محاكي Android يستضيف مثيل المحاكي صور AVD
جسر السمك الذهبي واختصاره webrtc تطبيق Linux لتوفير الاتصال بين تطبيق التفاعل ومحاكي AAOS
أداة محاكاة Android-webrtc التفاعل مع التطبيق لعرض واجهة مستخدم المحاكي على الويب المتصفح. يلتقط React أيضًا أحداث البيانات التي يُدخلها المستخدم ويرسلها مرة أخرى إلى الخادم.
النصوص البرمجية لحاوية محاكي Android البرامج النصية في Python لإدارة وإنشاء صور وحاويات Docker لوحدات البرامج المذكورة أعلاه
إنشاء رموز مميزة لإدارة أذونات الوصول للمحاكي
تحويل الخادم ينشئ اتصال WebRTC مباشرًا بين العميل والخادم. تحويل الخادم يكون مطلوبًا فقط عند تشغيل خدمة المحاكي وراء جدران الحماية أو الخوادم الوكيلة.
Envoy

خادم وكيل لإجراء ما يلي:

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

إعداد المحاكي على جهاز افتراضي على السحابة الإلكترونية

لإنشاء مشروع Google Cloud Platform:

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

إنشاء جهاز افتراضي يعمل بنظام التشغيل Linux في 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. اختَر مشروع Google Cloud Platform.
  3. انتقل إلى قائمة التنقل واختر Compute Engine > الأقراص > إنشاء قرص
    1. أدخِل اسمًا للقرص. على سبيل المثال، ubuntu1804lts
    2. اختَر منطقة ومنطقة. لإتاحة المحاكاة الافتراضية المدمجة، تأكَّد من أنّ حقل "المنطقة" والمنطقة التي تختارها وتتوافق مع معالِجات بهاسويل (أو معالِجات أحدث). لمزيد من المعلومات، يُرجى مراجعة المناطق والمناطق:
    3. اختيار الصورة المصدر لـ "ubuntu-1804-bionic-v20210211"
    4. اضبط حجم قرصًا مناسبًا (يُنصح بأن يكون 100 غيغابايت أو أكبر).

الشكل 2. أنشئ قرصًا قابلاً للتشغيل على نظام التشغيل 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"
    

للحصول على التفاصيل، يمكنك مراجعة مثيل الجهاز الافتراضي المضمّن في المحاكاة الافتراضية المُدمَجة

4. إنشاء مثيل جهاز افتراضي باستخدام الصورة المخصّصة

  1. انتقِل إلى Cloud Console.
  2. اختَر مشروع Google Cloud Platform.
  3. انتقل إلى قائمة التنقل > محرك الحوسبة > مثيل الجهاز الافتراضي (VM).

    الشكل 3. أنشئ مثيل جهاز افتراضي (VM).

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

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

  1. انتقِل إلى Cloud Console.
  2. اختَر مشروع Google Cloud Platform.
  3. انتقل إلى قائمة التنقل > محرك الحوسبة > مثيل الجهاز الافتراضي > إعداد قاعدة جدار حماية.

تثبيت البرامج المطلوبة على الجهاز الافتراضي

  1. تثبيت Python 3 وPython3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. تثبيت حزمة تطوير البرامج (SDK) لنظام التشغيل Android وADB متاحين على المسار.
    sudo apt install android-sdk
    

    لتثبيت Docker و Docker-compos، راجع Docker و إنشاء القرص. تأكد من أنه يمكنك هذه باعتبارها مستخدمًا ليس جذرًا.

  3. للتأكد من أن وحدة المعالجة المركزية (CPU) تتوافق مع المحاكاة الافتراضية للأجهزة (من المفترض أن يؤدي الأمر إلى رقم غير صفري):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. تثبيت الجهاز الافتراضي Kernel (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 ومدير حزم العقدة (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 بالطريقة نفسها. كربط متوسّط مدة المشاهدة على مضيف محلي مثل:
    adb connect localhost:5555
    adb devices
    
    يجب أن يكون الناتج:
    List of devices attached
    localhost:5555 device
    

إعداد خدمة AAOS Emulator

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

  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. أنشِئ حاوية Docker لمحاكي AAOS.
  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 Emulator على الويب:
    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 مثال.

ملاحظة: لضمان عمل خادم الدوران على مثيل 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