Android Debug Bridge (adb)

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

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

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

למידע על חיבור מכשיר לשימוש ב-adb, כולל הוראות לשימוש ב-Connection Assistant כדי לפתור בעיות נפוצות, כדאי לעיין במאמר הפעלת אפליקציות במכשיר חומרה.

איך 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 (רמת API 17) ואילך, המסך אפשרויות למפתחים מוסתר כברירת מחדל. כדי שהיא תהיה גלויה, צריך להפעיל את הפיצ'ר 'אפשרויות למפתחים'.

עכשיו אפשר לחבר את המכשיר באמצעות 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) ואילך לטלפון, או Android מגרסה 13 (API ברמה 33) ואילך לטלוויזיה ול-WearOS. מידע נוסף זמין במאמר איך בודקים ומעדכנים את גרסת Android במכשיר.

  • אם אתם משתמשים בסביבת פיתוח משולבת (IDE), חשוב לוודא שמותקנת הגרסה העדכנית של 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: יותר ממכשיר/אמולטור אחד".

אם יש כמה מכשירים זמינים אבל רק אחד הוא אמולטור, אפשר להשתמש באפשרות -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

האפשרות הזו יכולה להיות שימושית אם ניסית לפענח את מה שנשלח ליציאה מסוימת במכשיר. כל הנתונים שיתקבלו ייכתבו לדימון (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 זמינה דרך toybox --help.

בכלי הפלטפורמה של Android מגרסה 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'. אפשר גם לצטט אותה בתו בריחה (escape), אבל בדרך כלל קל יותר לצטט פעמיים.

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

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

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

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

am command

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

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

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

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

למפרט לארגומנטים של 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.

למפרט לארגומנטים של 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 יוצרים את הערימה של process וכותבים אל file.

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

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

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

  • -d|--dump [format]: העתקת תוכן מפת סיביות (bitmap) שצוינה ב-format שצוין, שיכול להיות אחד מהערכים png, jpg או webp. אם לא צוין ערך, ברירת המחדל היא png. ייווצר קובץ ZIP בשם dumpbitmaps-<time>.zip עם מפות הביטים.
  • -p process: העתקת מפות סיביות מ-process, אפשר לציין מספר -p process.
אם לא תציינו את process, תתבצע הסרה של מפות סיביות מכל התהליכים.
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 הדפסה של מפרט Intent הנתון כ-URI.

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

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

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

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

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

-a action
מציינים את פעולת ה-Intent, למשל android.intent.action.VIEW. אפשר להצהיר על כך רק פעם אחת.
-d data_uri
מציינים את ה-URI של נתוני Intent, למשל content://contacts/people/1. אפשר להצהיר על כך רק פעם אחת.
-t mime_type
צריך לציין את סוג ה-MIME של ה-Intent, למשל image/png. אפשר להצהיר על כך רק פעם אחת.
-c category
צריך לציין קטגוריית Intent, כמו android.intent.category.APP_CONTACTS.
-n component
מציינים את שם הרכיב עם קידומת של שם חבילה כדי ליצור Intent מפורש, כמו com.example.app/.ExampleActivity.
-f flags
מוסיפים דגלים ל-Intent, כפי שנתמך ב-setFlags().
--esn extra_key
הוספת תוספת אפסית. האפשרות הזו לא נתמכת עבור כוונות URI.
-e | --es extra_key extra_string_value
הוספת נתוני מחרוזת כצמד מפתח-ערך.
--ez extra_key extra_boolean_value
הוסיפו נתונים בוליאניים כצמד מפתח/ערך.
--ei extra_key extra_int_value
מוסיפים נתוני מספרים שלמים כצמד מפתח/ערך.
--el extra_key extra_long_value
הוסיפו נתונים ארוכים כצמד מפתח-ערך.
--ef extra_key extra_float_value
מוסיפים נתונים צפים כצמד מפתח/ערך.
--eu extra_key extra_uri_value
מוסיפים נתוני URI כצמד מפתח/ערך.
--ecn extra_key extra_component_name_value
מוסיפים שם של רכיב, שעובר המרה ועובר כאובייקט ComponentName.
--eia extra_key extra_int_value[,extra_int_value...]
הוספת מערך של מספרים שלמים.
--ela extra_key extra_long_value[,extra_long_value...]
להוסיף מערך של ערכים ארוכים.
--efa extra_key extra_float_value[,extra_float_value...]
הוספת מערך של פריטים צפופים.
--grant-read-uri-permission
יש לכלול את הדגל FLAG_GRANT_READ_URI_PERMISSION.
--grant-write-uri-permission
יש לכלול את הדגל FLAG_GRANT_WRITE_URI_PERMISSION.
--debug-log-resolution
יש לכלול את הדגל FLAG_DEBUG_LOG_RESOLUTION.
--exclude-stopped-packages
יש לכלול את הדגל FLAG_EXCLUDE_STOPPED_PACKAGES.
--include-stopped-packages
יש לכלול את הדגל FLAG_INCLUDE_STOPPED_PACKAGES.
--activity-brought-to-front
יש לכלול את הדגל FLAG_ACTIVITY_BROUGHT_TO_FRONT.
--activity-clear-top
יש לכלול את הדגל FLAG_ACTIVITY_CLEAR_TOP.
--activity-clear-when-task-reset
יש לכלול את הדגל FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET.
--activity-exclude-from-recents
יש לכלול את הדגל FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS.
--activity-launched-from-history
יש לכלול את הדגל FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY.
--activity-multiple-task
יש לכלול את הדגל FLAG_ACTIVITY_MULTIPLE_TASK.
--activity-no-animation
יש לכלול את הדגל FLAG_ACTIVITY_NO_ANIMATION.
--activity-no-history
יש לכלול את הדגל FLAG_ACTIVITY_NO_HISTORY.
--activity-no-user-action
יש לכלול את הדגל FLAG_ACTIVITY_NO_USER_ACTION.
--activity-previous-is-top
יש לכלול את הדגל FLAG_ACTIVITY_PREVIOUS_IS_TOP.
--activity-reorder-to-front
יש לכלול את הדגל FLAG_ACTIVITY_REORDER_TO_FRONT.
--activity-reset-task-if-needed
יש לכלול את הדגל FLAG_ACTIVITY_RESET_TASK_IF_NEEDED.
--activity-single-top
יש לכלול את הדגל FLAG_ACTIVITY_SINGLE_TOP.
--activity-clear-task
יש לכלול את הדגל FLAG_ACTIVITY_CLEAR_TASK.
--activity-task-on-home
יש לכלול את הדגל FLAG_ACTIVITY_TASK_ON_HOME.
--receiver-registered-only
יש לכלול את הדגל FLAG_RECEIVER_REGISTERED_ONLY.
--receiver-replace-pending
יש לכלול את הדגל FLAG_RECEIVER_REPLACE_PENDING.
--selector
כדי להגדיר את נתוני Intent והסוג, צריך להשתמש באפשרויות -d ו--t.
URI component package
אפשר לציין באופן ישיר URI, שם חבילה ושם רכיב כאשר הם לא עומדים בדרישות באמצעות אחת מהאפשרויות שלמעלה. כאשר ארגומנט לא מתאים, הכלי מניח שהארגומנט הוא URI אם הוא מכיל ":" (נקודתיים). הכלים מניחים שהארגומנט הוא שם של רכיב אם הוא מכיל "/" (קו נטוי לפנים). אחרת, הוא מניח שהארגומנט הוא שם חבילה.

מנהל חבילת שיחות (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: החבילה לאיפוס, או 'הכול' כדי לאפס את כל החבילות

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

  • --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: רשימה מופרדת ברווחים של דומיינים לשינוי, או 'הכול' כדי לשנות כל דומיין.
set-app-links-user-selection --user user_id [--package package] enabled domains

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

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

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

  • --user user_id: המשתמש שעבורו רוצים לשנות את הבחירות
  • --package package: החבילה להגדרה, או 'הכול' כדי להגדיר את כל החבילות. החבילות יאופסו אם לא תצוין חבילה.
  • 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 מקבל את הקריאה החוזרת 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 לאפליקציות

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

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

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

adb shell cmd package dump-profiles package

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

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

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

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

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.

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

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

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

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

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

adb Burst Mode (מתחיל ב-ADB 36.0.0)

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

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

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