Android Debug Bridge (adb)

Android Debug Bridge‏ (adb) הוא כלי גמיש בשורת הפקודה שמאפשר לתקשר עם מכשיר. הפקודה adb מאפשרת לבצע מגוון פעולות במכשיר, כמו התקנה של אפליקציות וניפוי באגים בהן. adb מספק גישה למעטפת Unix שבה אפשר להריץ מגוון פקודות במכשיר. זוהי תוכנית לקוח-שרת שכוללת שלושה רכיבים:

  • לקוח, ששולח פקודות. הלקוח פועל במכונה שלכם לפיתוח. אפשר להפעיל לקוח מסוף שורת פקודה באמצעות הפקודה adb.
  • דימון (adbd), שמריץ פקודות במכשיר. הדימון פועל בתור תהליך רקע בכל מכשיר.
  • שרת שמנהל את התקשורת בין הלקוח לבין הדימון. השרת פועל בתור תהליך רקע במכונה שלכם לפיתוח.

adb נכלל בחבילת Android SDK Platform Tools. מורידים את החבילה הזו באמצעות SDK Manager, שמתקין אותה ב-android_sdk/platform-tools/. אם אתם רוצים את חבילת Android SDK Platform Tools העצמאית, הורידו אותה מכאן.

במאמר הפעלת אפליקציות במכשיר חומרה מוסבר איך מחברים מכשיר לשימוש דרך adb, כולל איך משתמשים בכלי לסיוע בחיבור כדי לפתור בעיות נפוצות.

איך פועל adb

כשמפעילים לקוח adb, הלקוח בודק קודם אם כבר פועל תהליך שרת של adb. אם לא, הוא מתחיל את תהליך השרת. כשהשרת מופעל, הוא מתחבר ליציאת ה-TCP המקומית 5037 ומקשיב לפקודות שנשלחות מלקוחות adb.

הערה: כל לקוחות adb משתמשים ביציאה 5037 כדי לתקשר עם השרת adb.

לאחר מכן, השרת מגדיר חיבורים לכל המכשירים שפועלים. הוא מאתר את המהדמנים על ידי סריקת יציאות בעלות מספרים אי זוגיים בטווח 5555 עד 5585, שהוא הטווח שבו נעשה שימוש ב-16 המהדמנים הראשונים. כשהשרת מוצא דימון (daemon) של adb (adbd), הוא מגדיר חיבור ליציאה הזו.

כל אמולטור משתמש בשתי יציאות רצופות – יציאה בעלת מספר זוגי לחיבורי מסוף ויציאה בעלת מספר אי זוגי לחיבורי adb. לדוגמה:

אמולטור 1, מסוף: 5554
אמולטור 1, adb: 5555
אמולטור 2, מסוף: 5556
אמולטור 2, adb: 5557
וכן הלאה.

כפי שמוצג, האמולטור שמחובר ל-adb ביציאה 5555 הוא זהה לאמולטור שהמסוף שלו מקשיב ביציאה 5554.

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

הפעלת ניפוי באגים באמצעות adb במכשיר

כדי להשתמש ב-adb עם מכשיר שמחובר באמצעות USB, צריך להפעיל את ניפוי הבאגים ב-USB בהגדרות המערכת של המכשיר, בקטע אפשרויות למפתחים. ב-Android 4.2 ואילך (רמה 17 של API ואילך), המסך אפשרויות למפתחים מוסתר כברירת מחדל. כדי להציג אותו, מפעילים את האפשרויות למפתחים.

עכשיו אפשר לחבר את המכשיר באמצעות USB. כדי לוודא שהמכשיר מחובר, מריצים את הפקודה adb devices מהספרייה android_sdk/platform-tools/. אם המכשיר מחובר, שם המכשיר יופיע בתור 'מכשיר'.

הערה: כשמחברים מכשיר עם Android מגרסה 4.2.2 (רמת API‏ 17) ואילך, מוצגת תיבת דו-שיח עם שאלה אם לקבל מפתח RSA שמאפשר ניפוי באגים דרך המחשב הזה. מנגנון האבטחה הזה מגן על מכשירי המשתמשים כי הוא מוודא שלא ניתן להריץ ניפוי באגים ב-USB ופקודות adb אחרות, אלא אם אתם יכולים לבטל את נעילת המכשיר ולאשר את תיבת הדו-שיח.

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

התחברות למכשיר באמצעות Wi-Fi

הערה: ההוראות הבאות לא חלות על מכשירי Wear שפועלת בהם מערכת Android 11 (רמת API ‏30). מידע נוסף זמין במדריך לניפוי באגים באפליקציות ל-Wear OS.

בגרסאות Android 11 ואילך (רמת API ‏30 ואילך) יש תמיכה בפריסה ובניפוי באגים של האפליקציה באופן אלחוטי מתחנת העבודה באמצעות Android Debug Bridge‏ (adb). לדוגמה, אפשר לפרוס אפליקציה שניתנת לניפוי באגים למספר מכשירים מרוחקים בלי שתצטרכו לחבר את המכשיר פיזית באמצעות USB. כך אין צורך לטפל בבעיות נפוצות בחיבור USB, כמו התקנת מנהל התקן.

לפני שמתחילים להשתמש בניפוי באגים אלחוטי, צריך לבצע את הפעולות הבאות:

  • מוודאים שמכונת העבודה והמכשיר מחוברים לאותה רשת אלחוטית.

  • מוודאים שבטלפון פועלת מערכת ההפעלה Android 11 (רמת API ‏30) ואילך, ובטלוויזיה וב-Wear OS פועלת מערכת ההפעלה Android 13 (רמת API ‏33) ואילך. מידע נוסף זמין במאמר איך בודקים את גרסת Android ומעדכנים אותה.

  • אם אתם משתמשים בסביבת הפיתוח המשולבת, חשוב לוודא שמותקנת אצלכם הגרסה האחרונה של Android Studio. אפשר להוריד אותו כאן.

  • בתחנת העבודה, מעדכנים לגרסת SDK Platform Tools האחרונה.

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

  1. מפעילים את האפשרויות למפתחים במכשיר.

  2. פותחים את Android Studio ובוחרים באפשרות Pair Devices Using Wi-Fi בתפריט ההגדרות של ההרצה.

    תפריט נפתח של הגדרות ריצה
    איור 1. תפריט ההגדרות של ההרצה.

    החלון התאמת מכשירים באמצעות Wi-Fi יופיע, כפי שמוצג באיור 2.

    צילום מסך של חלון הקופץ 'התאמת מכשירים באמצעות Wi-Fi'
    איור 2. חלון קופץ להתאמת מכשירים באמצעות קוד QR או קוד התאמה.
  3. במכשיר, מקישים על ניפוי באגים אלחוטי ומתאימים את המכשיר:

    צילום מסך של טלפון Pixel שבו מוצגת ההגדרה של מערכות ניפוי באגים אלחוטיות.
    איור 3. צילום מסך של ההגדרה ניפוי באגים אלחוטי בטלפון Google Pixel.
    1. כדי להתאים את המכשיר באמצעות קוד QR, בוחרים באפשרות התאמת מכשיר באמצעות קוד QR וסורקים את קוד ה-QR שמופיע בחלון הקופץ התאמת מכשירים באמצעות Wi-Fi שמוצג באיור 2.

    2. כדי להתאים את המכשיר באמצעות קוד התאמה, בוחרים באפשרות התאמת מכשיר באמצעות קוד התאמה בחלון הקופץ התאמת מכשירים דרך Wi-Fi. במכשיר, בוחרים באפשרות התאמה באמצעות קוד התאמה ומתעדים את הקוד בן 6 הספרות שמוצג. כשהמכשיר מופיע בחלון התאמת מכשירים באמצעות Wi-Fi, בוחרים באפשרות התאמה ומזינים את הקוד בן שש הספרות שמוצג במכשיר.

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

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

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

    צילום מסך של כרטיסי מידע למפתחים בהגדרות המהירות בטלפון Google Pixel.
    איור 5. ההגדרה כרטיסי מידע למפתחים בהגדרות המהירות מאפשרת להפעיל או להשבית במהירות את ניפוי הבאגים האלחוט.

חיבור Wi-Fi באמצעות שורת הפקודה

לחלופין, כדי להתחבר למכשיר באמצעות שורת הפקודה בלי Android Studio, פועלים לפי השלבים הבאים:

  1. מפעילים את האפשרויות למפתחים במכשיר, כפי שמתואר למעלה.

  2. מפעילים את ניפוי הבאגים האלחוטי במכשיר, כפי שמתואר למעלה.

  3. בתחנת העבודה, פותחים חלון טרמינל ועוברים אל android_sdk/platform-tools.

  4. כדי למצוא את כתובת ה-IP, מספר היציאה וקוד ההתאמה, בוחרים באפשרות התאמת מכשיר באמצעות קוד התאמה. שימו לב לכתובת ה-IP, למספר היציאה ולקוד ההתאמה שמוצגים במכשיר.

  5. מריצים את הפקודה adb pair ipaddr:port בטרמינל של תחנת העבודה. צריך להשתמש בכתובת ה-IP ובמספר היציאה שמופיעים למעלה.

  6. כשתתבקשו, מזינים את קוד ההתאמה כפי שמתואר בהמשך.

    צילום מסך של ההתאמה בשורת הפקודה.
    איור 6. תופיע הודעה על כך שהמכשיר הותאם בהצלחה.

פתרון בעיות בחיבור אלחוטי

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

בדיקה אם תחנת העבודה והמכשיר עומדים בדרישות המוקדמות

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

בדיקה אם יש בעיות ידועות אחרות

בהמשך מופיעה רשימה של הבעיות הידועות הנוכחיות בניפוי באגים אלחוטי (באמצעות adb או Android Studio) ואופן הפתרון שלהן:

  • לא ניתן להתחבר לרשת Wi-Fi: רשתות Wi-Fi מאובטחות, כמו רשתות Wi-Fi ארגוניות, עשויות לחסום חיבורי P2P ולא לאפשר לכם להתחבר דרך Wi-Fi. מנסים להתחבר באמצעות כבל או לרשת Wi-Fi אחרת (לא עסקית). אפשרות נוספת היא חיבור אלחוטי באמצעות adb connect ip:port על גבי tcp/ip (לאחר חיבור USB ראשוני), במקרה שאפשר להשתמש ברשת שאינה של הארגון.

  • adb בחיבור ל-Wi-Fi מושבת לפעמים באופן אוטומטי: המצב הזה יכול לקרות אם המכשיר עובר בין רשתות Wi-Fi או מתנתק מהרשת. כדי לפתור את הבעיה, צריך להתחבר מחדש לרשת.

  • המכשיר לא מתחבר אחרי ההתאמה: adb מסתמך על mDNS כדי לגלות מכשירים מותאמים ולהתחבר אליהם באופן אוטומטי. אם ההגדרות של הרשת או המכשיר לא תומכות ב-mDNS או שהן משביתות אותו, צריך להתחבר למכשיר באופן ידני באמצעות adb connect ip:port.

חיבור אלחוטי למכשיר אחרי חיבור USB ראשוני (האפשרות הזו זמינה רק ב-Android מגרסה 10 ואילך)

הערה: תהליך העבודה הזה רלוונטי גם ל-Android 11 (וגם לגרסאות מתקדמות יותר), אבל יש לזכור שהוא כולל גם חיבור *ראשוני* באמצעות USB פיזי.

הערה: ההוראות הבאות לא חלות על מכשירי Wear עם Android מגרסה 10 (רמת API 29) ומטה. מידע נוסף זמין במדריך בנושא ניפוי באגים באפליקציה ל-Wear OS.

בדרך כלל, adb מתקשר עם המכשיר דרך USB, אבל אפשר להשתמש ב-adb גם דרך Wi-Fi. כדי לחבר מכשיר עם Android מגרסה 10 (API ברמה 29) ומטה, צריך לבצע את השלבים הראשוניים הבאים באמצעות USB:

  1. מחברים את מכשיר Android ואת המחשב המארח adb לרשת Wi-Fi משותפת.
  2. הערה: חשוב לזכור שלא כל נקודות הגישה מתאימות. יכול להיות שתצטרכו להשתמש בנקודת גישה שחומת האש שלה מוגדרת כראוי לתמיכה ב-adb.

  3. מחברים את המכשיר למחשב המארח באמצעות כבל USB.
  4. מגדירים את מכשיר היעד להאזנה לחיבור TCP/IP ביציאה 5555:
    adb tcpip 5555
    
  5. מנתקים את כבל ה-USB מהמכשיר היעד.
  6. מוצאים את כתובת ה-IP של מכשיר Android. לדוגמה, במכשיר Nexus, אפשר למצוא את כתובת ה-IP בקטע הגדרות > מידע על הטאבלט (או מידע על הטלפון) > סטטוס > כתובת IP.
  7. מתחברים למכשיר לפי כתובת ה-IP שלו:
    adb connect device_ip_address:5555
    
  8. מוודאים שמחשב המארח מחובר למכשיר היעד:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

המכשיר מחובר עכשיו ל-adb.

אם החיבור של adb למכשיר שלכם יתנתק:

  • מוודאים שהמארח עדיין מחובר לאותה רשת Wi-Fi שממנה מחובר מכשיר Android.
  • כדי להתחבר מחדש, מבצעים שוב את שלב adb connect.
  • אם הבעיה נמשכת, מאפסים את המארח adb:
    adb kill-server
    

    לאחר מכן מתחילים מחדש.

שליחת שאילתה לגבי מכשירים

לפני שמפעילים פקודות adb, כדאי לדעת אילו מכונות של מכשירים מחוברות לשרת adb. יוצרים רשימה של מכשירים מחוברים באמצעות הפקודה devices:

  adb devices -l
  

בתגובה, adb מדפיס את פרטי הסטטוס האלה לכל מכשיר:

  • מספר סידורי: adb יוצר מחרוזת כדי לזהות את המכשיר באופן ייחודי לפי מספר היציאה שלו. דוגמה למספר סידורי: emulator-5554
  • מצב: סטטוס החיבור של המכשיר יכול להיות אחד מהסטטוסים הבאים:
    • offline: המכשיר לא מחובר ל-adb או שהוא לא מגיב.
    • device: המכשיר מחובר לשרת adb. חשוב לזכור שהמצב הזה לא מעיד על כך שמערכת Android מופעלת באופן מלא, כי המכשיר מתחבר ל-adb בזמן שהמערכת עדיין מופעלת. אחרי ההפעלה, זהו המצב התפעולי הרגיל של המכשיר.
    • no device: אין מכשיר מחובר.
  • תיאור: אם תכללו את האפשרות -l, הפקודה devices תציין את סוג המכשיר. המידע הזה שימושי כשיש כמה מכשירים מחוברים, כדי שתוכלו להבדיל ביניהם.

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

$ adb devices
List of devices attached
emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64
emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86
0a388e93      device usb:1-1 product:razor model:Nexus_7 device:flo

האמולטור לא מופיע ברשימה

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

  • השרת adb לא פועל.
  • משתמשים בפקודה emulator עם האפשרות -port או -ports עם ערך יציאה בעל מספר אי-זוגי בין 5554 ל-5584.
  • היציאה בעלת המספר הלא זוגי שבחרתם לא תפוסה, כך שניתן לבצע את חיבור היציאה במספר היציאה שצוין. אם היא תפוסה, הסימולטור עובר ליציאה אחרת שעומדת בדרישות שמפורטות בפסקה 2.
  • מפעילים את השרת adb אחרי שמפעילים את הסימולטור.

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

דוגמה 1: בסדרת הפקודות הבאה, הפקודה adb devices מפעילה את השרת adb, אבל רשימת המכשירים לא מופיעה.

מפסיקים את השרת adb ומזינים את הפקודות הבאות בסדר המוצג. בשם ה-AVD, נותנים שם AVD חוקי מהמערכת. כדי לקבל רשימה של שמות AVD, מקלידים emulator -list-avds. הפקודה emulator נמצאת בספרייה android_sdk/tools.

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5555
$ adb devices

List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

דוגמה 2: בסדרת הפקודות הבאה, adb devices מציגה את רשימת המכשירים כי שרת adb הופעל קודם.

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

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5557
$ adb start-server
$ adb devices

List of devices attached
emulator-5557 device

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

שליחת פקודות למכשיר ספציפי

אם פועלים כמה מכשירים, צריך לציין את מכשיר היעד כשמפעילים את הפקודה adb. כדי לציין את היעד, מבצעים את השלבים הבאים:

  1. משתמשים בפקודה devices כדי לקבל את המספר הסידורי של היעד.
  2. אחרי שמוצאים את המספר הסידורי, משתמשים באפשרות -s עם הפקודות adb כדי לציין את המספר הסידורי.
    1. אם אתם מתכוונים להפעיל הרבה פקודות adb, תוכלו להגדיר את משתנה הסביבה $ANDROID_SERIAL כך שיכיל את המספר הסידורי במקום זאת.
    2. אם משתמשים גם ב--s וגם ב-$ANDROID_SERIAL, הערך של -s מבטל את הערך של $ANDROID_SERIAL.

בדוגמה הבאה, מתקבלת רשימת המכשירים המחוברים, ואז המספר הסידורי של אחד מהמכשירים משמש להתקנת helloWorld.apk במכשיר הזה:

$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
0.0.0.0:6520  device

# To install on emulator-5555
$ adb -s emulator-5555 install helloWorld.apk
# To install on 0.0.0.0:6520
$ adb -s 0.0.0.0:6520 install helloWorld.apk

הערה: אם נותנים פקודה בלי לציין מכשיר יעד כשיש כמה מכשירים זמינים, ב-adb תוצג השגיאה "adb: more than one device/emulator".

אם יש לכם כמה מכשירים זמינים, אבל רק אחד מהם הוא אמולטור, תוכלו להשתמש באפשרות -e כדי לשלוח פקודות לאמולטור. אם יש כמה מכשירים אבל רק מכשיר חומרה אחד מחובר, משתמשים באפשרות -d כדי לשלוח פקודות למכשיר החומרה.

התקנת אפליקציה

אפשר להשתמש ב-adb כדי להתקין קובץ APK במהדמ או במכשיר מחובר באמצעות הפקודה install:

adb install path_to_apk

צריך להשתמש באפשרות -t עם הפקודה install כשמתקינים קובץ APK לבדיקה. למידע נוסף, ראו -t.

כדי להתקין כמה חבילות APK, משתמשים ב-install-multiple. האפשרות הזו שימושית אם מורידים מ-Play Console את כל קובצי ה-APK של האפליקציה למכשיר ספציפי, ואז רוצים להתקין אותם במהדמ או במכשיר פיזי.

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

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

הגדרת העברה ליציאה אחרת

משתמשים בפקודה forward כדי להגדיר העברה שרירותית ליציאה אחרת, שמעבירה בקשות ביציאת מארח ספציפית ליציאה אחרת במכשיר. בדוגמה הבאה מגדירים העברה של יציאת המארח 6100 ליציאת המכשיר 7100:

adb forward tcp:6100 tcp:7100

בדוגמה הבאה מגדירים העברה של יציאת המארח 6100 אל local:logd:

adb forward tcp:6100 local:logd

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

העתקת קבצים אל מכשיר וממנו

משתמשים בפקודות pull ו-push כדי להעתיק קבצים למכשיר וממנו. בניגוד לפקודה install, שמעתיקה רק קובץ APK למיקום ספציפי, הפקודות pull ו-push מאפשרות להעתיק ספריות וקבצים שרירותיים לכל מיקום במכשיר.

כדי להעתיק קובץ או ספרייה ואת ספריות המשנה שלהם מה המכשיר:

adb pull remote local

כדי להעתיק קובץ או ספרייה ואת ספריות המשנה שלהם אל המכשיר:

adb push local remote

מחליפים את local ו-remote בנתיב לקובץ או לתיקיית היעד במחשב הפיתוח (מקומי) ובמכשיר (מרחוק). לדוגמה:

adb push myfile.txt /sdcard/myfile.txt

עצירת שרת adb

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

כדי להפסיק את השרת adb, משתמשים בפקודה adb kill-server. לאחר מכן אפשר להפעיל מחדש את השרת באמצעות כל פקודת adb אחרת.

הפעלת פקודות adb

אפשר להריץ פקודות adb משורת הפקודה במכונה לפיתוח או מסקריפט באמצעות הפקודות הבאות:

adb [-d | -e | -s serial_number] command

אם פועל רק אמולטור אחד או שמחובר רק מכשיר אחד, הפקודה adb נשלחת למכשיר הזה כברירת מחדל. אם פועלים כמה מכשירי אמולציה ו/או מחוברים כמה מכשירים, צריך להשתמש באפשרות -d,‏ -e או -s כדי לציין את מכשיר היעד שאליו צריך לשלוח את הפקודה.

אפשר לראות רשימה מפורטת של כל הפקודות הנתמכות של adb באמצעות הפקודה הבאה:

adb --help

הפעלת פקודות מעטפת

אפשר להשתמש בפקודה shell כדי להפעיל פקודות במכשיר דרך adb או כדי להפעיל מעטפת אינטראקטיבית. כדי להפעיל פקודה אחת, משתמשים בפקודה shell באופן הבא:

adb [-d |-e | -s serial_number] shell shell_command

כדי להפעיל מעטפת אינטראקטיבית במכשיר, משתמשים בפקודה shell באופן הבא:

adb [-d | -e | -s serial_number] shell

כדי לצאת ממעטפת אינטראקטיבית, מקישים על Control+D או מקלידים exit.

ב-Android יש את רוב הכלים הרגילים של שורת הפקודה של Unix. כדי לקבל רשימה של הכלים הזמינים, משתמשים בפקודה הבאה:

adb shell ls /system/bin

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

ב-Android Platform Tools מגרסה 23 ואילך, הפקודה adb מטפלת בארגומנטים באותו אופן שבו הפקודה ssh(1) מטפלת בהם. השינוי הזה תיקן הרבה בעיות שקשורות להזרקת פקודות, ומאפשר להריץ בבטחה פקודות שמכילות מטא-תווים של מעטפת, כמו adb install Let\'sGo.apk. בעקבות השינוי הזה, גם הפרשנות של כל פקודה שמכילה תווים מטא של מעטפת השתנתה.

לדוגמה, adb shell setprop key 'two words' היא עכשיו שגיאה, כי המעטפת המקומית 'לוקחת' את המירכאות, והמכשיר רואה את הערך adb shell setprop key two words. כדי שהפקודה תפעל, צריך להוסיף פעמיים מירכאות, פעם אחת למעטפת המקומית ופעם אחת למעטפת המרוחקת, כמו שצריך לעשות עם ssh(1). לדוגמה, adb shell setprop key "'two words'" פועל כי המעטפת המקומית מקבלת את רמת הציטוט החיצונית, והמכשיר עדיין רואה את רמת הציטוט הפנימית: setprop key 'two words'. אפשר גם להשתמש בהימלטות, אבל בדרך כלל קל יותר להוסיף ציטוט פעמיים.

כדאי לעיין גם בכלי שורת הפקודה Logcat, ששימושי למעקב אחרי יומן המערכת.

מנהל פעילות השיחות

בתוך מעטפת adb, אפשר להשתמש בכלי של מנהל הפעילויות (am) כדי להוציא פקודות ולבצע פעולות שונות במערכת, כמו הפעלת פעילות, עצירת תהליך בכוח, שידור כוונה, שינוי מאפייני המסך של המכשיר ועוד.

בתור מעטפת, התחביר של am הוא:

am command

אפשר גם להפעיל פקודת ניהול פעילות ישירות מ-adbבלי להיכנס למעטפת מרוחק. לדוגמה:

adb shell am start -a android.intent.action.VIEW

טבלה 1. הפקודות הזמינות לניהול הפעילויות

הוראה תיאור
start [options] intent הפעלת Activity שצוין על ידי intent.

מפרט של ארגומנטים של כוונה

האפשרויות הן:

  • -D: הפעלת ניפוי הבאגים.
  • -W: ממתינים לסיום ההשקה.
  • --start-profiler file: מפעילים את הכלי לניתוח ביצועים ושולחים את התוצאות אל file.
  • -P file: כמו --start-profiler, אבל יצירת הפרופיל נעצרת כשהאפליקציה עוברת למצב חוסר פעילות.
  • -R count: חוזרים על הפעלת הפעילות count פעמים. לפני כל חזרה, הפעילות בראש הרשימה תסתיים.
  • -S: סוגרים ידנית את אפליקציית היעד לפני שמתחילים את הפעילות.
  • --opengl-trace: הפעלת מעקב אחר פונקציות OpenGL.
  • --user user_id | current: ציון המשתמש שבו רוצים להריץ את הפקודה. אם לא מציינים משתמש, הפקודה תרוץ בתור המשתמש הנוכחי.
startservice [options] intent מפעילים את ה-Service שצוין ב-intent.

מפרט של ארגומנטים של כוונה

האפשרויות הן:

  • --user user_id | current: ציון המשתמש שבו רוצים להריץ את הסקריפט. אם לא מציינים שם, הפקודה מופעלת בתור המשתמש הנוכחי.
force-stop package מפסיקים בכוח את כל מה שמשוייך ל-package.
kill [options] package מבטלים את כל התהליכים שמשויכים ל-package. הפקודה הזו מחסלת רק תהליכים שאפשר להרוג בבטחה ולא ישפיעו על חוויית המשתמש.

האפשרויות הן:

  • --user user_id | all | current: ציון התהליכים של המשתמש שרוצים להרוג. אם לא יצוין, יימחקו כל התהליכים של המשתמשים.
kill-all סגירת כל תהליכי הרקע.
broadcast [options] intent שולחים כוונה לשידור.

מפרט של ארגומנטים של כוונה

האפשרויות הן:

  • [--user user_id | all | current]: מציינים את המשתמש שאליו רוצים לשלוח את ההודעה. אם לא יצוין, ההודעה תישלח לכל המשתמשים.
instrument [options] component מתחילים את המעקב באמצעות מכונה של Instrumentation. בדרך כלל היעד component הוא הטופס test_package/runner_class.

האפשרויות הן:

  • -r: הדפסת תוצאות גולמיות (אחרת, פענוח של report_key_streamresult). משתמשים ב-[-e perf true] כדי ליצור פלט גולמי למדידת ביצועים.
  • -e name value: מגדירים את הארגומנט name לערך value. לכלי להרצת בדיקות, -e testrunner_flag value[,value...] הוא פורמט נפוץ.
  • -p file: כתיבת נתוני הפרופיל ב-file.
  • -w: ממתינים לסיום המדידה לפני שמחזירים. חובה למפעילי בדיקות.
  • --no-window-animation: השבתת אנימציות של חלונות במהלך הריצה.
  • --user user_id | current: מציינים את הסביבה שבה פועלת כלי המדידה של המשתמשים. אם לא צוין, הפקודה תרוץ בתור המשתמש הנוכחי.
profile start process file מפעילים את הכלי לניתוח ביצועים ב-process, כותבים את התוצאות ב-file.
profile stop process עוצרים את הכלי למעקב אחר ביצועים ב-process.
dumpheap [options] process file יצירת גרסת dump של process, כתיבת file.

האפשרויות הן:

  • --user [user_id | current]: כשמוסיפים שם של תהליך, צריך לציין את המשתמש של התהליך שרוצים ליצור לו גרסת dump. אם לא צוין משתמש, המערכת תשתמש במשתמש הנוכחי.
  • -b [| png | jpg | webp]: יצירת גרסת dump של קובצי bitmap מזיכרון הגרפיקה (רמת API 35 ואילך). אפשר לציין את הפורמט של הפלט (ברירת המחדל היא PNG).
  • -n: יצירת גרסת dump של אשכול מקורי במקום אשכול מנוהל.
set-debug-app [options] package מגדירים את האפליקציה package לניפוי באגים.

האפשרויות הן:

  • -w: המתנה למעבד הבאגים כשהאפליקציה מופעלת.
  • --persistent: שמירה על הערך הזה.
clear-debug-app מוחקים את החבילה שהוגדרה בעבר לניפוי באגים באמצעות set-debug-app.
monitor [options] מתחילים לעקוב אחרי קריסות או אירועי ANR.

האפשרויות הן:

  • --gdb: הפעלת gdbserv ביציאה שצוינה בזמן קריסה/ANR.
screen-compat {on | off} package לשלוט במצב תאימות המסך של package.
display-size [reset | widthxheight] לשנות את גודל התצוגה במכשיר. הפקודה הזו עוזרת לבדוק את האפליקציה במסכים בגדלים שונים, על ידי חיקוי של רזולוציית מסך קטנה במכשיר עם מסך גדול, ולהפך.

דוגמה:
am display-size 1280x800

display-density dpi שינוי של צפיפות התצוגה במכשיר. הפקודה הזו עוזרת לבדוק את האפליקציה בצפיפות מסך שונה, על ידי חיקוי של סביבת מסך בצפיפות גבוהה באמצעות מסך בצפיפות נמוכה, ולהפך.

דוגמה:
am display-density 480

to-uri intent הדפסת מפרט הכוונה הנתון כ-URI.

מפרט של ארגומנטים של כוונה

to-intent-uri intent הדפסת מפרט הכוונה הנתון כ-URI מסוג intent:.

מפרט של ארגומנטים של כוונה

מפרט של ארגומנטים של כוונות

בפקודות של מנהל הפעילויות שכוללות את הארגומנט intent, אפשר לציין את הכוונה באמצעות האפשרויות הבאות:

קריאה למנהל החבילות (pm)

במעטפת adb, אפשר להשתמש בפקודות של הכלי של מנהל החבילות (pm) כדי לבצע פעולות ושאילתות על חבילות האפליקציות שמותקנות במכשיר.

בתור מעטפת, התחביר של pm הוא:

pm command

אפשר גם להריץ פקודה של מנהל חבילות ישירות מ-adbבלי להיכנס למעטפת מרוחק. לדוגמה:

adb shell pm uninstall com.example.MyApp

טבלה 2. הפקודות הזמינות של מנהל החבילות

הוראה תיאור
list packages [options] filter הדפסת כל החבילות, או רק את החבילות ששם החבילה שלהן מכיל את הטקסט ב-filter.

עכשיו אפשר:

  • -f: הצגת הקובץ המשויך.
  • -d: סינון כדי להציג רק חבילות מושבתות.
  • -e: סינון כדי להציג רק חבילות מופעלות.
  • -s: סינון כדי להציג רק חבילות מערכת.
  • -3: סינון כדי להציג רק חבילות של צד שלישי.
  • -i: בודקים את מנהל ההתקנה של החבילות.
  • -u: כולל חבילות שלא הותקנו.
  • --user user_id: מרחב הפעולה של המשתמש שאליו שולחים את השאילתה.
list permission-groups הדפסה של כל קבוצות ההרשאות הידועות.
list permissions [options] group הדפסה של כל ההרשאות הידועות, או רק של אלה שב-group.

עכשיו אפשר:

  • -g: ארגון לפי קבוצה.
  • -f: הדפסת כל המידע.
  • -s: סיכום קצר.
  • -d: הצגת רשימה של הרשאות מסוכנות בלבד.
  • -u: הצגת רשימה של ההרשאות שהמשתמשים יראו בלבד.
list instrumentation [options] הצגת רשימה של כל חבילות הבדיקה.

עכשיו אפשר:

  • -f: הצגת קובץ ה-APK של חבילת הבדיקה.
  • target_package: הצגת רשימה של חבילות הבדיקה של האפליקציה הזו בלבד.
list features הדפסת כל התכונות של המערכת.
list libraries הדפסת כל הספריות הנתמכות במכשיר הנוכחי.
list users הדפסת כל המשתמשים במערכת.
path package מדפיסים את הנתיב לקובץ ה-APK של package הנתון.
install [options] path התקנה של חבילה, שצוינה על ידי path, במערכת.

עכשיו אפשר:

  • -r: התקנה מחדש של אפליקציה קיימת, תוך שמירה על הנתונים שלה.
  • -t: מתן הרשאה להתקנה של חבילות APK לבדיקה. Gradle יוצר קובץ APK לבדיקה רק אם הרצתם או תיקנתם באגים באפליקציה, או אם השתמשתם בפקודה Build > Build APK ב-Android Studio. אם קובץ ה-APK נוצר באמצעות SDK של תצוגה מקדימה למפתחים, צריך לכלול את האפשרות -t עם הפקודה install אם מתקינים קובץ APK לבדיקה.
  • -i installer_package_name: מציינים את שם חבילת ההתקנה.
  • --install-location location: מגדירים את מיקום ההתקנה באמצעות אחד מהערכים הבאים:
    • 0: שימוש במיקום ברירת המחדל להתקנה.
    • 1: התקנה באחסון הפנימי של המכשיר.
    • 2: התקנה על מדיה חיצונית.
  • -f: התקנת החבילה בזיכרון הפנימי של המערכת.
  • -d: מתן הרשאה לשדרוג לאחור של קוד הגרסה.
  • -g: מעניקים את כל ההרשאות שמפורטות במניפסט של האפליקציה.
  • --fastdeploy: עדכון מהיר של חבילה מותקנת על ידי עדכון רק של החלקים ב-APK שהשתנו.
  • --incremental: מתקינים מספיק מה-APK כדי להפעיל את האפליקציה, בזמן שהנתונים הנותרים מועברים בסטרימינג ברקע. כדי להשתמש בתכונה הזו, צריך לחתום על ה-APK, ליצור קובץ APK Signature Scheme v4 ולהציב את הקובץ הזה באותה ספרייה שבה נמצא קובץ ה-APK. התכונה הזו נתמכת רק במכשירים מסוימים. האפשרות הזו מאלצת את adb להשתמש בתכונה או להיכשל אם היא לא נתמכת, עם מידע מפורט על הסיבה לכישלון. מוסיפים את האפשרות --wait כדי להמתין עד שה-APK מותקן במלואו לפני שמעניקים גישה אליו.

    --no-incremental מונע מ-adb להשתמש בתכונה הזו.

uninstall [options] package הסרת חבילה מהמערכת.

עכשיו אפשר:

  • -k: שמירת הנתונים והספריות של המטמון אחרי הסרת החבילה.
  • --user user_id: מזהה המשתמש שאליו מוסר האישור להסרת החבילה.
  • --versionCode version_code: האפליקציה תוסר רק אם קוד הגרסה שלה הוא קוד הגרסה שצוין.
clear package מחיקה של כל הנתונים שמשויכים לחבילה.
enable package_or_component מפעילים את החבילה או הרכיב הנתונים (כתובים כ "package/class").
disable package_or_component משביתים את החבילה או הרכיב הנתונים (כתובים כ "package/class").
disable-user [options] package_or_component

עכשיו אפשר:

  • --user user_id: המשתמש שרוצים להשבית.
grant package_name permission מעניקים הרשאה לאפליקציה. במכשירים עם Android 6.0 (רמת API ‏23) ואילך, ההרשאה יכולה להיות כל הרשאה שהוגדרה במניפסט של האפליקציה. במכשירים עם Android 5.1 (רמת API 22) וגרסאות קודמות, צריכה להיות הרשאה אופציונלית שמוגדרת על ידי האפליקציה.
revoke package_name permission לבטל הרשאה מאפליקציה. במכשירים עם Android 6.0 (רמת API ‏23) ואילך, ההרשאה יכולה להיות כל הרשאה שהוגדרה במניפסט של האפליקציה. במכשירים עם Android 5.1 (רמת API 22) וגרסאות קודמות, צריכה להיות הרשאה אופציונלית שמוגדרת על ידי האפליקציה.
set-install-location location שינוי מיקום ברירת המחדל להתקנה. ערכי מיקום:
  • 0: אוטומטי: המערכת תחליט מהו המיקום הטוב ביותר.
  • 1: פנימי: התקנה באחסון הפנימי של המכשיר.
  • 2: חיצוני: התקנה על מדיה חיצונית.

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

get-install-location הפונקציה מחזירה את מיקום ההתקנה הנוכחי. ערכים שמוחזרים:
  • 0 [auto]: המערכת תחליט מהו המיקום הטוב ביותר
  • 1 [internal]: התקנה באחסון הפנימי של המכשיר
  • 2 [external]: התקנה על מדיה חיצונית
set-permission-enforced permission [true | false] מציינים אם צריך לאכוף את ההרשאה הזו.
trim-caches desired_free_space חיתוך קבצים במטמון כדי להגיע לנפח האחסון הפנוי הנתון.
create-user user_name יוצרים משתמש חדש עם הערך של user_name, ומדפיסים את מזהה המשתמש החדש של המשתמש.
remove-user user_id הסרת המשתמש עם user_id הנתון, מחיקת כל הנתונים שמשויכים למשתמש הזה
get-max-users הדפסה של מספר המשתמשים המקסימלי שנתמך במכשיר.
get-app-links [options] [package]

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

  • none: לא תועד דבר לגבי הדומיין הזה
  • verified: הדומיין אומת בהצלחה
  • approved: אישור בכפייה, בדרך כלל דרך מעטפת
  • denied: נדחתה בכוח, בדרך כלל דרך מעטפת
  • migrated: אימות שנשמר מתשובה מדור קודם
  • restored: אימות שנשמר משחזור של נתוני משתמש
  • legacy_failure: נדחה על ידי גורם אימות מדור קודם, מסיבה לא ידועה
  • system_configured: אושרה באופן אוטומטי על ידי תצורת המכשיר
  • >= 1024: קוד שגיאה מותאם אישית, שספציפי לאימות המכשיר

האפשרויות הן:

  • --user user_id: כולל את הבחירות של המשתמשים. יש לכלול את כל הדומיינים, ולא רק את אלה שעברו אימות אוטומטי.
reset-app-links [options] [package]

איפוס מצב האימות של הדומיין לחבילה הנתונה, או לכל החבילות אם לא צוינה אף אחת.

  • package: החבילה שרוצים לאפס, או 'all' כדי לאפס את כל החבילות

האפשרויות הן:

  • --user user_id: כולל את הבחירות של המשתמשים. יש לכלול את כל הדומיינים, ולא רק את אלה שעברו אימות אוטומטי.
verify-app-links [--re-verify] [package]

שליחת בקשת אימות עבור package הנתון, או לכל החבילות אם לא צוין אף ערך. ההודעה נשלחת רק אם לא תועדה תשובה לחבילה בעבר.

  • --re-verify: שליחה גם אם נרשמה תשובה בחבילה
set-app-links [--package package] state domains

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

  • --package package: החבילה להגדרה, או 'הכול' כדי להגדיר את כל החבילות
  • state: הקוד להגדרת הדומיינים. הערכים החוקיים הם:
    • STATE_NO_RESPONSE (0): איפוס כאילו אף פעם לא תועדה תשובה.
    • STATE_SUCCESS (1): המערכת תתייחס לדומיין כאילו הוא אומת על ידי סוכן האימות של הדומיין. חשוב לזכור שסוכן האימות של הדומיין יכול לשנות את ההגדרה הזו.
    • STATE_APPROVED (2): המערכת תתייחס לדומיין כאילו הוא תמיד מאושר, ותימנע מסוכן האימות של הדומיין לשנות אותו.
    • STATE_DENIED (3): המערכת תתייחס לדומיין כאל דומיין שנדחה תמיד, ותימנע מסוכן האימות של הדומיין לשנות את הסטטוס.
  • domains: רשימה של דומיינים לשינוי, מופרדים בפסיקים, או 'all' כדי לשנות את כל הדומיינים.
set-app-links-user-selection --user user_id [--package package] enabled domains

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

  • --user user_id: המשתמש שרוצים לשנות את הבחירות שלו
  • --package package: החבילה שרוצים להגדיר
  • enabled: האם לאשר את הדומיין
  • domains: רשימה של דומיינים לשינוי, מופרדים בפסיקים, או 'all' כדי לשנות את כל הדומיינים
set-app-links-user-selection --user user_id [--package package] enabled domains

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

  • --user user_id: המשתמש שרוצים לשנות את הבחירות שלו
  • --package package: החבילה שרוצים להגדיר
  • enabled: האם לאשר את הדומיין
  • domains: רשימה של דומיינים לשינוי, מופרדים בפסיקים, או 'all' כדי לשנות את כל הדומיינים
set-app-links-allowed --user user_id [--package package] allowed

שינוי ההגדרה של טיפול בקישורים שאומתו באופן אוטומטי לחבילה.

  • --user user_id: המשתמש שעבורו רוצים לשנות את הבחירות
  • --package package: החבילה שרוצים להגדיר, או 'all' כדי להגדיר את כל החבילות. החבילות יוחזרו למצב ברירת המחדל אם לא יצוין שם חבילה.
  • allowed: true כדי לאפשר לחבילה לפתוח קישורים מאומתים באופן אוטומטי, false כדי להשבית
get-app-link-owners --user user_id [--package package] domains

הדפסת הבעלים של דומיין ספציפי עבור משתמש נתון, בסדר של תעדוף נמוך עד גבוה.

  • --user user_id: המשתמש שרוצים לשלוח עליו שאילתה
  • --package package: אפשר גם להדפיס את כל הדומיינים של האינטרנט שהוצהרו על ידי החבילה, או להדפיס את כל החבילות.
  • domains: רשימת דומיינים להרצת שאילתה, המופרדים באמצעות רווחים

קריאה למנהל מדיניות המכשיר (dpm)

כדי לפתח ולבדוק את האפליקציות לניהול המכשירים, אפשר להשתמש בפקודות של הכלי לניהול מדיניות המכשיר (dpm). אפשר להשתמש בכלי כדי לשלוט באפליקציית האדמין הפעילה או לשנות את נתוני הסטטוס של מדיניות במכשיר.

בתור מעטפת, התחביר של dpm הוא:

dpm command

אפשר גם להפעיל פקודה של מנהל מדיניות המכשיר ישירות מ-adb בלי להיכנס ל-shell מרחוק:

adb shell dpm command

טבלה 3 הפקודות הזמינות של מנהל מדיניות המכשיר

הוראה תיאור
set-active-admin [options] component הגדרת component כאדמין פעיל.

האפשרויות הן:

  • --user user_id: מציינים את משתמש היעד. אפשר גם להעביר את הערך --user current כדי לבחור את המשתמש הנוכחי.
set-profile-owner [options] component מגדירים את component כאדמין פעיל ואת החבילה שלו כבעלים של פרופיל של משתמש קיים.

האפשרויות הן:

  • --user user_id: מציינים את משתמש היעד. אפשר גם להעביר את הערך --user current כדי לבחור את המשתמש הנוכחי.
  • --name name: שם הארגון שקריא לאנשים.
set-device-owner [options] component מגדירים את component כאדמין פעיל ואת החבילה שלו כבעלים של המכשיר.

האפשרויות הן:

  • --user user_id: מציינים את משתמש היעד. אפשר גם להעביר את הערך --user current כדי לבחור את המשתמש הנוכחי.
  • --name name: שם הארגון שקריא לאנשים.
remove-active-admin [options] component להשבית אדמין פעיל. האפליקציה חייבת להצהיר על android:testOnly במניפסט. הפקודה הזו מסירה גם את הבעלים של המכשיר והפרופיל.

האפשרויות הן:

  • --user user_id: מציינים את משתמש היעד. אפשר גם להעביר את הערך --user current כדי לבחור את המשתמש הנוכחי.
clear-freeze-period-record מחיקת הרשומה במכשיר של תקופות ההקפאה שהוגדרו בעבר לעדכוני OTA של המערכת. האפשרות הזו שימושית כדי לעקוף את ההגבלות על תזמון במכשיר כשמפתחים אפליקציות שמנהלות תקופות הקפאה. ניהול עדכוני המערכת

התכונה נתמכת במכשירים עם Android מגרסה 9.0 (רמת API‏ 28) ואילך.

force-network-logs איך מאלצים את המערכת להכין את יומני הרשת הקיימים לאחזור על ידי DPC. אם יש יומני חיבור או יומני DNS זמינים, ה-DPC מקבל את הקריאה החוזרת (callback) onNetworkLogsAvailable(). תיעוד הפעילות ברשת

יש הגבלה על קצב שליחת הפקודה הזו. התכונה נתמכת במכשירים עם Android מגרסה 9.0 (רמת API‏ 28) ואילך.

force-security-logs לאלץ את המערכת להפוך את יומני האבטחה הקיימים לזמינים ל-DPC. אם יש יומנים זמינים, ה-DPC מקבל את הקריאה החוזרת onSecurityLogsAvailable(). תיעוד הפעילות במכשירים ארגוניים

יש הגבלה על קצב שליחת הפקודה הזו. התכונה נתמכת במכשירים עם Android מגרסה 9.0 (רמת API‏ 28) ואילך.

יצירת צילום מסך

הפקודה screencap היא תוכנית מעטפת לצילום מסך של מסך המכשיר.

בתור מעטפת, התחביר של screencap הוא:

screencap filename

כדי להשתמש ב-screencap משורת הפקודה, מזינים את הפקודה הבאה:

adb shell screencap /sdcard/screen.png

דוגמה לסשן צילום מסך, שבו נעשה שימוש במסוף adb כדי לצלם את צילום המסך ופקודת pull כדי להוריד את הקובץ מהמכשיר:

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png

הקלט סרטון

הפקודה screenrecord היא תוכנית מעטפת לתיעוד המסך של מכשירים שפועלת בהם מערכת Android בגרסה 4.4 (רמת API 19) ואילך. הכלי מתעד את פעילות המסך בקובץ MPEG-4. אפשר להשתמש בקובץ הזה כדי ליצור סרטונים של קידום מכירות או הדרכה, או לצורך ניפוי באגים ובדיקות.

במעטפת, משתמשים בתחביר הבא:

screenrecord [options] filename

כדי להשתמש ב-screenrecord משורת הפקודה, מזינים את הפקודה הבאה:

adb shell screenrecord /sdcard/demo.mp4

כדי להפסיק את הקלטת המסך, לוחצים על Control+C. אחרת, ההקלטה תיפסק אוטומטית אחרי שלוש דקות או אחרי מגבלת הזמן שהוגדרה על ידי --time-limit.

כדי להתחיל להקליט את מסך המכשיר, מריצים את הפקודה screenrecord כדי להקליט את הסרטון. לאחר מכן, מריצים את הפקודה pull כדי להוריד את הסרטון מהמכשיר למחשב המארח. דוגמה לסשן הקלטה:

$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4

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

מגבלות של השירות screenrecord:

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

טבלה 4. אפשרויות של screenrecord

אפשרויות תיאור
--help הצגת התחביר והאפשרויות של הפקודה
--size widthxheight מגדירים את גודל הסרטון: 1280x720. ערך ברירת המחדל הוא רזולוציית התצוגה המקורית של המכשיר (אם יש תמיכה), או 1280x720 אם אין תמיכה. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש בגודל שנתמך במקודד Advanced Video Coding ‏ (AVC) של המכשיר.
--bit-rate rate הגדרת קצב הביט של הסרטון, במגה-ביט לשנייה. ערך ברירת המחדל הוא 20Mbps. אפשר להגדיל את קצב הביטים כדי לשפר את איכות הסרטון, אבל הפעולה הזו גורמת לקובצי סרטים גדולים יותר. בדוגמה הבאה מוגדר קצב הנתונים של ההקלטה ל-6Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time מגדירים את משך ההקלטה המקסימלי, בשניות. ערך ברירת המחדל והערך המקסימלי הוא 180 (3 דקות).
--rotate מסובבים את הפלט ב-90 מעלות. התכונה הזו היא ניסיונית.
--verbose הצגת פרטי היומן במסך שורת הפקודה. אם לא מגדירים את האפשרות הזו, הכלי לא יציג מידע כלשהו במהלך הפעלתו.

קריאת פרופילי ART לאפליקציות

החל מגרסה 7.0 של Android‏ (רמת API 24), סביבת זמן הריצה של Android‏ (ART) אוספת פרופילי ביצוע של אפליקציות מותקנות, שמשמשים לאופטימיזציה של ביצועי האפליקציות. בודקים את הפרופילים שנאספו כדי להבין אילו שיטות מתבצעות בתדירות גבוהה ואילו כיתות נמצאות בשימוש במהלך הפעלת האפליקציה.

הערה: אפשר לאחזר את שם הקובץ של פרופיל הביצוע רק אם יש לכם הרשאת root למערכת הקבצים, למשל באמולטור.

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

adb shell cmd package dump-profiles package

כדי לאחזר את הקובץ שנוצר, משתמשים ב-:

adb pull /data/misc/profman/package.prof.txt

איפוס מכשירים לבדיקה

אם אתם בודקים את האפליקציה במספר מכשירי בדיקה, כדאי לאפס את המכשיר בין הבדיקות. לדוגמה, כדי להסיר את נתוני המשתמשים ולאפס את סביבת הבדיקה. אפשר לבצע איפוס להגדרות המקוריות של מכשיר בדיקה שבו פועלת גרסת Android 10 (רמת API 29) ואילך באמצעות הפקודה testharness adb, כפי שמוצג:

adb shell cmd testharness enable

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

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

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

אם האפליקציה צריכה לזהות את הגדרות ברירת המחדל של הפקודה testharness ולהתאים את עצמה אליהן, צריך להשתמש בפקודה ActivityManager.isRunningInUserTestHarness().

sqlite

sqlite3 מפעיל את תוכנית שורת הפקודה sqlite לבדיקה של מסדי נתונים של SQLite. הוא כולל פקודות כמו .dump להדפסת התוכן של טבלה ו-.schema להדפסת ההצהרה SQL CREATE של טבלה קיימת. אפשר גם להריץ פקודות SQLite משורת הפקודה, כפי שמוצג:

$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions

הערה: אפשר לגשת למסד נתונים של SQLite רק אם יש לכם הרשאת root למערכת הקבצים, למשל במהלך הדמיה.

מידע נוסף זמין במסמכי התיעוד של שורת הפקודה sqlite3.

קצות עורפי של adb USB

שרת adb יכול לקיים אינטראקציה עם מחסנית ה-USB דרך שני קצוות עורפיים. הוא יכול להשתמש בקצה העורפי המקורי של מערכת ההפעלה (Windows,‏ Linux או macOS) או בקצה העורפי של libusb. תכונות מסוימות, כמו attach,‏ detach וזיהוי מהירות USB, זמינות רק כשמשתמשים בקצה העורפי של libusb.

אפשר לבחור קצה עורפי באמצעות משתנה הסביבה ADB_LIBUSB. אם לא מגדירים את הפרמטר, המערכת של adb תשתמש בקצה העורפי שמוגדר כברירת מחדל. התנהגות ברירת המחדל משתנה בהתאם למערכת ההפעלה. החל מ-ADB v34, הקצה העורפי liubusb משמש כברירת מחדל בכל מערכות ההפעלה, מלבד Windows, שבה הקצה העורפי המקורי משמש כברירת מחדל. אם הערך של ADB_LIBUSB מוגדר, הוא קובע אם נעשה שימוש בקצה העורפי המקורי או ב-libusb. מידע נוסף על משתני הסביבה של adb זמין בדף המדריך של adb.

קצוות עורפי של mDNS ב-adb

ADB יכול להשתמש בפרוטוקול ה-DNS של ה-multicast כדי לחבר באופן אוטומטי את השרת ואת המכשירים. שרת ה-ADB מגיע עם שני קצוות עורפיים, Bonjour‏ (mdnsResponder של Apple) ו-Openscreen.

כדי להפעיל את הקצה העורפי של Bonjour, צריך להפעיל דימון במכונה המארחת. ב-macOS, הדימון המובנה של Apple תמיד פועל, אבל ב-Windows וב-Linux, המשתמש צריך לוודא שהדימון mdnsd פועל. אם הפקודה adb mdns check מחזירה שגיאה, סביר להניח ש-ADB משתמש בקצה העורפי של Bonjour אבל אין דימון Bonjour שפועל.

לקצה העורפי של Openscreen לא נדרש דימון (daemon) שפועל במכונה. התמיכה בקצה העורפי של Openscreen ב-macOS מתחילה ב-ADB מגרסה 35. יש תמיכה ב-Windows וב-Linux החל מגרסה 34 של ADB.

כברירת מחדל, ADB משתמש בקצה העורפי של Bonjour. אפשר לשנות את ההתנהגות הזו באמצעות משתנה הסביבה ADB_MDNS_OPENSCREEN (מוגדרת ל-1 או ל-0). פרטים נוספים זמינים בדף המדריך של ADB.

adb Burst Mode (החל מ-ADB 36.0.0)

מצב התפרצות (Burst Mode) הוא תכונה ניסיונית שמאפשרת ל-ADB להמשיך לשלוח חבילות למכשיר גם לפני שהמכשיר הגיב לחבילה הקודמת. כך אפשר להגדיל משמעותית את התפוקה של ADB כשמעבירים קבצים גדולים, וגם לצמצם את זמן האחזור בזמן ניפוי הבאגים.

מצב התמונות הרציפה מושבת כברירת מחדל. כדי להפעיל את התכונה, מבצעים אחת מהפעולות הבאות:

  • מגדירים את משתנה הסביבה ADB_DELAYED_ACK לערך 1.
  • ב-Android Studio, עוברים להגדרות של מנתח הבאגים בקטע File (או Android Studio ב-macOS) > Settings > Build, Execution, Deployment > Debugger ומגדירים את ADB Server Burst Mode ל-Enabled.