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

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

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

איך מתחילים ומפסיקים סשן במסוף

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

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

  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  (ethernet and cellular only)
    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: מציג רשימה של כל קובצי ה-snapshot השמורים.
  • save name: שמירת ה-snapshot בתור name.
  • load name: טעינת קובץ ה-snapshot שצוין.
  • delete name: מחיקת קובץ ה-snapshot עם השם.

בדוגמה הבאה נשמרת תמונת מצב בשם 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 (נתוני תיקון של מערכת מיקום גלובלית) שמקבל את השעה, המיקום ונתוני התיקון של מקלט 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 ללחיצה על מקש ולשחרור מקש:
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} מגדיר את מצב הטעינה של מתאם ה-AC ל-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: EVDO, שמשתמש במהירות של 75,000 להעלאה ו-280,000 להורדה.
  • full: מהירות ללא הגבלה, אבל תלויה במהירות החיבור של המחשב.
  • num: מגדיר קצב מדויק בקילוביט לשנייה שמשמש גם להעלאה וגם להורדה.
  • up:down: הגדרת שיעורים מדויקים בקילוביט לשנייה להעלאה ולהורדה בנפרד.

כדי להגדיר את מהירות הרשת בהפעלת האמולטור, משתמשים ב-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 או שיחה יוצאת אל 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: קורא את המינוי מ-Removable User Identity Module (RUIM).
cdma prl_version version הפקת פלט של הגרסה הנוכחית של רשימת הנדידה המועדפת (PRL). מספר הגרסה הוא של מסד הנתונים של PRL שמכיל מידע שמשמש במהלך תהליך הבחירה והרכישה של המערכת.
ניהול חיישנים באמולטור תיאור
הפקודות האלה קשורות לחיישנים שזמינים ב-AVD. בנוסף לשימוש בפקודה sensor, אפשר לראות ולשנות את ההגדרות באמולטור במסך Virtual sensors בכרטיסיות Accelerometer ו-Additional sensors.
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.

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

sms send 4085555555 hi there

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

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

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

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

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

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

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

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

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