Android Debug Bridge (adb)

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

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

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

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

איך adb פועל

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

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

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

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

‫Emulator 1, console: 5554
‫Emulator 1, adb: 5555
‫Emulator 2, console: 5556
‫Emulator 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‏ (adb). לדוגמה, אתם יכולים לפרוס את האפליקציה שניתנת לניפוי באגים למספר מכשירים מרוחקים בלי שתצטרכו לחבר את המכשיר שלכם פיזית באמצעות USB. כך לא צריך להתמודד עם בעיות נפוצות בחיבור USB, כמו התקנת מנהל התקן.

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

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

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

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

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

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

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

  2. פותחים את Android Studio ובוחרים באפשרות Pair Devices Using Wi-Fi (צימוד מכשירים באמצעות 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. במכשיר, בוחרים באפשרות התאמה באמצעות קוד התאמה ורושמים את הקוד בן שש הספרות שמופיע. אחרי שהמכשיר מופיע בחלון התאמת מכשירים באמצעות 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
  • State: סטטוס החיבור של המכשיר יכול להיות אחד מהבאים:
    • 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 name, צריך להזין שם 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

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

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

מידע נוסף על יצירת קובץ 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

אפשר להשתמש בפקודה 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 shell, אפשר להשתמש בכלי לניהול פעילויות (am) כדי להנפיק פקודות לביצוע פעולות שונות במערכת, כמו הפעלת פעילות, עצירה בכוח של תהליך, שידור של intent, שינוי המאפיינים של מסך המכשיר ועוד.

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

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

  • -d|--dump [format]: יצירת dump של תוכן מפת הסיביות בformat שצוין, שיכול להיות אחד מהערכים png, ‏jpg או webp. אם לא מצוין ערך, ברירת המחדל היא png. קובץ ZIP בשם dumpbitmaps-<time>.zip ייווצר עם מפות הביטים.
  • -p process: dump bitmaps from process, multiple -p process can be specified.
אם לא מציינים process, יתבצע 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: ציון שם חבילת ההתקנה.
  • --user user_id: מציינים את המשתמש שרוצים להתקין עבורו את החבילה. כברירת מחדל, החבילה מותקנת לכל המשתמשים שקיימים במכשיר.
  • --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: External: התקנה על מדיה חיצונית.

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

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: החבילה להגדרה, או all כדי להגדיר את כל החבילות
  • 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-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: אפשר גם להדפיס את כל דומייני האינטרנט שמוצהרים על ידי חבילה, או להשתמש בערך all כדי להדפיס את כל החבילות
  • 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 ב-Shell, והורדת הקובץ מהמכשיר באמצעות הפקודה pull:

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

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

הנה דוגמה לצילום מסך ושמירתו באופן מקומי בפקודה אחת:

# use 'exec-out' instead of 'shell' to get raw data
$ adb exec-out screencap -p > 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 אם לא. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש בגודל שנתמך על ידי מקודד ה-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) ומעלה באמצעות פקודת ה-shell‏ 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 backends

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

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

קצה עורפי של adb mDNS

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

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

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

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

מצב צילום רציף ב-ADB (החל מ-ADB 36.0.0)

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

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

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