שליחת פקודות במסוף האמולטור

כל מכשיר וירטואלי פועל מספק מסוף שמאפשר לך להריץ שאילתות על האמולציה ולשלוט בה את סביבת המכשיר. לדוגמה, אפשר להשתמש במסוף כדי לנהל הפניה אוטומטית ליציאה אחרת, הוספת רשת ומאפיינים של אירועי טלפוניה בזמן שהאפליקציה פועלת באמולטור.

בפקודות הבאות נדרש אמולטור פועל. לקבלת מידע נוסף מידע על הפעלת אמולטור, הפעלת אפליקציות באמולטור Android מפעילים את האמולטור משורת הפקודה.

התחלה והפסקה של סשן במסוף

כדי לגשת למסוף ולהזין פקודות מחלון הטרמינל, משתמשים ב-telnet כדי להתחבר ליציאת המסוף ולספק את אסימון האימות. בכל פעם שהמסוף מוצג אוקיי, האפליקציה מוכנה לקבלת פקודות. אין הנחיה אופיינית.

כדי להתחבר למסוף של מכשיר וירטואלי פועל:

  1. פותחים חלון טרמינל ומזינים את הפקודה הבאה:
  2. telnet localhost console-port

    בכותרת של חלון האמולטור מצוין מספר היציאה של המסוף כשהוא פועל בחלון נפרד, אבל לא במהלך הפעלה בחלון כלים. לדוגמה, כותרת החלון של אמולטור שמשתמש ביציאה 5554 במסוף יכול להיות Pixel8_API_34:5554. כמו כן, הפקודה adb devices מדפיסה רשימה של מכשירים וירטואליים פועלים ומספרי היציאות של המסוף שלהם. מידע נוסף זמין במאמר הבא: שאילתות על מכשירים.

    הערה: האמולטור מאזין לחיבורים ביציאות 5554 עד 5585 ומקבל חיבורים מ-localhost בלבד.

  3. אחרי שבמסוף יוצג OK, מזינים את הפקודה auth auth_token.
  4. לפני שניתן להזין פקודות במסוף, צריך להיכנס למסוף האמולטור נדרש אימות. חובה על auth_token תואם לתוכן של הקובץ .emulator_console_auth_token בספריית הבית שלך.

    אם הקובץ הזה לא קיים, telnet localhost console-port יוצר את הקובץ שמכיל אסימון אימות שנוצר באופן אקראי. כדי להשבית מוחקים את האסימון מ .emulator_console_auth_token או ליצור קובץ ריק אם הוא לא קיים.

  5. אחרי החיבור למסוף, מזינים פקודות של המסוף.
  6. צריך להזין help, help command או help-verbose כדי לראות רשימה של פקודות במסוף ולקבל מידע על פקודות.

  7. כדי לצאת מהסשן של המסוף, מזינים quit או exit.

סשן לדוגמה:

$ telnet localhost 5554
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: Authentication required
Android Console: type 'auth <auth_token>' to authenticate
Android Console: you can find your <auth_token> in
'/Users/me/.emulator_console_auth_token'
OK
auth 123456789ABCdefZ
Android Console: type 'help' for a list of commands
OK
help-verbose
Android console command help:
    help|h|?         Prints a list of commands
    help-verbose     Prints a list of commands with descriptions
    ping             Checks if the emulator is alive
    automation       Manages emulator automation
    event            Simulates hardware events
    geo              Geo-location commands
    gsm              GSM related commands
    cdma             CDMA related commands
    crash            Crashes the emulator instance
    crash-on-exit    Simulates crash on exit for the emulator instance
    kill             Terminates the emulator instance
    restart          Restarts the emulator instance
    network          Manages network settings
    power            Power related commands
    quit|exit        Quits control session
    redir            Manages port redirections
    sms              SMS related commands
    avd              Controls virtual device execution
    qemu             QEMU-specific commands
    sensor           Manages emulator sensors
    physics          Manages physical model
    finger           Manages emulator finger print
    debug            Controls the emulator debug output tags
    rotate           Rotates the screen clockwise by 90 degrees
    screenrecord     Records the emulator's display
    fold             Folds the device
    unfold           Unfolds the device
    multidisplay     Configures the multi-display
    nodraw           turn on/off NoDraw mode. (experimental)
    resize-display   resize the display resolution to the preset size
    virtualscene-image  customize virtualscene image for virtulscene camera
    proxy            manage network proxy server settings
    phonenumber      set phone number for the device


try 'help <command>' for command-specific help
OK
exit
Connection closed by foreign host.

מסמך עזר בנושא פקודה של אמולטור

בטבלה הבאה מתוארות הפקודות במסוף האמולטור עם הפרמטרים והערכים שלהן:

טבלה 1. פקודות במסוף האמולטור

פקודות כלליות תיאור
avd {stop|start|status|name} שאילתות, שולטות ומנהלות את המכשיר הווירטואלי באופן הבא:
  • stop: הפסקת ההפעלה של המכשיר.
  • start: התחלת ההפעלה של המכשיר.
  • status: שאילתות לגבי הסטטוס של המכשיר הווירטואלי, שיכול להיות running או stopped.
  • name: שליחת שאילתה על שם המכשיר הווירטואלי.
avd snapshot {list|save name|load name|delete name} שומר ומשחזר את מצב המכשיר בתמונות מצב, באופן הבא:
  • list: רשימה של כל תמונות המצב שנשמרו.
  • save name: שמירת תמונת המצב בשם name.
  • load name: טעינה של קובץ ה-snapshot.
  • delete name: מחיקת תמונת המצב עם השם.

בדוגמה הבאה נשמרת תמונת מצב עם השם firstactivitysnapshot:

avd snapshot save firstactivitysnapshot
fold מקפל את המכשיר כדי להציג את ההגדרות האישיות של המסך הקטן יותר, אם המכשיר מתקפל שלא מקופל כרגע.
unfold פותח את המכשיר כדי להציג את התצורה של המסך הגדול יותר, אם המכשיר מתקפל מצב מקופל כרגע.
kill סוגר את המכשיר הווירטואלי.
ping הפונקציה בודקת אם המכשיר הווירטואלי פועל.
rotate סיבוב ה-AVD נגד כיוון השעון במרווחים של 45 מעלות.
לקרוס את האמולטור תיאור
crash קריסת האמולטור במהלך הפעלת האפליקציה.
crash-on-exit קריסת האמולטור כשהאפליקציה יוצאת.
תגים של ניפוי באגים תיאור
debug tags ...

המתג מפעיל או משבית הודעות ניפוי באגים מחלקים מסוימים של האמולטור. הפרמטר tags חייב להיות ערך מרשימת התגים לניפוי באגים שמופיעים כאשר בהרצת emulator -help-debug-tags. לקבלת מידע נוסף על האפשרות -help-debug-tags, יש לעיין בטבלה של אפשרויות נפוצות.

הדוגמה הבאה מפעילה את התג radio:

debug radio
הפניית יציאה תיאור
redir list בתיבת הדו-שיח הזו מוצגת רשימת הניתוב מחדש הנוכחי של השקע.
redir add protocol:host-port:guest-port המערכת מוסיפה הפניה אוטומטית חדשה ליציאה אחרת, באופן הבא:
  • protocol: חייב להיות tcp או udp.
  • host-port: מספר היציאה שייפתח אצל המארח.
  • guest-port: מספר היציאה שאליו לנתב את הנתונים אמולטור.
redir del protocol:host-port מחיקת הפניה אוטומטית ליציאה אחרת.
  • protocol: חייב להיות tcp או udp.
  • host-port: מספר היציאה שייפתח אצל המארח.
מיקום גיאוגרפי תיאור

הגדרה של המיקום הגיאוגרפי המדווח לאפליקציות שפועלות בתוך אמולטור באמצעות שליחת תיקון GPS לאמולטור.

אפשר לבצע אחת מהפקודות הבאות של geo ברגע שמתבצע אימות וירטואלי המכשיר פועל. האמולטור מגדיר את המיקום שמזינים על ידי יצירת ספק מיקום מדומה. הזה הספק מגיב לפונקציות המאזינים למיקום שהוגדרו על ידי האפליקציות, ומספק את המיקום LocationManager. כל אפליקציה יכולה לשלוח שאילתה למנהל המיקומים כדי לקבל את תיקון ה-GPS הנוכחי של המכשיר האמולציה על ידי התקשרות LocationManager.getLastKnownLocation("gps")

geo fix longitude latitude [altitude] [satellites] [velocity] שולח תיקון GPS פשוט לאמולטור. יש לציין longitude ו-latitude במעלות עשרוניות. צריך להשתמש במספר מ-1 עד 12 כדי לציין את המספר satellites לשימוש כדי לקבוע את המיקום, ולציין את altitude במטרים ו velocity בקשר.
geo nmea sentence נשלחת משפט NMEA 0183 למכשיר האמולציה כאילו הוא נשלח ממערכת אמולציה מודם GPS. תחילת sentence עם '$GP'. רק '$GPGGA' ו-$GPRCM כרגע יש תמיכה במשפטים. הדוגמה הבאה הוא משפט GPGGA (Global Positioning System Fix Data) שמקבל את שעה, מיקום ותיקון נתונים למקלט GPS:
geo nmea $GPGGA ,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx
אירועי חומרה מזויפים תיאור
event types בתיבת הדו-שיח הזו מפורטים כל סוגי האירועים המזויפים. באירועים שכוללים קודים, מספר הקודים מופיע ב סוגריים בצד ימין.

event types
event <type> can be an integer or one of the following aliases:
    EV_SYN
    EV_KEY    (405 code aliases)
    EV_REL    (2 code aliases)
    EV_ABS    (27 code aliases)
    EV_MSC
    EV_SW     (4 code aliases)
    EV_LED
    EV_SND
    EV_REP
    EV_FF
    EV_PWR
    EV_FF_STATUS
    EV_MAX
OK
        

event send types [types ...] נשלחים נתונים של סוג אירוע מזויף אחד או יותר.
event codes type בתיבת הדו-שיח הזו מפורטים קודי האירועים של סוג האירוע המזויף שצוין.
event send type[:code]:[value] [...] נשלחים אירועים מזויפים אחד או יותר עם קודים אופציונליים וערכי קוד.

כדי לגלות איזה אירוע בדיוק לשלוח, אפשר להשתמש בפקודה adb בזמן לחיצה ידנית על הלחצנים באמולטור.

אלה האירועים שנוצרים כשלוחצים על לחצן ההפעלה:

adb shell getevent -lt

/dev/input/event12: EV_KEY       KEY_POWER            DOWN
/dev/input/event12: EV_SYN       SYN_REPORT           00000000
/dev/input/event12: EV_KEY       KEY_POWER            UP
/dev/input/event12: EV_SYN       SYN_REPORT           00000000
      
לדוגמה, כדי לדמות לחיצה ארוכה על לחצן ההפעלה, שני אירועי EV_KEY ל-keydown ו-keyup:
event send EV_KEY:KEY_POWER:0
OK
event send EV_KEY:KEY_POWER:1
OK
      

event text message הפונקציה שולחת מחרוזת של תווים שמדמות לחיצות על מקשים. ההודעה חייבת להיות במחרוזת UTF-8. מתבצע מיפוי הפוך של פוסטים ב-Unicode בהתאם למקלדת המכשיר הנוכחית, והם לא נתמכים התווים נמחקים ברקע.
אמצעי בקרה למצב ההפעלה של המכשיר תיאור
power display הצגת מצב הסוללה והמטען.
power ac {on|off} הגדרת מצב טעינה של מיזוג אוויר ל-on או ל-off.
power status {unknown|charging|discharging|not-charging|full} שינוי סטטוס הסוללה כפי שצוין.
power present {true|false} הגדרת מצב הנוכחות של הסוללה.
power health {unknown|good|overheat|dead|overvoltage|failure} הגדרת מצב תקינות הסוללה.
power capacity percent הגדרת קיבולת הסוללה שנותרה כאחוז בין 0 ל-100.
סטטוס החיבור לרשת תיאור
network status בדיקת סטטוס הרשת ומאפייני ההשהיה והמהירות הנוכחיים.
network delay latency

שינוי זמן האחזור של הרשת באמולציה.

האמולטור מאפשר לדמות רמות שונות של זמן אחזור ברשת, כדי לבדוק בסביבה שאופיינית יותר לתנאי הפעילות בפועל. אפשר להגדיר רמת זמן אחזור או טווח בזמן ההפעלה של האמולטור, או להשתמש כדי לשנות את זמן האחזור בזמן שהאפליקציה פועלת באמולטור.

הפורמט של רשת latency הוא אחד מהבאים (המספרים הם אלפיות שנייה):

פורמט זמן האחזור של הרשת:

  • gprs: GPRS, עם טווח זמן אחזור של 150 מינימום ו-550 מקסימום.
  • edge: EDGE/EGPRS, עם טווח זמן אחזור של 80 מינימום ו-400 מקסימום.
  • umts: UMTS/3G, עם טווח זמן אחזור של 35 מינימום ו-200 מקסימום.
  • none: ללא זמן אחזור.
  • num: אמולציה של זמן האחזור שצוין באלפיות השנייה.
  • min:max: אמולציה של טווח זמן האחזור שצוין.

כדי להגדיר זמן אחזור בהפעלה של האמולטור, יש להשתמש ברכיב -netdelay אפשרות אמולטור עם רכיב הערך של latency נתמך, כפי שמצוין בזמן האחזור של הרשת הקודם רשימת הפורמטים. הנה כמה דוגמאות:

emulator -netdelay gprs
emulator -netdelay 40,100

כדי לבצע שינויים בעיכוב הרשת בזמן שהאמולטור פועל, צריך להתחבר למסוף ולהשתמש הפקודה netdelay עם ערך latency נתמך לרשימה הקודמת של פורמט זמן האחזור של הרשת.

network delay gprs
network delay 40 100
network speed speed האמולטור מאפשר לדמות קצבי העברה שונים ברשת.

אפשר להגדיר קצב או טווח העברה בהפעלה של האמולטור, או להשתמש במסוף כדי שינוי הקצב בזמן שהאפליקציה פועלת באמולטור.

הפורמט של הרשת speed הוא אחד מהבאים (המספרים הם קילוביט לשנייה):

פורמט מהירות הרשת:

  • gsm: GSM/CSD, עם מהירות של 14.4 ומעלה ו-14.4 למטה.
  • hscsd: כונן HSCSD, עם מהירות של 14.4 למעלה ו-43.2 למטה.
  • gprs: GPRS, עם מהירות של 40.0 ומעלה ו-80.0 ומטה.
  • edge: EDGE/EGPRS, עם מהירות של 118.4 ומעלה ו-236.8 ומטה.
  • umts: UMTS/3G, עם מהירות של 128.0 ומעלה ו-1920 ומטה.
  • hsdpa: HSDPA, המשתמש במהירות של 348.0 כלפי מעלה ומהירות של 14,400.0 כלפי מטה.
  • lte: LTE, עם מהירות של 58,000 ומעלה ו-173,000 ירידה.
  • evdo: מדד זה מציג מהירות של 75,000 ומעלה וירידה של 280,000 שניות.
  • full: מהירות בלתי מוגבלת, אבל תלויה במהירות החיבור של במחשב.
  • num: הגדרת קצב מדויק בקילוביט לשנייה (Kbps) לשימוש בשתי ההעלאות ולהוריד.
  • up:down: הגדרת קצבי הלב המדויקים ב-Kbps לשנייה עבור מעלים ומורידים בנפרד.

כדי להגדיר את מהירות הרשת בהפעלה של האמולטור, צריך להשתמש ב-netspeed אפשרות אמולטור עם רכיב הערך של speed נתמך, כמו בפורמט מהירות הרשת הקודם חדשה. הנה כמה דוגמאות:

emulator -netspeed gsm @Pixel_API_26
emulator -netspeed 14.4,80 @Pixel_API_26

כדי לערוך שינויים במהירות הרשת בזמן שהאמולטור פועל, צריך להתחבר למסוף ולהשתמש בפקודה network speed עם הערך speed מהרשימה הקודמת של פורמט מהירות הרשת.

network speed 14.4 80
network capture {start|stop} file שליחת חבילות לקובץ. הרשימה הבאה מתארת את הפרמטרים ערכי הפרמטרים:
  • start file: תחילת שליחת חבילות לקובץ שצוין.
  • stop file: הפסקה של שליחת חבילות לקובץ שצוין.
אמולציית טלפוניה תיאור
האמולטור של Android כולל מודם GSM ו-CDMA משלו, שמאפשר לדמות טלפוניה הפונקציות באמולטור. לדוגמה, באמצעות GSM אפשר לדמות שיחות טלפון נכנסות ולסיים את חיבורי הנתונים. ב-CDMA, אתם מספקים מקור מינויים רשימה בנדידה. מערכת Android מטפלת בשיחות הדמיות בדיוק כפי שהיא מטפלת בשיחות בפועל. האמולטור לא תומך באודיו של שיחה.
gsm {call|accept|cancel|busy} phonenumber אלה הפרמטרים gsm:
  • call: הדמייה של שיחת טלפון נכנסת החל מ-phonenumber.
  • accept: מקבלת שיחה נכנסת מאת phonenumber ומשנה את מצב השיחה ל-active. אפשר לשנות את מצב השיחה ל-active רק כאשר המצב הנוכחי הוא waiting או held.
  • cancel: סיום שיחת טלפון נכנסת או יוצאת שיחת טלפון אל phonenumber.
  • busy: סגירת שיחה יוצאת אל phonenumber ומשנה את מצב השיחה לbusy. אפשר לשנות את מצב השיחה ל-busy רק כשהמצב הנוכחי שלו הוא waiting.
gsm {data|voice} state הפקודה data state משנה את המצב של חיבור הנתונים GPRS, והפקודה data voice state משנה את המצב של קול ה-GPRS באופן הבא:
  • unregistered: אין רשת זמינה.
  • home: ברשת מקומית, ללא נדידה.
  • roaming: ברשת בנדידה.
  • searching: מתבצע חיפוש של רשתות.
  • denied: שיחות חירום בלבד.
  • off: בדיוק כמו unregistered.
  • on: בדיוק כמו home.
gsm hold שינוי מצב השיחה ל-hold. אפשר לשנות קריאה למצב hold רק כשהמצב הנוכחי שלו הוא active או waiting.
gsm list רשימה של כל השיחות הנכנסות והיוצאות והמצב שלהן.
gsm status דיווח על מצב הנתונים/הקול הנוכחי של GSM. הערכים הם אלה כפי שמתואר בשביל הפקודות voice ו-data.
gsm signal {rssi|ber} שינוי עוצמת האות המדווחת (rssi) ושיעור שגיאות העברת הנתונים (ber) ב-15 הבאים שניות מרגע העדכון. ברשימה הבאה מתוארים הפרמטרים והערכים שלהם:
  • הטווח של rssi הוא 0 עד 31 ו-99 אם הערך לא ידוע.
  • הטווח של ber הוא 0 עד 7 ו-99 אם הערך לא ידוע.
gsm signal-profile num הגדרת הפרופיל של עוצמת האות. num הוא מספר בין 0 ל-4.
cdma ssource source מגדיר את מקור המינויים הנוכחי ל-CDMA, שבו source היא רשימת היתרים מבוססת-רשת שכוללת את הקטע המנויים של ספק ה-CDMA והערכים שלהם, כך:
  • nv: קריאת המינויים מזיכרון RAM לא נדיף.
  • ruim: קריאת המינוי ממודול זהות המשתמש להסרה (RUIM).
cdma prl_version version הצגת הגרסה הנוכחית של רשימת הנדידה המועדפת (PRL). מספר הגרסה הוא של ה-PRL מסד נתונים שמכיל מידע ששימש בתהליך הבחירה והרכישה של המערכת.
ניהול החיישנים באמולטור תיאור
הפקודות האלה קשורות אילו חיישנים זמינים ב-AVD. מלבד השימוש בפקודה sensor, יכול לראות ולשנות את ההגדרות באמולטור במסך חיישנים וירטואליים הכרטיסיות מד תאוצה וחיישנים נוספים.
sensor status בתיבת הדו-שיח הזו מפורטים כל החיישנים והסטטוס שלהם. הדוגמה הבאה היא פלט הפקודה sensor status:
sensor get sensor-name קבלת ההגדרות של sensor-name. הדוגמה הבאה מקבלת ערך של חיישן התאוצה:
sensor get acceleration
acceleration = 2.23517e-07:9.77631:0.812348

ערכי acceleration שמופרדים בנקודתיים(:) מתייחסים ל-x, ל-y ול-z של החיישנים הווירטואליים.

sensor set sensor-name value-x:value-y:value-z מגדיר את הערכים של sensor-name. הדוגמה הבאה מגדירה את התוכן חיישן תאוצה לערכי x, y ו-z שמופרדות בנקודתיים.
sensor set acceleration 2.23517e-07:9.77631:0.812348
אמולציית SMS תיאור
sms send sender-phone-number textmessage יצירת אמולציה של הודעת SMS נכנסת. הרשימה הבאה מתארת את הפרמטרים הערכים שלהם:
  • sender-phone-number: מכיל מחרוזת מספרית שרירותית.
  • textmessage: הודעת ה-SMS.

לפי הדוגמה הבאה נשלחת ההודעה "שלום" למספר הטלפון 4085555555:

sms send 4085555555 hi there

המסוף מעביר את הודעת ה-SMS ל-framework של Android, שמעביר אותה אפליקציה באמולטור שמטפל ב-SMS, כמו אפליקציית Messages. אם מעבירים 10 מספרים, שהאפליקציה מציגה אותו כמספר טלפון. מחרוזות מספר ארוכות או קצרות יותר מציגות את הדרך. ששלחת אותם.

סימולציה של טביעת אצבע תיאור
finger touch fingerprint-id הדמייה של אצבע שנגעת בחיישן.
finger remove הדמיה של הסרת אצבע.

לקבלת הוראות לשימוש בפקודות האלה, קראו את הקטע הבא על הדמיה ואימות של טביעות אצבע

סימולציה ואימות של טביעת אצבע

איור 1. מסך לאימות טביעת אצבע.

משתמשים בפקודה finger כדי לדמות ולאמת אימות באמצעות טביעת אצבע אפליקציה. צריך כלים ל-SDK מגרסה 24.3 ואילך ו-Android מגרסה 6.0 (רמת API 23) ואילך.

כדי לדמות אימות של טביעת אצבע ולאמת אותו, מבצעים את השלבים הבאים:

  1. אם עדיין אין לך מזהה טביעת אצבע, צריך לרשום טביעת אצבע חדשה באמולטור בחירה באפשרות הגדרות > אבטחה > טביעת אצבע וביצוע של הוראות הרשמה.
  2. הגדרת האפליקציה לקבלת הסכמה טביעת אצבע אימות. לאחר ביצוע ההגדרה הזו, במכשיר תוצג טביעת האצבע מסך האימות.
  3. בזמן שהאפליקציה מציגה את המסך של אימות טביעת האצבע, עוברים אל המסוף ו מזינים את הפקודה finger touch ואת מזהה טביעת האצבע שיצרתם. הזה מדמה מגע באצבע.
  4. לאחר מכן, מזינים את הפקודה finger remove כדי לדמות את הסרת האצבע.

    האפליקציה אמורה להגיב כאילו משתמש נגע ואז הסיר את האצבע מחיישן טביעות אצבע.