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

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

الغرض

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

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

تتعدد مزايا استخدام "محاكي AAOS":

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

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

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

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

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

هنا.
اسم الغرض
محاكي Android تستضيف نسخة المحاكي صور AVD
جسر Goldfish-webrtc تطبيق Linux لتوفير إمكانية التواصل بين تطبيق React ومحاكي AAOS
android-emulator-webrtc تطبيق React لعرض واجهة مستخدم المحاكي في متصفّح الويب يُسجِّل React أيضًا أحداث إدخال المستخدم ويعيد إرسالها إلى الخادم.
النصوص البرمجية لحاويات Android Emulator نصوص 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 في Google Compute Engine

‫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. اختَر منطقة ومنطقة. لتفعيل ميزة "التضمين الافتراضي"، تأكَّد من أنّ المنطقة والمنطقة التي تختارها تتيحان استخدام معالجات Haswell (أو الإصدارات الأحدث). لمزيد من المعلومات، يُرجى الاطّلاع على الأقاليم والمناطق.
    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. انتقِل إلى قائمة التنقّل > Compute Engine > مثيل VM.

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

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

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

  1. انتقِل إلى Cloud Console.
  2. اختَر مشروع Google Cloud Platform.
  3. انتقِل إلى قائمة التنقّل > Compute Engine > مثيل VM > إعداد قاعدة جدار الحماية.

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

  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-compose، يُرجى الاطّلاع على Docker و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" المستضافة من المستودع العلني. يمكنك الاطّلاع على تفاصيل عن الحاويات هنا. يمكنك الآن تشغيل هذه الحاويات بدون إنشائها. مثلاً:
    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 بالطريقة نفسها التي يتم بها توصيل جهاز افتراضي Android على مضيف محلي. مثلاً:
    adb connect localhost:5555
    adb devices
    
    من المفترض أن يكون الناتج على النحو التالي:
    List of devices attached
    localhost:5555 device

إعداد خدمة AAOS Emulator

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

  1. ثبِّت النص البرمجي لحاوية Docker الخاصة بمحاكي Android:
    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:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

لقد بدأت بنجاح خدمة ويب لمحاكي AAOS. اتّبِع الخطوات التالية للوصول إلى التطبيق على متصفّح ويب:

https://<VM_External__IP>

تحديد المشاكل وحلّها

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

إعداد خادم التحويل

يمكنك في أي وقت استخدام خادم التحكّم في حدود الجلسة الخاص بك. في ما يلي مثال على مثيل VM في Google Cloud.

ملاحظة: لتشغيل خادم Turn على مثيل VM في Google Cloud، احرص على ضبط قاعدة جدار حماية 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. عدِّل ملف YAML الخاص بـ Docker Compose لتضمين إعدادات 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 Emulator باستخدام إعدادات الإيقاف/التفعيل. احرص على استبدال عنوان IP لخادم TURN واسم المستخدم والمعلومات المُعتمَدة أدناه بمعلوماتك الخاصة:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up