בדף הזה נסביר איך להריץ את AAOS Emulator בתור שירות אינטרנט ולהריץ אותו בדפדפן אינטרנט כדי לאפשר למשתמשים לגשת אליו מרחוק. כך תוכלו לקבל הדרכה מקיפה מקצה לקצה באמצעות Compute Engine של Google Cloud. עם זאת, אפשר להשתמש בשירות הזה בכל פלטפורמת ענן ציבורית או פרטית שבחרתם.
המטרה
ההגדרה וההגדרה המרכזיות האלה מאפשרות גישה ל-AAOS Emulator לכל החברה, לספקים ולמפתחים שעובדים מהבית. כך קל יותר לנהל ולשדרג את AAOS Emulator לגרסאות חדשות, ומבטלים את הצורך להגדיר ולנהל מכונות מקומיות למשתמשים ספציפיים. הפתרון הזה מבצע אופטימיזציה של השימוש במשאבי החומרה ומאפשר סביבה לפיתוח אפליקציות בעלות נמוכה יותר. לדוגמה, למטרות:
- מחקר משתמשים, בדיקת חוויית המשתמש, תמיכת לקוחות והדרכה.
- הדגמות ללקוחות פוטנציאליים ובערוצי מכירות.
- בדיקה, אימות ואפילו ניפוי באגים של אפליקציות (כולל גרסאות build יומיות של HMI של יצרן ציוד מקורי) בקנה מידה נרחב. אפשר להתייחס למהדורת ה-Emulator כתחליף למערכות הבדיקה שמשמשות לפיתוח אפליקציות.
- לנציגי מרכזי השירות של יצרני הציוד המקורי יש ממשק משתמש אחיד וקל לגישה ב-HU.
יש יתרונות רבים לשימוש ב-AAOS Emulator:
- שימוש בסקריפט הגדרה כדי ליצור AAOS Emulator (מעבדה וירטואלית בענן) בהתאמה אישית שמבוססת על ענן.
- יוצרים קובץ אימג' מותאם אישית של AAOS Cloud Emulator למכונות וירטואליות:
- הגדרה מוכנה של אמולטור מבוסס-ענן.
- קובצי אימג' ציבוריים של AAOS AVD שזמינים לבורא השירות כדי להפעיל AAOS AVD באמצעות פקודה. לדוגמה, קובצי אימג' ציבוריים של AVD של יצרני ציוד מקורי (OEM) כדוגמאות לשותפים שיכולים להתאים אותם ולהחיל אותם.
ארכיטקטורה
הארכיטקטורה של הדוגמה למהדר ענן מופיעה בהמשך. כדי ליצור את השירות הראשון שאפשר להשתמש בו, צריך להוסיף תמונות AVD של יצרן הציוד המקורי (OEM).
איור 1. הארכיטקטורה של Cloud AVD.
אבני הבניין של המהדר הם:
כאן.פריט | המטרה |
---|---|
אמולטור Android | מכונות אמולטור שמארחות קובצי אימג' של AVD |
גשר Goldfish-webrtc | אפליקציית Linux שמספקת תקשורת בין אפליקציית React לבין אמולטור AAOS |
android-emulator-webrtc | אפליקציית React להצגת ממשק המשתמש של המהדר בדפדפן אינטרנט. ב-React מתועדים גם אירועי קלט של משתמשים, והם נשלחים חזרה לשרת. |
סקריפטים של קונטיינרים ב-Android Emulator | סקריפטים של Python לניהול וליצירה של קובצי אימג' וקונטיינרים של Docker עבור המודולים של התוכנה שלמעלה. |
יצירת אסימונים לניהול הרשאות הגישה של המהדר. | |
הפעלת השרת | יוצר חיבור ישיר של WebRTC בין הלקוח לשרת. צריך להפעיל את השרת רק כששירות המהדמנת פועל מאחורי חומות אש או שרתי proxy. |
Envoy | שירות proxy כדי:
|
הגדרת אמולטור במכונה וירטואלית בענן
כדי ליצור פרויקט ב-GCP:
- נכנסים למסוף Google Cloud ובוחרים פרויקט.
- כדי לוודא שהחיוב מופעל בפרויקט שלכם ב-Google Cloud, קראו את המאמר הפעלה, השבתה ושינוי של חיוב בפרויקט .
- מפעילים את ה-API.
יצירת מכונה וירטואלית של Linux ב-GCE
1. הפעלת וירטואליזציה בתצוגת עץ
כברירת מחדל, וירטואליזציה בתצוגת עץ מותרת ברמת הפרויקט, התיקייה או הארגון. אם אף אחד בארגון לא השבית את התכונה 'וירטואליזציה בתצוגת עץ', לא צריך לעשות שום דבר כדי להפעיל אותה.
- משתמשים בכלי שורת הפקודה של gcloud כדי לוודא שאפשר להשתמש בווירטואליזציה בתצוגת עץ:
gcloud beta resource-manager org-policies describe \ constraints/compute.disableNestedVirtualization --effective --project=[PROJECT_ID]
2. יצירת דיסק אתחול של Ubuntu-1804-lts
- נכנסים למסוף Google Cloud.
- בוחרים את הפרויקט ב-GCP.
- עוברים לתפריט Navigation ובוחרים באפשרות Compute Engine > Disks > Create Disk.
- נותנים שם לדיסק. לדוגמה:
ubuntu1804lts
- בוחרים אזור ואזור משנה. כדי לתמוך בווירטואליזציה בתצוגת עץ, חשוב לוודא שהאזור והתחום שבוחרים תומכים במעבדים מסוג Haswell (או מאוחר יותר). מידע נוסף זמין במאמר אזורים ותחומים.
- בוחרים את קובץ התמונה המקור של
ubuntu-1804-bionic-v20210211
- מגדירים את גודל הדיסק המתאים (מומלץ להגדיר 100GB או יותר).
- נותנים שם לדיסק. לדוגמה:
איור 2. יצירת דיסק אתחול של Ubuntu.
3. יצירת קובץ אימג' בהתאמה אישית עם מפתח רישיון מיוחד כדי להפעיל את VMX
- נכנסים למסוף Cloud.
- פותחים 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
- מגדירים את Disk Zone לתחום שבו יצרתם את הדיסק.
- נותנים לדיסק את השם שבו השתמשתם כדי ליצור אותו.
לדוגמה:
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. יצירת מכונה וירטואלית באמצעות התמונה בהתאמה אישית
- נכנסים למסוף Google Cloud.
- בוחרים את הפרויקט ב-GCP.
- עוברים אל Navigation Menu (תפריט הניווט) > Compute Engine (Compute Engine) > VM instance (מכונה וירטואלית).
איור 3. יוצרים מכונה וירטואלית.
- מזינים שם למכונה. לדוגמה:
aaosemulator
- בוחרים את סוג המכונה ומשפחת המכונות הרצויים. חשוב לוודא שהמכונה מכילה ארבעה מעבדים וירטואליים (vCPU) ו-16GB של זיכרון (או יותר).
- בוחרים את פלטפורמת המעבד כ-Intel Cascade Lake (או גרסת מעבד מתקדמת יותר).
- מחליפים את דיסק האתחול בקובץ האימג' שנוצר בשלב הקודם.
- מפעילים את חומת האש עבור:
- מתן הרשאה לתנועה מסוג HTTP
- לאפשר תנועה ב-HTTPS
5. הגדרת חומת האש לפתיחת יציאות 80 ו-443
- נכנסים למסוף Google Cloud.
- בוחרים את פרויקט GCP.
- עוברים אל Navigation Menu > Compute Engine > VM instance > Set up firewall rule.
התקנת התוכנות הנדרשות ב-VM
- מתקינים את Python 3 ואת Python3-env:
sudo apt update sudo apt install python3 sudo apt-get install python3-venv
- מתקינים את Android SDK ואת ADB שזמינים בנתיב.
sudo apt install android-sdk
במאמרים Docker ו-Docker-compose מוסבר איך להתקין את Docker ואת Docker-compose. מוודאים שאפשר להריץ אותם כמשתמשים שאינם משתמשי Root.
- כדי לוודא שהמעבד תומך בווירטואליזציה של חומרה (הפקודה אמורה להניב מספר שאינו אפס):
egrep -c '(vmx|svm)' /proc/cpuinfo
- מתקינים את Kernel Virtual Machine (KVM). כדי להתקין את KVM, מריצים את הפקודה:
sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
- כדי לוודא ש-KVM פועל:
הפלט אמור להיות:sudo apt install cpu-checker kvm-ok
INFO: /dev/kvm exists KVM acceleration can be used
- כדי להתקין את Node.js ואת Node Packet Manager (NPM):
sudo apt install nodejs npm
הפעלת הקונטיינרים המארחים
- כדי לאמת את ההתקנה, מריצים את הקונטיינרים המארחים של 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
הפקודה הזו גוררת את הקונטיינר (אם הוא לא זמין באופן מקומי) ומפעילה אותו.
- כשהקונטיינר יופעל, צריך לחבר את המכשיר על ידי הגדרת ADB באותו אופן שבו מחברים AVD במארח מקומי. לדוגמה:
הפלט אמור להיות:adb connect localhost:5555 adb devices
List of devices attached localhost:5555 device
הגדרת השירות AAOS Emulator
כדי להגדיר את השירות של המהדר:
- מתקינים את הסקריפט של מאגר Docker של Android Emulator:
git clone https://github.com/google/android-emulator-container-scripts.git
cd android-emulator-container-script source ./configure.sh
- הפקודה הזו מפעילה סביבה וירטואלית ומאפשרת להריץ את קובץ ההפעלה emu-docker.
כדי לקבל מידע מפורט על השימוש בו, מריצים אותו:
emu-docker -h
- כדי ליצור את קונטיינרים Docker, מאשרים את הסכמי הרישיון.
- יצירת קונטיינר Docker של AAOS Emulator.
- מורידים build של אמולטור בגרסה מאוחרת יותר מגרסה 7154743. לדוגמה:
sdk-repo-linux-emulator-7154743.zip
- מורידים את קובץ האימג' של מערכת האמולטור של AAOS. לדוגמה,
sdk-repo-linux-system-images-7115454.zip
:emu-docker create <emulator-zip> <system-image-zip>
- יוצרים את קונטיינרי האינטרנט ומגדירים שם משתמש וסיסמה לגישה מרחוק.
./create_web_container.sh -p user1,passwd1
- מפעילים את שירות האינטרנט של אמולטור AAOS:
docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
הפעלת בהצלחה שירות אינטרנט של AAOS Emulator. כדי לגשת אליו בדפדפן אינטרנט:
https://<VM_External__IP>
פתרון בעיות
אם מתרחשת שגיאת חיבור לכתובת ה-IP החיצונית של המכונה הווירטואלית, צריך לוודא שהמכונה הווירטואלית מוגדרת לאפשר גם תעבורת נתונים מסוג HTTP וגם תעבורת נתונים מסוג HTTPS. למידע נוסף, ראו הפעלת שרת אינטרנט בסיסי של Apache.
הגדרת שרת ה-TURN
תמיד אפשר להשתמש בשרת ניתוב קריאות משלכם. בהמשך מופיעה דוגמה למכונה וירטואלית ב-Google Cloud.
הערה: כדי ששרת ה-TURN יפעל במכונה וירטואלית ב-Google Cloud, חשוב להגדיר את כלל חומת האש של המכונה הווירטואלית כך שיאפשר תעבורת נתונים ביציאות TCP ו-UDP 3478 ו-3479.
- מתקינים את שרת coturn:
sudo apt install coturn systemctl stop coturn echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
- משנים את
/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
- משנים את קובץ ה-YAML של Docker Compose כך שיכלול את הגדרת ה-TURN:
cd android-emulator-container-script nano js/docker/docker-compose-build.yaml
- מוסיפים את שתי שורות הסביבה הבאות בקטע של הסימולטור:
shm_size: 128M expose: - "8554" + environment: + - TURN=printf $SNIPPET
- מפעילים מחדש את שירות 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