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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. כשתתבקשו, תצטרכו להזין את קוד ההתאמה, כמו שמוצג למטה.

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

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

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

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

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

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

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

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

בודקים אם הגדרת ה-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
  • מצב: מצב החיבור של המכשיר יכול להיות אחד מהבאים:
    • 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 כדי לשלוח פקודות למכשיר החומרה.

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

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

adb install path_to_apk

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

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

מידע נוסף על יצירת קובץ APK שאפשר להתקין במכשיר או באימולטור זמין במאמר Build and run your app (יצירה והפעלה של האפליקציה).

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

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

am command

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • --user [user_id | current]: כשמציינים שם של תהליך, צריך לציין את המשתמש של התהליך כדי ליצור dump. אם לא מציינים משתמש, המערכת משתמשת במשתמש הנוכחי.
  • -b [| png | jpg | webp]: יצירת קובץ dump של מפות סיביות מזיכרון ה-GPU (רמת API‏ 35 ומעלה). אפשר לציין את הפורמט של קובץ ה-dump (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 הדפסת מפרט ה-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‏ v4 ולהציב את הקובץ הזה באותה ספרייה שבה נמצא ה-APK. התכונה הזו נתמכת רק במכשירים מסוימים. האפשרות הזו מחייבת את adb להשתמש בתכונה או להיכשל אם היא לא נתמכת, עם מידע מפורט על הסיבה לכשל. מוסיפים את האפשרות --wait ל-wait until כדי להמתין עד שה-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 כדי לצלם את המסך, והפקודה 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 אם לא. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש בגודל שנתמך על ידי מקודד 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 Runtime‏ (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.

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

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

‫ADB משתמש בפרוטוקול mDNS ‏ (multicast DNS) כדי לחבר אוטומטית את השרת והמכשירים לניפוי באגים אלחוטי. החל מ-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.