Android Debug Bridge (adb)

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

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

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

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

איך adb פועל

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

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

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

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

ב-Android 17, לצד adb 37.0.0, מוצגת גרסה חדשה של adb Wi-Fi‏ (2.0), שפותרת הרבה בעיות שימושיות שהיו בגרסה הקודמת. חשוב לציין שהמכשיר יתחבר אוטומטית לתחנת העבודה כשהוא יתחבר לרשת מהימנה לניפוי באגים אלחוטי.

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

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

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

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

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

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

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

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

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

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

    הערה: משתמשי Android Studio יכולים להתאים את המכשיר שלהם באמצעות קוד QR. לשם כך, הם צריכים לבחור באפשרות Pair device with QR code ולסרוק את קוד ה-QR שמופיע בPair devices over Wi-Fi dialog ב-Android Studio.

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

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

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

  7. כשתתבקשו, תצטרכו להזין את קוד ההתאמה שמופיע למטה.

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

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

  9. אם רוצים להפעיל ולהשבית במהירות את האפשרות 'ניפוי באגים אלחוטי', אפשר להשתמש בלחצני ההגדרות המהירות למפתחים של ניפוי באגים אלחוטי. הלחצנים האלה נמצאים באפשרויות למפתחים > לחצני ההגדרות המהירות למפתחים.

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

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

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

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

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

בודקים אם הגדרת ה-adb בתחנת העבודה נכונה

כדי לוודא שהגדרת ה-ADB בתחנת העבודה שלכם נכונה, פותחים מסוף בתחנת העבודה ומזינים adb server-status. מוודאים שהפלט מציג את הפרטים הבאים:

  • ‫version: "37.0.0" ומעלה: אם זה לא המצב, צריך להוריד את הגרסה האחרונה של SDK Platform Tools.
  • ‫mdns_enabled: true: אם ההגדרה הזו היא false, ‏ adb לא יוכל לגלות מכשירים ברשת באופן אוטומטי. כדי לפתור את הבעיה, צריך להגדיר את משתנה הסביבה ADB_MDNS לערך 1 ואז להפעיל מחדש את שרת ה-adb על ידי הרצת הפקודה adb kill-server ואז הפקודה adb start-server.
  • ‫mdns_backend: LIBADBMDNS: אם זה לא המצב, סימן ש-adb משתמש בספרייה מיושנת כדי לגלות באופן אוטומטי מכשירים ברשת. כדי לפתור את הבעיה, צריך להגדיר את משתנה הסביבה ADB_MDNS_OPENSCREEN לערך 0 ואז להפעיל מחדש את שרת ה-adb על ידי הרצת הפקודה adb kill-server ואז adb start-server.

בודקים אם הרשת תומכת ב-mDNS

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

  1. במכשיר, מפעילים ניפוי באגים אלחוטי כמו שמתואר בקטע התחברות למכשיר באמצעות Wi-Fi.

  2. בתחנת העבודה, פותחים טרמינל ומזינים adb mdns track-services --proto-text.

  3. מוודאים שהפלט לא ריק ומכיל שירות tls עם כתובת ה-IP ומספר היציאה של המכשיר. אם הפלט ריק, סימן שהרשת לא תומכת ב-mDNS. פלט לדוגמה:

    tls {
      service {
        instance: "adb-35121FDJH000R8-xyMD0H"
        service: "_adb-tls-connect._tcp"
        ipv4: "192.168.84.23"
        ipv6: "fe80:0:0:0:fc7a:299d:8d38:6c1c"
        port: 37895
        product_model: "Pixel 8"
        build_version_sdk_full: "37.0"
        given_name: "sherifeid Pixel"
        serial: "35121FDJH000R8"
        mdns_service_version: "2.0"
        hostname: "Android_CXUKYJY1.local"
      }
    }
              

בדיקה אם המכשיר תומך ב-ADB Wi-Fi 2.0

הערה: ‫ADB Wi-Fi 2.0 נתמך ב-Android 17 ומעלה.

כדי לבדוק אם המכשיר תומך ב-ADB Wi-Fi 2.0:

  1. במכשיר, מפעילים ניפוי באגים אלחוטי כמו שמתואר בקטע התחברות למכשיר באמצעות Wi-Fi.

  2. בתחנת העבודה, פותחים טרמינל ומזינים adb mdns track-services --proto-text.

  3. בודקים שהפלט מכיל את המחרוזת mdns_service_version: "2.0" או מחרוזת עם מספר גבוה יותר. אם זה לא המצב, סימן שבמכשיר שלכם לא פועלת גרסה Android 17 ומעלה, והוא לא תומך ב-ADB Wi-Fi 2.0. כדי לעדכן ל-Android 17 ואילך, צריך לבדוק אם יש במכשיר עדכוני מערכת בהמתנה. איך בודקים את גרסת Android במכשיר ומעדכנים אותה

דיווח על בעיה חדשה

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

  • היומנים מהמכשיר: משחזרים את הבעיה ומצרפים את יומני המכשיר
  • היומנים מ-adb בתחנת העבודה:
    1. מגדירים את משתנה הסביבה ADB_TRACE=all.
    2. מפעילים מחדש את שרת adb על ידי הפעלת הפקודה adb kill-server ואז הפקודה adb start-server.
    3. משחזרים את הבעיה.
    4. איתור קובצי היומן: מריצים את adb server-status ומצרפים את קובץ היומן שמצוין בפלט log_absolute_path.

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

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

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

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

adb forward tcp:6100 tcp:7100

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

adb forward tcp:6100 local:logd

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

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

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

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

adb pull remote local

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

adb push local remote

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

adb push myfile.txt /sdcard/myfile.txt

הפסקת שרת ה-adb

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

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

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

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

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

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

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

adb --help

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

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

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

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

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

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

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

adb shell ls /system/bin

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

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

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

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

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

בתוך adb 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: מציינים את המשתמש שרוצים להריץ בתורו. אם לא מציינים, ההרצה מתבצעת בתור המשתמש הנוכחי.
  • ‫--debug-link: (Android 17 ומעלה) אבחון של כתובת URL ופתרון Intent לקישורי עומק לאפליקציה, הדפסה של מסנני Intent תואמים במניפסט וכללים של קישורי עומק דינמיים לאפליקציה.
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 Dump the heap of process, write to file.

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

  • ‫--user [user_id | current]: כשמציינים שם של תהליך, צריך לציין את המשתמש של התהליך כדי ליצור dump. אם לא מציינים משתמש, המערכת משתמשת במשתמש הנוכחי.
  • ‫-b [| png | jpg | webp]: יצירת קובץ dump של מפות סיביות מזיכרון ה-GPU (רמת 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 של מפות סיביות מ-process. אפשר לציין כמה -p process.
אם לא מציינים 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 תדפיס את מפרט ה-Intent שצוין כ-URI של intent:.

פרטים נוספים זמינים במפרט של ארגומנטים של כוונות.

memory-limiter subcommand [options]

שינוי או השבתה של הגבלות הזיכרון שמוגדרות במכשירים עם Android מגרסה 17 ומעלה. אין השפעה על מכשירים עם Android 16 ומטה.

פקודות המשנה הן:

  • ‫ignore uid|none|all: מגדיר את מגביל הזיכרון להתעלם מחלק מהתהליכים או מכולם. העברת מזהה משתמש (UID) (מזהה משתמש ב-Android) גורמת למגביל הזיכרון להתעלם מאכיפה בכל התהליכים שמשויכים למזהה המשתמש הזה. אפשר גם להעביר all (התעלמות מכל האפליקציות) או none (לא להתעלם מאף אפליקציה). העברת none מבטלת את כל הקריאות הקודמות אל am memory-limiter ignore.

    אם אתם מנחים את הכלי להגבלת הזיכרון להתעלם ממזהה UID, עדיין תוכלו להגדיר מגבלת זיכרון ידנית לתהליך באפליקציה באמצעות קריאה ל-am memory-limiter manual.

  • ‫manual pid limit|max|none: מורה למערכת להגביל את הזיכרון של התהליך עם מזהה התהליך (PID) שצוין. מגבלת הזיכרון מצוינת כמספר שלם של מגה-בייט (MB). לדוגמה, אם מעבירים את הערך 30, התהליך מוגבל ל-30MB של זיכרון. העברת max מסירה את כל מגבלות הזיכרון בתהליך הזה. העברת none מסירה את כל המגבלות שהוגדרו ידנית בתהליך, ומחזירה את מגבלת ברירת המחדל של המערכת (אם יש כזו).
  • ‫status: הסטטוס הנוכחי של מגביל הזיכרון. הסטטוס כולל את מגבלות הזיכרון שמוטלות על תהליכים גלויים ובלתי גלויים.

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

בפקודות של הכלי לניהול פעילות שכוללות ארגומנט 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: force-denied, usually through shell
  • ‫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. ערך ברירת המחדל הוא רזולוציית התצוגה המקורית של המכשיר (אם נתמכת), או ‎1,280x720 אם לא. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש בגודל שנתמך על ידי מקודד 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) אוספת פרופילים של הרצה לאפליקציות מותקנות, שמשמשים לאופטימיזציה של ביצועי האפליקציה. בודקים את הפרופילים שנאספו כדי להבין אילו שיטות מופעלות לעיתים קרובות ואילו מחלקות נמצאות בשימוש במהלך הפעלת האפליקציה.

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

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

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.

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

adb mDNS backends

‫ADB משתמש בפרוטוקול mDNS (מערכת שמות דומיין של שידור מרובה) כדי לחבר אוטומטית את השרת והמכשירים לניפוי באגים אלחוטי. החל מ-ADB גרסה 37, שרת ה-ADB מגיע עם שני קצוות עורפיים של mDNS, ‏ libadbmdns ו-openscreen.

הקצה העורפי שמוגדר כברירת מחדל ומומלץ הוא libadbmdns. אפשר לשנות את ההתנהגות הזו באמצעות משתנה הסביבה ADB_MDNS_OPENSCREEN (הגדרה ל-1 או ל-0). התמיכה ב-Openscreen backend ב-macOS מתחילה ב-ADB v35. יש תמיכה ב-Windows וב-Linux מגרסה 34 של ADB.

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

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

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

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