Android Debug Bridge (adb
) הוא כלי גמיש בשורת הפקודה שמאפשר לתקשר עם מכשיר. הפקודה adb
מאפשרת לבצע מגוון פעולות במכשיר, כמו התקנה של אפליקציות וניפוי באגים בהן. adb
מספקת גישה למעטפת Unix שאפשר להשתמש בה כדי להריץ מגוון פקודות במכשיר. זוהי תוכנת שרת לקוח שכוללת שלושה רכיבים:
- לקוח, ששולח פקודות. הלקוח פועל במכונת הפיתוח שלכם. אפשר להפעיל לקוח מטרמינל של שורת הפקודה על ידי הנפקת פקודת
adb
. - דימון (daemon) (adbd), שמריץ פקודות במכשיר. הדימון פועל בתור תהליך רקע בכל מכשיר.
- שרת שמנהל את התקשורת בין הלקוח לבין הדימון. השרת פועל כתהליך ברקע במכונת הפיתוח.
adb
נכלל בחבילת Android SDK Platform Tools. מורידים את החבילה הזו באמצעות SDK Manager, שמתקין אותה ב-android_sdk/platform-tools/
. אם אתם רוצים את חבילת Android SDK Platform Tools העצמאית, הורידו אותה מכאן.
למידע על חיבור מכשיר לשימוש דרך adb
, כולל איך משתמשים בכלי 'עזרה בחיבור' כדי לפתור בעיות נפוצות, ראו הפעלת אפליקציות במכשיר חומרה.
איך פועל adb
כשמפעילים לקוח adb
, הלקוח בודק קודם אם קיים כבר תהליך שרת של adb
. אם לא, הוא מתחיל את תהליך השרת.
כשהשרת מופעל, הוא מתחבר ליציאת ה-TCP המקומית 5037 ומקשיב לפקודות שנשלחות מלקוחות adb
.
הערה: כל הלקוחות של adb
משתמשים ביציאה 5037 כדי לתקשר עם השרת adb
.
לאחר מכן השרת מגדיר חיבורים לכל המכשירים שפועלים.
הוא מאתר את המהדמנים על ידי סריקת יציאות בעלות מספרים אי זוגיים בטווח 5555 עד 5585, שהוא הטווח שבו נעשה שימוש ב-16 המהדמנים הראשונים. כשהשרת מוצא דימון (daemon) של adb
(adbd), הוא מגדיר חיבור ליציאה הזו.
כל אמולטור משתמש בזוג יציאות רצופות – יציאה עם מספר שווה לחיבורי המסוף ויציאה עם מספר אי-זוגי לחיבורים של adb
. לדוגמה:
אמולטור 1, מסוף: 5554
אמולטור 1, adb
: 5555
אמולטור 2, מסוף: 5556
אמולטור 2, adb
: 5557
וכן הלאה.
כפי שמוצג, האמולטור שמחובר ל-adb
ביציאה 5555 זהה לאמולטור שהמסוף שלו מקשיב ביציאה 5554.
אחרי שהשרת יגדיר חיבורים לכל המכשירים, אפשר להשתמש בפקודות adb
כדי לגשת למכשירים האלה. מכיוון שהשרת מנהל את החיבורים למכשירים ומטפל בפקודות ממספר לקוחות adb
, אפשר לשלוט בכל מכשיר מכל לקוח או מסקריפט.
הפעלת ניפוי באגים באמצעות adb במכשיר
כדי להשתמש ב-adb עם מכשיר שמחובר באמצעות USB, צריך להפעיל את האפשרות ניפוי באגים ב-USB בהגדרות המערכת של המכשיר, בקטע אפשרויות למפתחים. ב-Android 4.2 ואילך (רמה 17 של API), המסך אפשרויות למפתחים מוסתר כברירת מחדל. כדי שהיא תהיה גלויה, צריך להפעיל את הפיצ'ר 'אפשרויות למפתחים'.
עכשיו אפשר לחבר את המכשיר באמצעות USB. כדי לוודא שהמכשיר מחובר, מריצים את הפקודה adb devices
מהספרייה android_sdk/platform-tools/
. אם המכשיר מחובר, שם המכשיר יופיע בתור 'מכשיר'.
הערה: כשמחברים מכשיר עם Android מגרסה 4.2.2 (רמת API 17) ואילך, מוצגת תיבת דו-שיח עם בקשה לאשר מפתח RSA שמאפשר ניפוי באגים דרך המחשב הזה. מנגנון האבטחה הזה מגן על מכשירי המשתמשים כי הוא מוודא שלא ניתן להריץ ניפוי באגים ב-USB ופקודות adb אחרות, אלא אם אתם מצליחים לבטל את נעילת המכשיר ולאשר את תיבת הדו-שיח.
מידע נוסף על ��יבור למכשיר באמצעות USB זמין במאמר הפעלת אפליקציות במכשיר חומרה.
התחברות למכשיר באמצעות Wi-Fi
הערה: ההוראות הבאות לא חלות על מכשירי Wear שפועלת בהם מערכת Android 11 (רמת API 30). מידע נוסף זמין במדריך לניפוי באגים באפליקציות ל-Wear OS.
בגרסאות Android 11 ואילך (רמת API 30 ואילך) יש תמיכה בפריסה ובניפוי באגים של האפליקציה באופן אלחוטי מתחנת העבודה באמצעות Android Debug Bridge (adb). לדוגמה, אפשר לפרוס אפליקציה שניתנת לניפוי באגים למספר מכשירים מרוחקים בלי שתצטרכו לחבר את המכשיר פיזית באמצעות USB. כך לא תצטרכו להתמודד עם בעיות נפוצות בחיבור USB, כמו התקנת מנהל התקן.
לפני שמתחילים להשתמש בניפוי באגים אלחוטי, צריך לבצע את הפעולות הבאות:
-
מוודאים שמכונת העבודה והמכשיר מחוברים לאותה רשת אלחוטית.
-
מוודאים שבטלפון פועלת מערכת ההפעלה Android 11 (רמת API 30) ואילך, ובטלוויזיה וב-Wear OS פועלת מערכת ההפעלה Android 13 (רמת API 33) ואילך. מידע נוסף זמין במאמר איך בודקים את גרסת Android ומעדכנים אותה.
-
אם אתם משתמשים בסביבת הפיתוח המשולבת, ודאו שמותקנת אצלכם הגרסה האחרונה של Android Studio. אפשר להוריד אותו כאן.
-
בתחנת העבודה, מעדכנים לגרסת SDK Platform Tools האחרונה.
כדי להשתמש בניפוי באגים אלחוטי, צריך להתאים את המכשיר לתחנת העבודה באמצעות קוד QR או קוד התאמה. תחנת העבודה והמכשיר צריכים להיות מחוברים לאותה רשת אלחוטית. כדי להתחבר למכשיר:
-
הפעלת אפשרויות למפתחים במכשיר שלך.
-
פותחים את Android Studio ובוחרים באפשרות התאמת מכשירים באמצעות Wi-Fi מתפריט ההגדרות של ההפעלה.
החלון התאמת מכשירים באמצעות Wi-Fi יופיע, כפי שמוצג באיור 2.
-
במכשיר, מקישים על ניפוי באגים אלחוטי ומתאימים את המכשיר:
-
כדי להתאים את המכשיר באמצעות קוד QR, בוחרים באפשרות התאמת מכשיר באמצעות קוד QR וסורקים את קוד ה-QR שמופיע בחלון הקופץ התאמת מכשירים באמצעות Wi-Fi שמוצג באיור 2.
-
כדי להתאים את המכשיר באמצעות קוד התאמה, בוחרים באפשרות התאמת מכשיר באמצעות קוד התאמה בחלון ה��ופץ התאמת מכשירים דרך Wi-Fi. במכשיר, בוחרים באפשרות התאמה באמצעות קוד התאמה ומתעדים את הקוד בן 6 הספרות שמוצג. כשמוצג המכשיר בחלון התאמת מכשירים באמצעות Wi-Fi, אפשר לבחור באפשרות התאמה ולהזין את הקוד בן 6 הספרות שמוצג במכשיר.
-
-
אחרי התאמת המכשיר, אפשר לנסות לפרוס את האפליקציה במכשיר.
כדי להתאים מכשיר אחר או למחוק את המכשיר הנוכחי בתחנת העבודה, עוברים אל ניפוי באגים אלחוטי במכשיר. מקישים על השם של תחנת העבודה בקטע מכשירים מותאמים ובוחרים באפשרות מחיקה.
-
אם רוצים להפעיל ולכבות במהירות את ניפוי הבאגים האלחוטי, אפשר להשתמש בכרטיסי המידע למפתחים בהגדרות המהירות לניפוי באגים אלחוטי. הכרטיסים נמצאים בקטע אפשרויות למפתחים > כרטיסי מידע למפתחים בהגדרות המהירות.
חיבור Wi-Fi באמצעות שורת הפקודה
לחלופין, כדי להתחבר למכשיר באמצעות שורת הפקודה בלי Android Studio, פועלים לפי השלבים הבאים:
-
הפעלת אפשרויות למפתחים במכשיר, כפי שמתואר למעלה.
-
מפעילים את ניפוי הבאגים האלחוטי במכשיר, כפי שמתואר למעלה.
-
בתחנת העבודה, פותחים חלון טרמינל ועוברים אל
android_sdk/platform-tools
. -
כדי למצוא את כתובת ה-IP, מספר היציאה וקוד ההתאמה, בוחרים באפשרות התאמת מכשיר באמצעות קוד התאמה. שימו לב לכתובת ה-IP, למספר היציאה ולקוד ההתאמה שמוצגים במכשיר.
-
מריצים את הפקודה
adb pair ipaddr:port
בטרמינל של תחנת העבודה. צריך להשתמש בכתובת ה-IP ובמספר היציאה שמופיעים למעלה. -
כשתתבקשו, הזינו את קוד ההתאמה כמו שמוצג בהמשך.
פתרון בעיות בחיבור אלחוטי
אם נתקלתם בבעיות בחיבור אל המכשיר באופן אלחוטי, תוכלו לנסות את השלבים הבאים לפתרון הבעיה.
בדיקה אם תחנת העבודה והמכשיר עומדים בדרישות המוקדמות
בודקים אם תחנת העבודה והמכשיר עומדים בדרישות המוקדמות שמפורטות בתחילת הקטע הזה.
בדיקה אם יש בעיות ידועות אחרות
ריכזנו כאן רשימה של בעיות ידועות בניפוי באגים אלחוטי (עם 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:
-
מחברים את מכשיר Android ואת המחשב המארח
adb
לרשת Wi-Fi משותפת. - מחברים את המכשיר למחשב המארח באמצעות כבל USB.
-
מגדירים את מכשיר היעד להאזנה לחיבור TCP/IP ביציאה 5555:
adb tcpip 5555
- מנתקים את כבל ה-USB מהמכשיר היעד.
- מוצאים את כתובת ה-IP של מכשיר Android. לדוגמה, במכשיר Nexus, אפשר למצוא את כתובת ה-IP בקטע הגדרות > מידע על הטאבלט (או מידע על הטלפון) > סטטוס > כתובת IP.
-
מתחברים למכשיר לפי כתובת ה-IP שלו:
adb connect device_ip_address:5555
-
מוודאים שמחשב המארח מחובר למכשיר היעד:
$ adb devices List of devices attached device_ip_address:5555 device
הערה: חשוב לזכור שלא כל נקודות הגישה מתאימות. יכול להיות שתצטרכו להשתמש בנקודת גישה שחומת האש שלה מוגדרת כראוי לתמיכה ב-adb
.
המכשיר שלך מחובר עכשיו אל adb
.
אם החיבור של adb
למכשיר יתנתק:
- מוודאים שהמארח עדיין מחובר לאותה רשת Wi-Fi שאליה מחובר מכשיר Android.
-
כדי להתחבר מחדש, צריך לבצע שוב את השלב
adb connect
. -
אם הבעיה נמשכת, מאפסים את המארח
adb
:adb kill-server
לאחר מכן מתחילים מחדש.
שליחת שאילתה לגבי מכשירים
לפני שמפעילים פקודות adb
, כדאי לדעת אילו מכונות של מכשירים מחוברות לשרת adb
. יוצרים רשימה של מכשירים מחוברים באמצעות הפקודה devices
:
adb devices -l
בתגובה, adb
מדפיס את פרטי הסטטוס האלה לכל מכשיר:
- מספר סידורי:
adb
יוצר מחרוזת כדי לזהות את המכשיר באופן ייחודי לפי מספר היציאה שלו. דוגמה למספר סידורי:emulator-5554
- מצב: מצב החיבור של המכשיר יכול להיות אחד מהבאים:
offline
: המכשיר לא מחובר ל-adb
או שהוא לא מגיב.device
: המכשיר מחובר לשרת שלadb
. חשוב לזכור שהמצב הזה לא מעיד על כך שמערכת Android מופעלת באופן מלא, כי המכשיר מתחבר ל-adb
בזמן שהמערכת עדיין מופעלת. זהו מצב התפעול הרגיל של המכשיר לאחר האתחול.no device
: אין מכשיר מחובר.
- תיאור: אם תכללו את האפשרות
-l
, הפקודהdevices
תציין את סוג המכשיר. המידע הזה שימושי כשיש כמה מכשירים מחוברים, כדי שתוכלו להבדיל ביניהם.
בדוגמה הבאה מוצגת הפקודה devices
והפלט שלה. יש שלושה מכשירים שפועלים. שתי השורות הראשונות ברשימה הן מכונות וירטואליות, והשורה השלישית היא מכשיר חומרה שמחובר למחשב.
$ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
האמולטור לא מופיע ברשימה
בפקודה adb devices
יש רצף פקודות לתרחישים קיצוניים שגורם למהדמנים שפועלים לא להופיע בפלט של adb devices
, למרות שהמהדמנים גלויים במחשב. המצב הזה מתרחש אם כל התנאים הבאים מתקיימים:
- השרת
adb
לא פועל. - משתמשים בפקודה
emulator
עם האפשרות-port
או-ports
עם ערך יציאה במספר אי-זוגי בין 5554 ל-5584. - היציאה בעלת המספר הלא זוגי שבחרתם לא תפוסה, כך שניתן לבצע את חיבור היציאה במספר היציאה שצוין. אם היא תפוסה, הסימולטור עובר ליציאה אחרת שעומדת בדרישות שמפורטות בפסקה 2.
- מפעילים את השרת
adb
אחרי שמפעילים את הסימולטור.
א��ת הדרכים למנוע את המצב הזה היא לתת לאמולטור לבחור יציאות משלו ולהפעיל
עד 16 אמולטורים בו-זמנית. אפשרות אחרת היא תמיד להפעיל את השרת adb
לפני שמשתמשים בפקודה emulator
, כפי שמוסבר בדוגמאות הבאות.
דוגמה 1: בסדרת הפקודות הבאה, הפקודה adb devices
מפעילה את השרת adb
, אבל רשימת המכשירים לא מופיעה.
מפסיקים את השרת adb
ומזינים את הפקודות הבאות בסדר המוצג. בשם ה-AVD, נותנים שם AVD חוקי מהמערכת. כדי לקבל רשימה של שמות AVD, מקלידים emulator -list-avds
. הפקודה emulator
נמצאת בספרייה android_sdk/tools
.
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5555 $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully *
דוגמה 2: בסדרת הפקודות הבאה, adb devices
מציגה את רשימת המכשירים כי שרת adb
הופעל קודם.
כדי לראות את האמולטור בפלט של adb devices
, צריך לעצור את השרת adb
ואז להפעיל אותו שוב אחרי שמשתמשים בפקודה emulator
ולפני שמשתמשים בפקודה adb devices
, באופן הבא:
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device
למידע נוסף על האפשרויות של שורת הפקודה באמולטור, ראו אפשרויות הפעלה של שורת הפקודה.
שליחת פקודות למכשיר ספציפי
אם פועלים כמה מכשירים, צריך לציין את מכשיר היעד כשמפעילים את הפקודה adb
.
כדי לציין את היעד, מבצעים את השלבים הבאים:
- משתמשים בפקודה
devices
כדי לקבל את המספר הסידורי של היעד. - אחרי שמוצאים את המספר הסידורי, משתמשים באפשרות
-s
עם הפקודותadb
כדי לציין את המספר הסידורי.- אם מריצים הרבה פקודות
adb
, אפשר להגדיר את משתנה הסביבה$ANDROID_SERIAL
כך שיכלול את המספר הסידורי. - אם משתמשים גם ב-
-s
וגם ב-$ANDROID_SERIAL
,-s
מבטל את$ANDROID_SERIAL
.
- אם מריצים הרבה פקודות
בדוגמה הבאה, מתקבלת רשימת המכשירים המחוברים, ואז המספר הסידורי של אחד מהמכשירים משמש להתקנת helloWorld.apk
במכשיר הזה:
$ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk
הערה: אם נותנים פקודה בלי לציין מכשיר יעד כשיש כמה מכשירים זמינים, ב-adb
תוצג השגיאה "adb: more than one device/emulator".
אם יש לכם כמה מכשירים זמינים, אבל רק אחד מהם הוא אמולטור, תוכלו להשתמש באפשרות -e
כדי לשלוח פקודות לאמולטור. אם מחוברים כמה מכשירים אבל רק מכשיר חומרה אחד מחובר, אפשר להשתמש באפשרות -d
כדי לשלוח פקודות למכשיר החומרה.
התקנת אפליקציה
אפשר להשתמש ב-adb
כדי להתקין קובץ APK במה emultor או במכשיר ��חובר באמצעות הפקודה install
:
adb install path_to_apk
צריך להשתמש באפשרות -t
עם הפקודה install
כשמתקינים קובץ APK לבדיקה. למידע נוסף,
ראו -t
.
כדי להתקין כמה חבילות APK, משתמשים ב-install-multiple
. האפשרות הזו שימושית אם מורידים מ-Play Console את כל קובצי ה-APK של האפליקציה למכשיר ספציפי, ואז רוצים להתקין אותם במהדמ או במכשיר פיזי.
למידע נוסף על יצירת קובץ APK שאפשר להתקין במכונה של אמולטור או מכשיר, ראו יצירה והפעלה של אפליקציה.
הערה: אם אתם משתמשים ב-Android Studio, אתם לא צריכים להשתמש ישירות ב-adb
כדי להתקין את האפליקציה במהדורת האדמולטור או במכשיר. במקום זאת, Android Studio מטפלת באריזה ובהתקנה של האפליקציה בשבילכם.
הגדרת העברה ליציאה אחרת
משתמשים בפקודה forward
כדי להגדיר העברה שרירותית ליציאה אחרת, שמעבירה בקשות ביציאת מארח ספציפית ליציאה אחרת במכשיר.
בדוגמה הבאה מגדירים העברה של יציאת המארח 6100 ליציאת המכשיר 7100:
adb forward tcp:6100 tcp:7100
בדוגמה הבאה מוגדרת העברה של יציאה 6100 למארח ל-local:logd:
adb forward tcp:6100 local:logd
האפשרות הזו שימושית אם רוצים לבדוק מה נשלח לשקע מסוים במכשיר. כל הנתונים שיתקבלו ייכתבו לדימון (daemon) לרישום המערכת ויוצגו ביומני המכשיר.
העתקת קבצים למכשיר וממנו
משתמשים בפקודות pull
ו-push
כדי להעתיק קבצים למכשיר וממנו. בניגוד לפקודה install
, שמעתיקה רק קובץ APK למיקום ספציפי, הפקודות pull
ו-push
מאפשרות להעתיק ספריות וקבצים שרירותיים לכל מיקום במכשיר.
כדי להעתיק קובץ או ספרייה ואת ספריות המשנה שלהם מהמכשיר:
adb pull remote local
כדי להעתיק קובץ או ספרייה ואת ספריות המשנה שלהם אל המכשיר:
adb push local remote
מחליפים את local
ו-remote
בנתיב לקובץ או לתיקיית היעד במחשב הפיתוח (מקומי) ובמכשיר (מרחוק). לדוגמה:
adb push myfile.txt /sdcard/myfile.txt
עצירת שרת adb
במקרים מסוימים, יכול להיות שתצטרכו לסיים את תהליך השרת adb
ואז להפעיל אותו מחדש כדי לפתור את הבעיה. לדוגמה, המצב הזה יכול לקרות אם adb
לא מגיב לפקודה.
כדי להפסיק את השרת adb
, משתמשים בפקודה adb kill-server
.
לאחר מכן אפשר להפעיל מחדש את השרת באמצעות כל פקודת adb
אחרת.
הפעלת פקודות adb
אפשר להריץ פקודות adb
משורת הפקודה במכונה לפיתוח או מסקריפט ��אמצעות הפקודות הבאות:
adb [-d | -e | -s serial_number] command
אם פועל רק אמולטור אחד או שמחובר רק מכשיר אחד, הפקודה adb
נשלחת למכשיר הזה כברירת מחדל. אם פועלים כמה מכשירי אמולציה ו/או מחוברים כמה מכשירים, צריך להשתמש באפשרות -d
, -e
או -s
כדי לציין את מכשיר היעד שאליו צריך לשלוח את הפקודה.
אפשר לראות רשימה מפורטת של כל הפקודות הנתמכות של adb
באמצעות הפקודה הבאה:
adb --help
מתן פקודות מעטפת
אפשר להשתמש בפקודה shell
כדי להפעיל פקודות במכשיר דרך adb
או כדי להפעיל מעטפת אינטראקטיבית. כדי ליצור פקודה אחת, משתמשים בפקודה shell
, למשל:
adb [-d |-e | -s serial_number] shell shell_command
כדי להפעיל מעטפת אינטראקטיבית במכשיר, משתמשים בפקודה shell
כמו:
adb [-d | -e | -s serial_number] shell
כדי לצאת ממעטפת אינטראקטיבית, מקישים על Control+D
או מקלידים exit
.
ב-Android יש את רוב הכלים הרגילים של שורת הפקודה של Unix. כדי לקבל רשימה של הכלים הזמינים, משתמשים בפקודה הבאה:
adb shell ls /system/bin
אפשר לקבל עזרה לגבי רוב הפקודות באמצעות הארגומנט --help
.
רבות מפקודות המעטפת מסופקות על ידי toybox.
עזרה כללית שחלה על כל הפקודות של תיבת הצעצועים זמינה באמצעות toybox --help
.
ב-Android Platform Tools מגרסה 23 ואילך, הפקודה adb
מטפלת בארגומנטים באותו אופן שבו הפקודה ssh(1)
מטפלת בהם. השינוי הזה תיקן הרבה בעיות שקשורות להזרקת פקודות, ומאפשר להריץ בבטחה פקודות שמכילות מטא-תווים של מעטפת, כמו adb install Let\'sGo.apk
. המשמעות של השינוי הזה היא שהפרשנות של כל פקודה שמכילה מטא-תווים במעטפת השתנתה גם היא.
לדוגמה, adb shell setprop key 'two words'
היא עכשיו שגיאה, כי המעטפת המקומית 'לוקחת' את המירכאות, והמכשיר רואה adb shell setprop key two words
. כדי שהפקודה תפעל, צריך להוסיף פעמיים מירכאות, פעם אחת למעטפת המקומית ופעם אחת למעטפת המרוחקת, כמו שצריך לעשות עם ssh(1)
. לדוגמה, adb shell setprop key "'two words'"
פועל כי המעטפת המקומית מתייחסת לרמת הציטוט החיצונית והמכשיר עדיין רואה את הרמה הפנימית של הציטוט: setprop key 'two words'
. אפשר גם להשתמש בהימלטות, אבל בדרך כלל קל יותר להוסיף ציטוט פעמיים.
אפשר גם להיעזר בכלי שורת הפקודה Logcat כדי לעקוב אחרי יומן המערכת.
מנהל פעילות השיחות
בתוך מעטפת adb
, אפשר להשתמש בכלי של מנהל הפעילויות (am
) כדי להוציא פקודות ולבצע פעולות שונות במערכת, כמו הפעלת פעילות, עצירת תהליך בכוח, שידור כוונה, שינוי מאפייני המסך של המכשיר ועוד.
במעטפת, התחביר של am
הוא:
am command
אפשר גם להריץ פקודה של מנהל הפעילות ישירות מ-adb
בלי להזין מעטפת מרוחקת. לדוגמה:
adb shell am start -a android.intent.action.VIEW
הוראה | תיאור |
---|---|
start [options] intent
|
הפעלת Activity שצוין על ידי intent . האפשרויות הן:
|
startservice [options] intent
|
מפעילים את ה-Service שצוין ב-intent . האפשרויות הן:
|
force-stop package
|
סגירה ידנית של כל מה שמשויך אל package .
|
kill [options] package
|
מבטלים את כל התהליכים שמשויכים ל-package . הפקודה הזו מחסלת רק תהליכים שאפשר להרוג בבטחה ולא ישפיעו על חוויית המשתמש.
האפשרויות הן:
|
kill-all
|
מחיקת כל התהליכים ברקע. |
broadcast [options] intent
|
לפרסם כוונת שידור. האפשרויות הן:
|
instrument [options] component
|
אפשר להתחיל את המעקב באמצעות מכונה של Instrumentation .
בדרך כלל היעד component הוא הטופס test_package/runner_class . האפשרויות הן:
|
profile start process file
|
מפעילים את הכלי לניתוח ביצועים ב-process , כותבים את התוצאות ב-file .
|
profile stop process
|
הפסקת הפרופיל של process .
|
dumpheap [options] process file
|
יצירת גרסת dump של process , כתיבת file . האפשרויות הן:
|
set-debug-app [options] package
|
מגדירים את האפליקציה package לניפוי באגים. האפשרויות הן:
|
clear-debug-app
|
מנקים את החבילה שהוגדרה בעבר לניפוי באגים באמצעות set-debug-app .
|
monitor [options]
|
מתחילים לעקוב אחרי קריסות או אירועי ANR. האפשרויות הן:
|
screen-compat {on | off} package
|
לשלוט במצב תאימות המסך של package .
|
display-size [reset | widthxheight]
|
לשנות את גודל התצוגה במכשיר.
הפקודה הזו שימושית כדי לבדוק את האפליקציה במסכים בגדלים שונים – ��משל, חיקוי של רזולוציית מסך קטנה במכשיר עם מסך גדול, ולהיפך.
דוגמה: |
display-density dpi
|
שינוי צפיפות התצוגה של המכשיר.
הפקודה הזו עוזרת לבדוק את האפליקציה בצפיפות מסך שונה, על ידי חיקוי של סביבה עם צפיפות מסך גבוהה באמצעות מסך עם צפיפות נמוכה, ולהפך.
דוגמה: |
to-uri intent
|
הדפסת מפרט הכוונה הנתון כ-URI. |
to-intent-uri intent
|
הדפסת מפרט הכוונה הנתון כ-URI מסוג intent: . |
מפרט לארגומנטים של כוונות
בפקודות של מנהל הפעילות שמקבלות ארגומנט intent
, אפשר לציין את Intent בעזרת האפשרויות הבאות:
מנהל חבילת שיחות (pm
)
במעטפת של adb
אפשר להנפיק פקודות לכלי מנהל החבילות (pm
) כדי לבצע פעולות ושאילתות על חבילות האפליקציה שמותקנות במכשיר.
בתור מעטפת, התחביר של pm
הוא:
pm command
אפשר גם להריץ פקודה של מנהל חבילות ישירות מ-adb
בלי להיכנס למעטפת מרוחק. לדוגמה:
adb shell pm uninstall com.example.MyApp
הוראה | תיאור |
---|---|
list packages [options] filter
|
הדפסת כל החבילות, או רק את החבילות ששם החבילה שלהן מכיל את הטקסט ב-filter . עכשיו אפשר:
|
list permission-groups
|
מדפיסים את כל קבוצות ההרשאות הידועות. |
list permissions [options] group
|
הדפסת כל ההרשאות הידועות, או רק את אלה שב-group . עכשיו אפשר:
|
list instrumentation [options]
|
הצגת רשימה של כל חבילות הבדיקה. עכשיו אפשר:
|
list features
|
הדפסת כל תכונות המערכת. |
list libraries
|
הדפס את כל הספריות הנתמכות במכשיר הנוכחי. |
list users
|
הדפסת כל המשתמשים במערכת. |
path package
|
מדפיסים את הנתיב לקובץ ה-APK של package הנתון.
|
install [options] path
|
התקנה של חבילה, שצוינה על ידי path , במערכת. עכשיו אפשר:
|
uninstall [options] package
|
הסרת חבילה מהמערכת. עכשיו אפשר:
|
clear package
|
מחיקה של כל הנתונים שמשויכים לחבילה. |
enable package_or_component
|
מפעילים את החבילה או הרכיב הנתונים (כתובים כ "package/class"). |
disable package_or_component
|
משביתים את החבילה או הרכיב הנתונים (כתובים כ "package/class"). |
disable-user [options] package_or_component
|
עכשיו אפשר:
|
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
|
שינוי מיקום ההתקנה שמוגדר כברירת מחדל. ערכי מיקום:
הערה: האפשרות הזו מיועדת רק לניפוי באגים. שימוש באפשרות הזו עלול לגרום לשיבושים באפליקציות ולהתנהגות לא רצויה אחרת. |
get-install-location
|
הפונקציה מחזירה את מיקום ההתקנה הנוכחי. הערכים המוחזרים:
|
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 הנתון, או של כל החבילות אם לא צוין אף אחת. קודי המדינה מוגדרים כך:
האפשרויות הן:
|
reset-app-links [options] [package]
|
איפוס מצב האימות של הדומיין לחבילה הנתונה, או לכל החבילות אם לא צוינה אף אחת.
האפשרויות הן:
|
verify-app-links [--re-verify] [package]
|
שליחת בקשת אימות עבור package הנתון, או לכל החבילות אם לא צוינה אף אחת. ההודעה נשלחת רק אם לא תועדה תשובה לחבילה בעבר.
|
set-app-links [--package package] state domains
|
הגדרה ידנית של מצב הדומיין לחבילה. כדי שהבדיקה תפעל, החבילה צריכה להצהיר על הדומיין כ-autoVerify. הפקודה הזו לא תדווח על כשל בדומיינים שלא ניתן להחיל.
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
הגדרה ידנית של המצב של בחירת משתמש מארח לחבילה. כדי שזה יפעל, הדומיין צריך להוצהר בחבילה. הפקודה הזו לא תדווח על כשל בדומיינים שלא ניתן להחיל.
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
הגדרה ידנית של המצב של בחירת משתמש מארח לחבילה. כדי שזה יעבוד, החבילה צריכה להצהיר על הדומיין. הפקודה הזו לא תדווח על כשל לגבי דומיינים שלא ניתן היה להחיל עליהם את ההגדרות.
|
set-app-links-allowed --user user_id [--package package] allowed
|
שינוי ההגדרה של טיפול בקישורים שאומתו באופן אוטומטי לחבילה.
|
get-app-link-owners --user user_id [--package package] domains
|
אפשר להדפיס את הבעלים של דומיין ספציפי של משתמש מסוים בסדר עדיפות נמוך לגבוה.
|
קריאה למנהל מדיניות המכשיר (dpm
)
כדי לעזור לך לפתח ולבדוק את האפליקציות לניהול מכשירים, צריך להנפיק פקודות לכלי לניהול מדיניות המכשיר (dpm
). אפשר להשתמש בכלי כדי לשלוט באפליקציית האדמין הפעילה או לשנות את נתוני הסטטוס של מדיניות במכשיר.
בתור מעטפת, התחביר של dpm
הוא:
dpm command
אפשר גם להפעיל פקודה של מנהל מדיניות המכשיר ישירות מ-adb
בלי להיכנס למעטפת מרחוק:
adb shell dpm command
הוראה | תיאור |
---|---|
set-active-admin [options] component
|
הגדרת component כאדמין פעיל.
האפשרויות הן:
|
set-profile-owner [options] component
|
מגדירים את component כאדמין פעיל ואת החבילה שלו כבעלים של פרופ��ל של משתמש קיים.
האפשרויות הן:
|
set-device-owner [options] component
|
מגדירים את component כאדמין פעיל ואת החבילה שלו כבעלים של המכשיר.
האפשרויות הן:
|
remove-active-admin [options] component
|
להשבית אדמין פעיל. האפליקציה צריכה להצהיר על android:testOnly במניפסט. הפקודה הזו מסירה גם את הבעלים של המכשיר והפרופיל.
האפשרויות הן:
|
clear-freeze-period-record
|
מחיקת הרשומה במכשיר של תקופות ההקפאה שהוגדרו בעבר לעדכוני OTA של המערכת. האפשרות הזו שימושית כדי לעקוף את ההגבלות על תזמון במכשיר כשמפתחים אפליקציות שמנהלות תקופות הקפאה. למידע נוסף, ראו ניהול עדכוני מערכת.
התכונה נתמכת במכשירים עם Android 9.0 (רמת API 28) ואילך. |
force-network-logs
|
איך מאלצים את המערכת להכין את יומני הרשת הקיימים לאחזור על ידי DPC. אם יש יומני חיבור או יומני DNS זמינים, ה-DPC מקבל את הקריאה החוזרת (callback) onNetworkLogsAvailable() . תיעוד הפעילות ברשת
יש הגבלה על קצב שליחת הבקשות של הפקודה הזו. נתמכת במכשירים עם Android בגרסה 9.0 (רמת API 28) ואילך. |
force-security-logs
|
מאלצים את המערכת להפוך את כל יומני האבטחה הקיימים לזמינים ל-DPC. אם יש יומנים זמינים, ה-DPC מקבל את הקריאה החוזרת onSecurityLogsAvailable() . תיעוד הפעילות במכשירים ארגוניים
יש הגבלה על קצב שליחת הבקשות של הפקודה הזו. התכונה נתמכת במכשירים עם Android 9.0 (רמת API 28) ואילך. |
יצירת צילום מסך
הפקודה screencap
היא תוכנית מעטפת לצילום מסך של מסך המכשיר.
בתור מעטפת, התחביר של screencap
הוא:
screencap filename
כדי להשתמש ב-screencap
משורת הפקודה, מזינים את הפקודה הבאה:
adb shell screencap /sdcard/screen.png
דוגמה לסשן צילום מסך, שבו נעשה שימוש במסוף adb
כדי לצלם את צילום המסך ופקודת pull
כדי להוריד את הקובץ מהמכשיר:
$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png
הקלט סרטון
הפקודה screenrecord
היא תוכנית מעטפת לתיעוד המסך של מכשירים שפועלת בהם מערכת Android בגרסה 4.4 (רמת API 19) ואילך. הכלי מתעד את פעילות המסך בקובץ MPEG-4. אפשר להשתמש בקובץ הזה כדי ליצור סרטו��ים של קידום מכירות או הדרכה, או לצורך ניפוי באגים ובדיקות.
במעטפת, משתמשים בתחביר הבא:
screenrecord [options] filename
כדי להשתמש ב-screenrecord
משורת הפקודה, מזינים את הפקודה הבאה:
adb shell screenrecord /sdcard/demo.mp4
כדי להפסיק את הקלטת המסך, מקישים על Control+C. אחרת, ההקלטה
תיפסק אוטומטית אחרי שלוש דקות או מגבלת הזמן שהוגדרה על ידי --time-limit
.
כדי להתחיל להקליט את מסך המכשיר, מריצים את הפקודה screenrecord
כדי להקליט את הסרטון. לאחר מכן, מריצים את הפקודה pull
כדי להוריד את הסרטון מהמכשיר למחשב המארח. דוגמה לסשן הקלטה:
$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4
הכלי screenrecord
יכול להקליט בכל רזולוציה וקצב העברת נתונים נתמכים
שמבקשים, תוך שמירה על יחס הגובה-רוחב של מסך המכשיר. הכלי מתעד כברירת מחדל ברזולוציה ובכיוון של המסך המקורי, באורך של עד שלוש דקות.
מגבלות של השירות screenrecord
:
- האודיו לא מוקלט עם קובץ הווידאו.
- אי אפשר לצלם סרטונים במכשירים עם Wear OS.
- יכול להיות שבחלק מהמכשירים לא תהיה אפשרות לצלם ברזולוציית המסך המקורית. אם נתקלתם בבעיות בהקלטת מסך, נסו להשתמש ברזולוציית מסך נמוכה יותר.
- אין תמיכה בסיבוב המסך במהלך ההקלטה. אם המסך מסתובב במהלך ההקלטה, חלק מהמסך יוחסר בהקלטה.
אפשרויות | תיאור |
---|---|
--help
|
הצגת התחביר והאפשרויות של הפקודה |
--size widthxheight
|
מגדירים את גודל הסרטון: 1280x720 . ערך ברירת המחדל הוא רזולוציית התצוגה המקורית של המכשיר (אם יש תמיכה) או 1280x720 אם אין תמיכה. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש בגודל שנתמך במקודד Advanced Video Coding (AVC) של המכשיר. |
--bit-rate rate |
מגדירים את קצב העברת הנתונים של הסרטון במגה-ביט לשנייה. ערך ברירת המחדל הוא 20Mbps.
אפשר להגדיל את קצב הביטים כדי לשפר את איכות הסרטון, אבל הפעולה הזו גורמת לקובצי סרטים גדולים יותר. בדוגמה הבאה מוגדר קצב הנתונים של ההקלטה ל-6Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit time |
מגדירים את משך ההקלטה המקסימלי, בשניות. ערך ברירת המחדל והערך המקסימלי הוא 180 (3 דקות). |
--rotate |
מסובבים את הפלט ב-90 מעלות. התכונה הזו היא ניסיונית. |
--verbose |
הצגת פרטי היומן במ��ך שורת הפקודה. אם לא מגדירים את האפשרות הזו, הכלי לא יציג מידע כלשהו במהלך הפעלתו. |
קריאת פרופילי ART של אפליקציות
החל מגרסה 7.0 של Android (רמת API 24), סביבת זמן הריצה של Android (ART) אוספת פרופילי ביצוע של אפליקציות מותקנות, שמשמשים לאופטימיזציה של ביצועי האפליקציות. בודקים את הפרופילים שנאספו כדי להבין אילו שיטות מתבצעות בתדירות גבוהה ואילו כיתות נמצאות בשימוש במהלך הפעלת האפליקציה.
הערה: אפשר לאחזר את שם הקובץ של פרופיל הביצוע רק אם יש גישה לרמה הבסיסית (root) למערכת הקבצים, למשל באמצעות אמולטור.
כדי ליצור טקסט של פרטי הפרופיל, משתמשים בפקודה הבאה:
adb shell cmd package dump-profiles package
כדי לאחזר את הקובץ שנוצר, משתמשים ב-:
adb pull /data/misc/profman/package.prof.txt
איפוס מכשירים לבדיקה
אם אתם בודקים את האפליקציה במספר מכשירי בדיקה, כדאי לאפס את המכשיר בין הבדיקות. לדוגמה, כדי להסיר את נתוני המשתמשים ולאפס את סביבת הבדיקה. אפשר לבצע איפוס להגדרות המקוריות של מכשיר בדיקה שבו פועלת גרסת Android 10 (רמת API 29) ואילך באמצעות הפקודה testharness
adb
, כפי שמתואר בהמשך:
adb shell cmd testharness enable
כשמשחזרים את המכשיר באמצעות testharness
, המכשיר מגבה באופן אוטומטי את מפתח ה-RSA שמאפשר ניפוי באגים דרך תחנת העבודה הנוכחית במיקום קבוע. כלומר, אחרי איפוס המכשיר, תחנת העבודה יכולה להמשיך לנפות באגים ולהנפיק פקודות adb
למכשיר בלי לרשום מפתח חדש באופן ידני.
בנוסף, כדי להקל על בדיקת האפליקציה ולהבטיח את האבטחה שלה, שימוש ב-testharness
לשחזור מכשיר משנה גם את הגדרות המכשיר הבאות:
- המכשיר מגדיר הגדרות מערכת מסוימות כדי שאשפי ההגדרה הראשונית של המכשיר לא יופיעו. כלומר, המכשיר עובר למצב שממנו אפשר להתקין, לנפות באגים ולבדוק את האפליקציה במהירות.
- הגדרות:
- השבתת מסך הנעילה.
- השבתת ההתראות על מקרי חירום.
- השבתת הסנכרון האוטומטי בחשבונות.
- ההגדרה משביתה עדכוני מערכת אוטומטיים.
- אחר:
- ההגדרה משביתה אפליקציות אבטחה שהותקנו מראש.
אם האפליקציה צריכה לזהות ולהתאים את הגדרות ברירת המחדל של הפקודה testharness
, משתמשים בפקודה
ActivityManager.isRunningInUserTestHarness()
.
sqlite
sqlite3
מפעיל את תוכנית שורת הפקודה sqlite
לבדיקה של מסדי נתונים של SQLite.
הוא כולל פקודות כמו .dump
כדי להדפיס את התוכן של טבלה, ו-.schema
כדי להדפיס את ההצהרה SQL CREATE
לטבלה קיימת.
אפשר גם להריץ פקודות SQLite משורת הפקודה, כפי שמוצג:
$ adb -s emulator-5554 shell $ sqlite3 /data/data/com.example.app/databases/rssitems.db SQLite version 3.3.12 Enter ".help" for instructions
הערה: אפשר לגשת למסד נתונים של SQLite רק אם יש לכם הרשאת root למערכת הקבצים, למשל במהלך הדמיה.
מידע נוסף זמין במסמכי התיעוד של שורת הפקודה sqlite3
.
קצות עורפי של adb USB
שרת ה-adb יכול לקיים אינטראקציה עם מקבץ ה-USB דרך שני קצוות עורפיים. הוא יכול להשתמש בקצה העורפי המקורי של מערכת ההפעלה (Windows, Linux או macOS) או בקצה העורפי של libusb
.
תכונות מסוימות, כמו attach
, detach
וזיהוי מהירות USB, זמינות רק כשמשתמשים בקצה העורפי של libusb
.
אפשר לבחור קצה עורפי באמצעות משתנה הסביבה ADB_LIBUSB
.
אם לא מגדירים אותו, adb משתמש בקצה העורפי שמוגדר כברירת מחדל. התנהגות ברירת המחדל משתנה בהתאם למערכת ההפעלה. החל מ-ADB v34, הקצה העורפי liubusb
משמש כברירת מחדל בכל מערכות ההפעלה, מלבד Windows, שבה הקצה העורפי המקורי משמש כברירת מחדל. אם הערך של ADB_LIBUSB
מוגדר, הוא קובע אם נעשה שימוש בקצה העורפי המקורי או ב-libusb
. מידע נוסף על משתני הסביבה של adb זמין בדף המדריך של adb.
קצוות עורפי של mDNS ב-adb
ADB יכול להשתמש בפרוטוקול ה-DNS של ה-multicast כדי לחבר באופן אוטומטי את השרת ואת המכשירים. שרת ה-ADB נשלח עם שני קצוות עורפיים, Bonjour (mdnsResponseer של Apple) ו-Openscreen.
כדי להפעיל את הקצה העורפי של Bonjour, צריך להפעיל דימון במכונה המארחת.
ב-macOS, הדימון המובנה של Apple תמיד פועל, אבל ב-Windows וב-Linux, המשתמש צריך לוודא שהדימון mdnsd
פועל.
אם הפקודה adb mdns check
מחזירה שגיאה, סביר להניח ש-ADB משתמש בקצה העורפי של Bonjour אבל אי�� דימון Bonjour שפועל.
לקצה העורפי של Openscreen לא נדרש דימון (daemon) שפועל במכונה. התמיכה בקצה העורפי Openscreen ב-macOS מתחילה ב-ADB v35. החל מגרסה 34 של ADB, יש תמיכה ב-Windows וב-Linux.
כברירת מחדל, ADB משתמש בקצה העורפי של Bonjour. אפשר לשנות את ההתנהגות הזו באמצעות משתנה הסביבה ADB_MDNS_OPENSCREEN
(מוגדרת ל-1
או ל-0
). פרטים נוספים זמינים בדף המדריך של ADB.