Android Debug Bridge (adb)

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

  • לקוח, ששולח פקודות. הלקוח פועל במכונת הפיתוח שלכם. אפשר להפעיל לקוח מטרמינל של שורת הפקודה על ידי הנפקת פקודת adb.
  • דימון (daemon) (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 ובוחרים באפשרות התאמת מכשירים באמצעות 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, אפשר לבחור באפשרות התאמה ולהזין את הקוד בן 6 הספרות שמוצג במכשיר.

      צילום מסך של דוגמה להזנת קוד גישה
      איור 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 במה emultor או במכשיר ��חובר באמצעות הפקודה 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

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

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

משתמשים בפקודות 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 לפרסם כוונת שידור.

למפרט לארגומנטים של 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]: כשמוסיפים שם של תהליך, צריך לציין את המשתמש של התהליך שרוצים לדגום. אם לא צוין משתמש, המערכת תשתמש במשתמש הנוכחי.
  • -b [| png | jpg | webp]: שמירת מפות סיביות מהזיכרון הגרפי (API ברמה 35 ומעלה). אפשר לציין את הפורמט של הדמפ (PNG כברירת מחדל).
  • -n: תמונת מצב של ערימה מקורית במקום ערימה מנוהלת.
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, אפשר לציין את 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 יותקן באופן מלא לפני שמעניקים גישה ל-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 בלי להיכנס למעטפת מרחוק:

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 (mdnsResponseer של Apple) ו-Openscreen.

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

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

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