גשר ניפוי הבאגים של Android (adb
) הוא כלי שורת פקודה רב-תכליתי שמאפשר לתקשר עם מכשיר. הפקודה adb
מאפשרת מגוון פעולות במכשיר, כמו התקנה וניפוי באגים של אפליקציות. adb
מספקת גישה למעטפת Unix שאפשר להשתמש בה כדי להריץ מגוון פקודות במכשיר. זוהי תוכנת שרת לקוח שכוללת שלושה רכיבים:
- לקוח, ששולח פקודות. הלקוח פועל במכונת הפיתוח שלכם. אפשר להפעיל לקוח מטרמינל של שורת הפקודה על ידי הנפקת פקודת
adb
. - דימון (daemon) (adbd), שמריץ פקודות במכשיר. הדימון פועל כתהליך ברקע בכל מכשיר.
- שרת, שמנהל את התקשורת בין הלקוח לדימון (daemon). השרת פועל כתהליך ברקע במכונת הפיתוח.
adb
כלול בחבילת הכלים של Android SDK Platform. מורידים את החבילה הזו באמצעות מנהל ה-SDK, שמתקין אותה ב-android_sdk/platform-tools/
. אם רוצים את החבילה הנפרדת של Android SDK Platform Tools, אפשר להוריד אותה כאן.
למידע על חיבור מכשיר לשימוש ב-adb
, כולל הוראות לשימוש ב-Connection Assistant כדי לפתור בעיות נפוצות, כדאי לעיין במאמר הפעלת אפליקציות במכשיר חומרה.
איך adb פועל
כשמפעילים לקוח adb
, הלקוח בודק קודם אם קיים כבר תהליך שרת של adb
. אם לא, המערכת מפעילה את תהליך השרת.
כשהשרת מתחיל, הוא נקשר ליציאת ה-TCP המקומית 5037 ומאזינים לפקודות שנשלחות מלקוחות adb
.
הערה: כל הלקוחות של adb
משתמשים ביציאה 5037 כדי לתקשר עם השרת adb
.
לאחר מכן השרת מגדיר חיבורים לכל המכשירים שפועלים.
הוא מאתר אמולטורים באמצעות סריקת יציאות עם מספר אי-זוגי בטווח 5555 עד 5585, שהוא הטווח של 16 האמולטורים הראשונים. כששרת מוצא דימון (daemon) של adb
(adbd), הוא מגדיר חיבור ליציאה הזו.
כל אמולטור משתמש בזוג יציאות רצופות – יציאה עם מספר שווה לחיבורי המסוף ויציאה עם מספר אי-זוגי לחיבורים של adb
. לדוגמה:
אמולטור 1, קונסולה: 5554
אמולטור 1, adb
: 5555
אמולטור 2, קונסולה: 5556
אמולטור 2, adb
: 5557
וכן הלאה.
כפי שמוצג, האמולטור שמחובר ל-adb
ביציאה 5555 זהה לאמולטור שהמסוף שלו מאזין ביציאה 5554.
אחרי שהשרת יגדיר חיבורים לכל המכשירים, אפשר להשתמש בפקודות adb
כדי לגשת למכשירים האלה. השרת מנהל את החיבורים למכשירים ומטפל בפקודות של מספר לקוחות adb
, ולכן אתם יכולים לשלוט בכל מכשיר מכל לקוח או מסקריפט.
הפעלת ניפוי באגים ב-adb במכשיר
כדי להשתמש ב-adb עם מכשיר שמחובר באמצעות USB, צריך להפעיל את האפשרות ניפוי באגים ב-USB בהגדרות המערכת של המכשיר, בקטע אפשרויות למפתחים. במכשירי Android מגרסה 4.2 (רמת API 17) ואילך, המסך אפשרויות למפתחים מוסתר כברירת מחדל. כדי שהיא תהיה גלויה, צריך להפעיל את הפיצ'ר 'אפשרויות למפתחים'.
עכשיו אפשר לחבר את המכשיר באמצעות USB. כדי לוודא שהמכשיר מחובר,
צריך להריץ את adb devices
מהספרייה android_sdk/platform-tools/
. אם יש חיבור,
שם המכשיר יופיע כ'מכשיר'.
הערה: כשמחברים מכשיר עם Android מגרסה 4.2.2 (רמת API 17) ואילך, המערכת מציגה תיבת דו-שיח שבה אנחנו מתבקשים לאשר מפתח RSA שמאפשר לנפות באגים באמצעות המחשב הזה. מנגנון האבטחה הזה מגן על מכשירי המשתמשים כי הוא מבטיח שלא ניתן יהיה לבצע ניפוי באגים ב-USB ופקודות adb אחרות אלא אם ניתן לבטל את נעילת המכשיר ולאשר את תיבת הדו-שיח.
מידע נוסף על חיבור למכשיר באמצעות USB מופיע במאמר הפעלת אפליקציות במכשיר חומרה.
התחברות למכשיר באמצעות Wi-Fi
הערה: ההוראות שבהמשך לא רלוונטיות למכשירי Wear עם Android 11 (רמת API 30). מידע נוסף זמין במדריך לניפוי באגים באפליקציה ל-Wear OS.
Android 11 (רמת API 30) ואילך עם תמיכה בפריסה ובניפוי באגים של האפליקציה באופן אלחוטי מתחנת העבודה באמצעות Android Debug Bridge (adb). לדוגמה, אפשר לפרוס את האפליקציה שניתנת לניפוי באגים במספר מכשירים מרוחקים בלי שיהיה צורך לחבר את המכשיר פיזית באמצעות USB. כך לא תצטרכו לטפל בבעיות נפוצות בחיבור USB, כמו התקנת מנהל התקן.
לפני שמתחילים להשתמש בניפוי באגים אלחוטי, צריך לבצע את הפעולות הבאות:
-
חשוב לוודא שתחנת העבודה והמכשיר מחוברים לאותה רשת אלחוטית.
-
צריך לוודא שבמכשיר פועלת מערכת Android מגרסה 11 (רמת API 30) ואילך לטלפון, או Android מגרסה 13 (API ברמה 33) ואילך לטלוויזיה ול-WearOS. מידע נוסף זמין במאמר איך בודקים ומעדכנים את גרסת Android במכשיר.
-
אם אתם משתמשים בסביבת פיתוח משולבת (IDE), חשוב לוודא שמותקנת הגרסה העדכנית של Android Studio. אפשר להוריד אותו מכאן.
-
בתחנת העבודה, מעדכנים לגרסה האחרונה של SDK Platform Tools.
כדי להשתמש בניפוי באגים אלחוטי, צריך להתאים את המכשיר לתחנת העבודה באמצעות קוד QR או קוד התאמה. תחנת העבודה והמכשיר צריכים להיות מחוברים לאותה רשת אלחוטית. כדי להתחבר למכשיר:
-
הפעלת אפשרויות למפתחים במכשיר שלך.
-
פותחים את Android Studio ובוחרים באפשרות התאמת מכשירים באמצעות Wi-Fi מתפריט ההגדרות של ההפעלה.
איור 1. הפעלת תפריט ההגדרות האישיות.החלון התאמת מכשירים באמצעות Wi-Fi קופץ, כמו שמוצג באיור 2.
איור 2. חלון קופץ להתאמת מכשירים באמצעות קוד QR או קוד התאמה. -
במכשיר, מקישים על ניפוי באגים אלחוטי ומתאימים את המכשיר:
איור 3. צילום מסך של ההגדרה ניפוי באגים אלחוטי בטלפון Google Pixel.-
כדי להתאים את המכשיר באמצעות קוד QR, בוחרים באפשרות התאמת המכשיר באמצעות קוד QR וסורקים את קוד ה-QR שמופיע בחלון הקופץ התאמת מכשירים באמצעות רשת Wi-Fi שמוצג באיור 2.
-
כדי להתאים את המכשיר באמצעות קוד התאמה, בוחרים באפשרות התאמת המכשיר באמצעות קוד התאמה בחלון הקופץ התאמת מכשירים באמצעות רשת Wi-Fi. במכשיר, בוחרים באפשרות התאמה באמצעות קוד התאמה ורושמים את הקוד בן 6 הספרות שמופיע. כשמוצג המכשיר בחלון התאמת מכשירים באמצעות Wi-Fi, אפשר לבחור באפשרות התאמה ולהזין את הקוד בן 6 הספרות שמוצג במכשיר.
איור 4. דוגמה להזנה של קוד בן 6 ספרות.
-
-
אחרי התאמת המכשיר, אפשר לנסות לפרוס את האפליקציה במכשיר.
כדי להתאים מכשיר אחר או כדי למחוק את המכשיר הנוכחי בתחנת העבודה, עוברים אל ניפוי באגים אלחוטי במכשיר. מקישים על השם של תחנת העבודה בקטע מכשירים מותאמים ובוחרים באפשרות מחיקה.
-
כדי להפעיל ולכבות במהירות את ניפוי הבאגים האלחוטי, אפשר להשתמש במשבצות למפתחים של ההגדרות המהירות לניפוי באגים אלחוטי, שנמצא באפשרויות למפתחים > כרטיסי מידע למפתחים של הגדרות מהירות.
איור 5. ההגדרה משבצות למפתחים של ההגדרות המהירות מאפשרת להפעיל ולהשבית במהירות ניפוי באגים אלחוטי.
חיבור Wi-Fi באמצעות שורת פקודה
לחלופין, כדי להתחבר למכשיר באמצעות שורת פקודה בלי Android Studio, מבצעים את השלבים הבאים:
-
הפעלת אפשרויות למפתחים במכשיר, כפי שמתואר למעלה.
-
מפעילים ניפוי באגים אלחוטי במכשיר, כפי שתיארנו קודם.
-
בתחנת העבודה, פותחים חלון טרמינל ומנווטים אל
android_sdk/platform-tools
. -
מאתרים את כתובת ה-IP, מספר היציאה וקוד ההתאמה על ידי בחירה באפשרות התאמת המכשיר באמצעות קוד התאמה. חשוב לשים לב לכתובת ה-IP, למספר היציאה ולקוד ההתאמה שמוצגים במכשיר.
-
מריצים את
adb pair ipaddr:port
במסוף של תחנת העבודה. צריך להשתמש בכתובת ה-IP ובמספר היציאה שלמעלה. -
כשתתבקשו, הזינו את קוד ההתאמה כמו שמוצג בהמשך.
איור 6. תופיע הודעה שמציינת שהמכשיר שלך הותאם בהצלחה.
פתרון בעיות בחיבור אלחוטי
אם נתקלת בבעיות בהתחברות למכשיר באופן אלחוטי, כדאי לנסות את השלבים הבאים לפתרון הבעיה.
לבדוק אם תחנת העבודה והמכשיר שלכם עומדים בדרישות המוקדמות
צריך לוודא שתחנת העבודה והמכשיר עומדים בדרישות המוקדמות שמפורטות בתחילת הקטע הזה.
בדיקת בעיות ידועות אחרות
ריכזנו כאן רשימה של בעיות ידועות בניפוי באגים אלחוטי (עם adb או Android Studio) והדרכים לפתור אותן:
-
לא מתבצע חיבור ל-Wi-Fi: רשתות Wi-Fi מאובטחות, כמו רשתות Wi-Fi ארגוניות, עשויות לחסום חיבורי p2p ולא לאפשר חיבור באמצעות Wi-Fi. כדאי לנסות להתחבר באמצעות כבל או רשת Wi-Fi אחרת (לא ארגונית). חיבור אלחוטי באמצעות
adb connect ip:port
ב-tcp/ip (לאחר חיבור USB ראשוני) הוא אפשרות נוספת, למקרה שאפשר להשתמש ברשת שאינה של הארגון. -
לפעמים
adb
בחיבור Wi-Fi נכבה באופן אוטומטי: הדבר עשוי לקרות אם המכשיר עובר בין רשתות Wi-Fi או מתנתק מהרשת. כדי לפתור את הבעיה, צריך להתחבר מחדש לרשת. -
המכשיר לא מתחבר אחרי ההתאמה:
adb
מסתמך על mDNS כדי לגלות מכשירים מותאמים ולהתחבר אליהם באופן אוטומטי. אם הרשת או הגדרות המכשיר לא תומכים ב-mDNS או השביתו אותו, צריך להתחבר למכשיר באופן ידני באמצעותadb connect ip:port
.
חיבור אלחוטי למכשיר אחרי חיבור USB ראשוני (האפשרות זמינה רק ב-Android 10 ומטה)
הערה: תהליך העבודה הזה רלוונטי גם ל-Android 11 (ואילך), ולכן הוא כולל גם חיבור *ראשי* באמצעות USB פיזי.
הערה: ההוראות הבאות לא רלוונטיות למכשירי Wear עם Android מגרסה 10 (רמת API 29) ומטה. למידע נוסף, אפשר לעיין במדריך בנושא ניפוי באגים באפליקציה ל-Wear OS.
בדרך כלל, adb
מתקשר עם המכשיר באמצעות USB, אבל אפשר להשתמש
גם ב-adb
באמצעות Wi-Fi. כדי לחבר מכשיר עם Android מגרסה 10 (API ברמה 29) ומטה,
צריך לבצע את השלבים הראשוניים הבאים באמצעות USB:
-
מחברים את מכשיר ה-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: יותר ממכשיר/אמולטור אחד".
אם יש כמה מכשירים זמינים אבל רק אחד הוא אמולטור, אפשר להשתמש באפשרות -e
כדי לשלוח פקודות לאמולטור. אם מחוברים כמה מכשירים אבל רק מכשיר חומרה אחד מחובר, אפשר להשתמש באפשרות -d
כדי לשלוח פקודות למכשיר החומרה.
התקנת אפליקציה
אפשר להשתמש ב-adb
כדי להתקין APK באמולטור או במכשיר מחובר באמצעות הפקודה install
:
adb installpath_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 pullremote local
כדי להעתיק קובץ או ספרייה ואת ספריות המשנה שלהם אל המכשיר:
adb pushlocal remote
מחליפים את local
ו-remote
בנתיבים של קובצי היעד או ספריית היעד במכונת הפיתוח (מקומית) ובמכשיר (שלט רחוק). לדוגמה:
adb push myfile.txt /sdcard/myfile.txt
הפסקת שרת ה-adb
במקרים מסוימים, יכול להיות שתצטרכו לסיים את התהליך של adb
ואז להפעיל אותו מחדש כדי לפתור את הבעיה. לדוגמה, יכול להיות שזה מה שקורה אם adb
לא מגיב לפקודה.
כדי לעצור את השרת adb
, משתמשים בפקודה adb kill-server
.
לאחר מכן אפשר להפעיל מחדש את השרת על ידי הנפקה של כל פקודת adb
אחרת.
בעיה בפקודות adb
נותנים פקודות adb
משורת הפקודה במחשב למפתחים או מסקריפט באמצעות הקוד הבא:
adb [-d | -e | -sserial_number ]command
אם רק אמולטור אחד פועל או שרק מכשיר אחד מחובר, הפקודה adb
נשלחת למכשיר הזה כברירת מחדל. אם פועלים כמה אמולטורים ו/או מצורפים כמה מכשירים, צריך להשתמש באפשרויות -d
, -e
או -s
כדי לציין את מכשיר היעד שאליו צריך להפנות את הפקודה.
אפשר לראות רשימה מפורטת של כל פקודות adb
הנתמכות באמצעות הפקודה
הבאה:
adb --help
מתן פקודות מעטפת
אפשר להשתמש בפקודה shell
כדי לשלוח פקודות במכשיר דרך adb
או כדי להפעיל מעטפת אינטראקטיבית. כדי להריץ פקודה אחת, משתמשים בפקודה shell
, באופן הבא:
adb [-d |-e | -sserial_number ] shellshell_command
כדי להפעיל מעטפת אינטראקטיבית במכשיר, משתמשים בפקודה shell
כמו:
adb [-d | -e | -sserial_number ] shell
כדי לצאת ממעטפת אינטראקטיבית לוחצים על Control+D
או מקלידים exit
.
ב-Android יש את רוב כלי שורת הפקודה הרגילים של Unix. כדי לראות את רשימת הכלים הזמינים, משתמשים בפקודה הבאה:
adb shell ls /system/bin
ניתן לקבל עזרה לרוב הפקודות דרך הארגומנט --help
.
הרבה מפקודות המעטפת מסופקים על ידי toybox.
עזרה כללית שרלוונטית לכל הפקודות של toybox זמינה דרך toybox --help
.
בכלי הפלטפורמה של Android מגרסה 23 ואילך, adb
מטפל בארגומנטים באותו אופן כמו הפקודה ssh(1)
. השינוי הזה תיקן הרבה בעיות בהחדרת פקודה, והוא מאפשר להריץ בבטחה פקודות שמכילות מטא-תווים במעטפת, כמו adb install Let\'sGo.apk
. המשמעות של השינוי הזה היא שהפרשנות של כל פקודה שמכילה מטא-תווים במעטפת השתנתה גם היא.
לדוגמה, adb shell setprop key 'two words'
מוגדר עכשיו כשגיאה כי המעטפת המקומית בולעת את המירכאות והמכשיר רואה את הערך adb shell setprop key two words
. כדי שהפקודה תפעל, צריך לצטט פעמיים, פעם אחת עבור המעטפת המקומית ופעם אחת עבור המעטפת המרוחקת, כפי שנעשה באמצעות ssh(1)
. לדוגמה, adb shell setprop key "'two words'"
פועל כי המעטפת המקומית מתייחסת לרמת הציטוט החיצונית והמכשיר עדיין רואה את הרמה הפנימית של הציטוט: setprop key 'two words'
. אפשר גם
לצטט אותה בתו בריחה (escape), אבל בדרך כלל קל יותר לצטט פעמיים.
אפשר להיעזר גם בכלי שורת הפקודה Logcat כדי לעקוב אחרי יומן המערכת.
מנהל פעילות השיחה
במעטפת של adb
אפשר להנפיק פקודות לכלי מנהל הפעילות (am
) כדי לבצע פעולות שונות במערכת, כמו התחלת פעילות, הפסקה ידנית של תהליך, שידור כוונה, שינוי המאפיינים של מסך המכשיר ועוד.
בתוך המעטפת, התחביר am
הוא:
amcommand
אפשר גם להריץ פקודה של מנהל הפעילות ישירות מ-adb
בלי להזין מעטפת מרוחקת. לדוגמה:
adb shell am start -a android.intent.action.VIEW
טבלה 1. הפקודות הזמינות של מנהל הפעילות
הוראה | תיאור |
---|---|
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
|
יוצרים את הערימה של process וכותבים אל file . האפשרויות הן:
|
dumpbitmaps [options] [-p process]
|
שמירת מידע על מפת סיביות (bitmap) מ-process
(רמת API 36 ומעלה).
האפשרויות הן:
process , תתבצע הסרה של מפות סיביות מכל התהליכים.
|
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
|
הדפסה של מפרט Intent הנתון כ-URI. |
to-intent-uri intent
|
הדפסה של מפרט ה-Intent הנתון כ-URI של intent: . |
מפרט לארגומנטים של Intent
בפקודות של מנהל הפעילות שמקבלות ארגומנט intent
, אפשר לציין את Intent בעזרת האפשרויות הבאות:
-a action
- מציינים את פעולת ה-Intent, למשל
android.intent.action.VIEW
. אפשר להצהיר על כך רק פעם אחת. -d data_uri
- מציינים את ה-URI של נתוני Intent, למשל
content://contacts/people/1
. אפשר להצהיר על כך רק פעם אחת. -t mime_type
- צריך לציין את סוג ה-MIME של ה-Intent, למשל
image/png
. אפשר להצהיר על כך רק פעם אחת. -c category
- צריך לציין קטגוריית Intent, כמו
android.intent.category.APP_CONTACTS
. -n component
- מציינים את שם הרכיב עם קידומת של שם חבילה כדי ליצור Intent מפורש, כמו
com.example.app/.ExampleActivity
. -f flags
- מוסיפים דגלים ל-Intent, כפי שנתמך ב-
setFlags()
. --esn extra_key
- הוספת תוספת אפסית. האפשרות הזו לא נתמכת עבור כוונות URI.
-e | --es extra_key extra_string_value
- הוספת נתוני מחרוזת כצמד מפתח-ערך.
--ez extra_key extra_boolean_value
- הוסיפו נתונים בוליאניים כצמד מפתח/ערך.
--ei extra_key extra_int_value
- מוסיפים נתוני מספרים שלמים כצמד מפתח/ערך.
--el extra_key extra_long_value
- הוסיפו נתונים ארוכים כצמד מפתח-ערך.
--ef extra_key extra_float_value
- מוסיפים נתונים צפים כצמד מפתח/ערך.
--eu extra_key extra_uri_value
- מוסיפים נתוני URI כצמד מפתח/ערך.
--ecn extra_key extra_component_name_value
- מוסיפים שם של רכיב, שעובר המרה ועובר כאובייקט
ComponentName
. --eia extra_key extra_int_value[,extra_int_value...]
- הוספת מערך של מספרים שלמים.
--ela extra_key extra_long_value[,extra_long_value...]
- להוסיף מערך של ערכים ארוכים.
--efa extra_key extra_float_value[,extra_float_value...]
- הוספת מערך של פריטים צפופים.
--grant-read-uri-permission
- יש לכלול את הדגל
FLAG_GRANT_READ_URI_PERMISSION
. --grant-write-uri-permission
- יש לכלול את הדגל
FLAG_GRANT_WRITE_URI_PERMISSION
. --debug-log-resolution
- יש לכלול את הדגל
FLAG_DEBUG_LOG_RESOLUTION
. --exclude-stopped-packages
- יש לכלול את הדגל
FLAG_EXCLUDE_STOPPED_PACKAGES
. --include-stopped-packages
- יש לכלול את הדגל
FLAG_INCLUDE_STOPPED_PACKAGES
. --activity-brought-to-front
- יש לכלול את הדגל
FLAG_ACTIVITY_BROUGHT_TO_FRONT
. --activity-clear-top
- יש לכלול את הדגל
FLAG_ACTIVITY_CLEAR_TOP
. --activity-clear-when-task-reset
- יש לכלול את הדגל
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
. --activity-exclude-from-recents
- יש לכלול את הדגל
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
. --activity-launched-from-history
- יש לכלול את הדגל
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
. --activity-multiple-task
- יש לכלול את הדגל
FLAG_ACTIVITY_MULTIPLE_TASK
. --activity-no-animation
- יש לכלול את הדגל
FLAG_ACTIVITY_NO_ANIMATION
. --activity-no-history
- יש לכלול את הדגל
FLAG_ACTIVITY_NO_HISTORY
. --activity-no-user-action
- יש לכלול את הדגל
FLAG_ACTIVITY_NO_USER_ACTION
. --activity-previous-is-top
- יש לכלול את הדגל
FLAG_ACTIVITY_PREVIOUS_IS_TOP
. --activity-reorder-to-front
- יש לכלול את הדגל
FLAG_ACTIVITY_REORDER_TO_FRONT
. --activity-reset-task-if-needed
- יש לכלול את הדגל
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
. --activity-single-top
- יש לכלול את הדגל
FLAG_ACTIVITY_SINGLE_TOP
. --activity-clear-task
- יש לכלול את הדגל
FLAG_ACTIVITY_CLEAR_TASK
. --activity-task-on-home
- יש לכלול את הדגל
FLAG_ACTIVITY_TASK_ON_HOME
. --receiver-registered-only
- יש לכלול את הדגל
FLAG_RECEIVER_REGISTERED_ONLY
. --receiver-replace-pending
- יש לכלול את הדגל
FLAG_RECEIVER_REPLACE_PENDING
. --selector
- כדי להגדיר את נתוני Intent והסוג, צריך להשתמש באפשרויות
-d
ו--t
. URI component package
- אפשר לציין באופן ישיר URI, שם חבילה ושם רכיב כאשר הם לא עומדים בדרישות באמצעות אחת מהאפשרויות שלמעלה. כאשר ארגומנט לא מתאים, הכלי מניח שהארגומנט הוא URI אם הוא מכיל ":" (נקודתיים). הכלים מניחים שהארגומנט הוא שם של רכיב אם הוא מכיל "/" (קו נטוי לפנים). אחרת, הוא מניח שהארגומנט הוא שם חבילה.
מנהל חבילת שיחות (pm
)
במעטפת של adb
אפשר להנפיק פקודות לכלי מנהל החבילות (pm
) כדי לבצע פעולות ושאילתות על חבילות האפליקציה שמותקנות במכשיר.
בתוך המעטפת, התחביר pm
הוא:
pmcommand
אפשר גם לשלוח פקודה של מנהל החבילות ישירות מ-adb
בלי להזין מעטפת מרוחקת. לדוגמה:
adb shell pm uninstall com.example.MyApp
טבלה 2. הפקודות הזמינות של מנהל החבילות
הוראה | תיאור |
---|---|
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-allowed --user user_id [--package package] allowed
|
מפעילים או משביתים את ההגדרה של טיפול בקישורים שאומתו באופן אוטומטי עבור חבילה.
|
get-app-link-owners --user user_id [--package package] domains
|
אפשר להדפיס את הבעלים של דומיין ספציפי של משתמש מסוים בסדר עדיפות נמוך לגבוה.
|
שיחה למנהל מדיניות המכשיר (dpm
)
כדי לעזור לך לפתח ולבדוק את האפליקציות לניהול מכשירים, צריך להנפיק פקודות לכלי לניהול מדיניות המכשיר (dpm
). צריך להשתמש בכלי כדי לשלוט
באפליקציית הניהול הפעילה או לשנות את נתוני הסטטוס של מדיניות במכשיר.
בתוך המעטפת, התחביר dpm
הוא:
dpmcommand
אפשר גם לשלוח פקודה של מנהל מדיניות המכשיר ישירות מ-adb
בלי להזין מעטפת מרוחקת:
adb shell dpmcommand
טבלה 3. הפקודות הזמינות של מנהל מדיניות המכשיר
הוראה | תיאור |
---|---|
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 מקבל את הקריאה החוזרת onNetworkLogsAvailable() . מידע נוסף זמין במאמר רישום ביומן של פעילות רשת.
קצב ההפעלה של פקודה זו מוגבל. נתמכת במכשירים עם Android בגרסה 9.0 (רמת API 28) ואילך. |
force-security-logs
|
מאלצים את המערכת להפוך את כל יומני האבטחה הקיימים לזמינים ל-DPC. אם יש יומנים זמינים, ה-DPC מקבל את הקריאה החוזרת onSecurityLogsAvailable() . ראו רישום פעילות של מכשירים בארגון.
קצב ההפעלה של פקודה זו מוגבל. נתמכת במכשירים עם Android בגרסה 9.0 (רמת API 28) ואילך. |
יצירת צילום מסך
הפקודה screencap
היא כלי עזר במעטפת לצילום מסך של תצוגת המכשיר.
בתוך המעטפת, התחביר screencap
הוא:
screencapfilename
כדי להשתמש ב-screencap
משורת הפקודה, צריך להזין את הפרטים הבאים:
adb shell screencap /sdcard/screen.png
הנה דוגמה לסשן של צילום מסך, שבו משתמשים במעטפת adb
כדי לצלם את צילום המסך, ובפקודה pull
כדי להוריד את הקובץ מהמכשיר:
$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png
צלם סרטון.
הפקודה screenrecord
היא כלי עזר במעטפת לתיעוד התצוגה של מכשירים שפועלת בהם גרסת Android 4.4 (רמת API 19) ומעלה. כלי השירות מתעד את הפעילות במסך לקובץ MPEG-4. אפשר להשתמש בקובץ הזה כדי ליצור סרטונים שיווקיים או סרטוני הדרכה, או לניפוי באגים ובדיקות.
במעטפת, משתמשים בתחביר הבא:
screenrecord [options ]filename
כדי להשתמש ב-screenrecord
משורת הפקודה, צריך להזין את הפרטים הבאים:
adb shell screenrecord /sdcard/demo.mp4
כדי להפסיק את הקלטת המסך, מקישים על Control+C. אחרת, ההקלטה
תיפסק אוטומטית אחרי שלוש דקות או מגבלת הזמן שהוגדרה על ידי --time-limit
.
כדי להתחיל בהקלטת מסך המכשיר, מריצים את הפקודה screenrecord
כדי לצלם את הסרטון. לאחר מכן, מריצים את הפקודה pull
כדי להוריד את הסרטון מהמכשיר למחשב המארח. הנה דוגמה לסשן הקלטה:
$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4
הכלי screenrecord
יכול להקליט בכל רזולוציה וקצב העברת נתונים נתמכים
שמבקשים, תוך שמירה על יחס הגובה-רוחב של מסך המכשיר. כברירת מחדל, כלי השירות מתעד את הרזולוציה והכיוון של המסך המקורי, למשך עד שלוש דקות.
המגבלות של הכלי screenrecord
:
- לא מוקלט אודיו בקובץ הווידאו.
- הקלטת וידאו לא זמינה במכשירים עם מערכת ההפעלה Wear OS.
- בחלק מהמכשירים לא תהיה אפשרות להקליט ברזולוציה של התצוגה המקורית. אם נתקלתם בבעיות בהקלטת המסך, נסו להשתמש ברזולוציית מסך נמוכה יותר.
- אין תמיכה בסיבוב של המסך במהלך ההקלטה. אם המסך מסתובב במהלך ההקלטה, חלק מהמסך נחתך בהקלטה.
טבלה 4. screenrecord
אפשרויות
אפשרויות | תיאור |
---|---|
--help
|
הצגת התחביר והאפשרויות של הפקודה |
--size widthxheight
|
מגדירים את גודל הסרטון: 1280x720 . ערך ברירת המחדל הוא רזולוציית התצוגה המקורית של המכשיר (אם היא נתמכת), 1280x720. לקבלת התוצאות הטובות ביותר, מומלץ להשתמש בגודל שנתמך על ידי
מקודד ה-Advanced Video Coding (AVC) של המכשיר. |
--bit-rate rate |
מגדירים את קצב העברת הנתונים של הסרטון במגה-ביט לשנייה. ערך ברירת המחדל הוא 20Mbps.
אפשר להגביר את קצב העברת הנתונים כדי לשפר את איכות הווידאו, אבל פעולה זו תגרום ליצירת קובצי סרטים גדולים יותר. הדוגמה הבאה מגדירה את קצב העברת הנתונים של ההקלטה ל-6Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit time |
מגדירים את משך ההקלטה המקסימלי בשניות. ערך ברירת המחדל והערך המקסימלי הוא 180 (3 דקות). |
--rotate |
מסובבים את הפלט ב-90 מעלות. התכונה הזו היא ניסיונית. |
--verbose |
הצגת פרטי היומן במסך שורת הפקודה. אם לא מגדירים את האפשרות הזו, כלי השירות לא מציג מידע במהלך ההפעלה. |
קריאת פרופילים של ART לאפליקציות
החל מ-Android 7.0 (רמת API 24), סביבת זמן הריצה של Android (ART) אוספת פרופילים של הפעלה של אפליקציות מותקנות, כדי לבצע אופטימיזציה של ביצועי האפליקציות. כדאי לבחון את הפרופילים שנאספים כדי להבין אילו שיטות מופעלות בתדירות גבוהה ואילו מחלקות משמשות במהלך ההפעלה של האפליקציה.
הערה: אפשר לאחזר את שם הקובץ של פרופיל הביצוע רק אם יש גישה לרמה הבסיסית (root) למערכת הקבצים, למשל באמצעות אמולטור.
כדי ליצור טופס טקסט של פרטי הפרופיל, משתמשים בפקודה הבאה:
adb shell cmd package dump-profilespackage
כדי לאחזר את הקובץ שהופק, משתמשים ב:
adb pull /data/misc/profman/package .prof.txt
איפוס מכשירי הבדיקה
אם בודקים את האפליקציה בכמה מכשירי בדיקה, כדאי לאפס את המכשיר בין
בדיקות. לדוגמה, כדי להסיר את נתוני המשתמשים ולאפס את סביבת הבדיקה. אפשר לאפס להגדרות המקוריות של מכשיר בדיקה עם Android מגרסה 10 (API ברמה 29) ואילך באמצעות פקודת המעטפת adb
testharness
, כמו בדוגמה הבאה:
adb shell cmd testharness enable
כשמשחזרים את המכשיר באמצעות testharness
, המכשיר מגבה באופן אוטומטי את מפתח ה-RSA
שמאפשר לנפות באגים בתחנת העבודה הנוכחית במיקום קבוע. כלומר, אחרי
המכשיר, תחנת העבודה יכולה להמשיך לנפות באגים ולהנפיק פקודות adb
למכשיר, בלי לרשום מפתח חדש באופן ידני.
בנוסף, כדי שיהיה קל ומאובטח יותר להמשיך לבדוק את האפליקציה, השימוש ב-testharness
לשחזור מכשיר משנה גם את הגדרות המכשיר הבאות:
- המכשיר מגדיר הגדרות מערכת מסוימות כך שאשפי ההגדרה הראשונית של המכשיר לא יופיעו. כלומר, המכשיר נכנס למצב שממנו תוכלו להתקין במהירות את האפליקציה, לנפות באגים ולבדוק אותה.
- הגדרות:
- השבתת מסך הנעילה.
- משבית התרעות על מקרי חירום.
- משבית את הסנכרון האוטומטי של חשבונות.
- ההגדרה משביתה עדכוני מערכת אוטומטיים.
- אחר:
- ההגדרה משביתה אפליקציות אבטחה שהותקנו מראש.
אם האפליקציה צריכה לזהות ולהתאים את הגדרות ברירת המחדל של הפקודה testharness
, משתמשים בפקודה
ActivityManager.isRunningInUserTestHarness()
.
sqlite
sqlite3
מפעיל את תוכנת שורת הפקודה sqlite
לבדיקת מסדי נתונים של SQLite.
הוא כולל פקודות כמו .dump
כדי להדפיס את התוכן של טבלה, ו-.schema
כדי להדפיס את ההצהרה SQL CREATE
לטבלה קיימת.
תוכלו להריץ פקודות SQLite משורת הפקודה, כפי שמוצג כאן:
$ adb -s emulator-5554 shell $ sqlite3 /data/data/com.example.app/databases/rssitems.db SQLite version 3.3.12 Enter ".help" for instructions
הערה: אפשר לגשת למסד נתונים של SQLite רק אם יש גישה לרמה הבסיסית (root) למערכת הקבצים, למשל באמצעות אמולטור.
מידע נוסף זמין במסמכי התיעוד של שורת הפקודה sqlite3
.
קצוות עורפיים של adb ב-USB
שרת ה-adb יכול לקיים אינטראקציה עם מקבץ ה-USB דרך שני קצוות עורפיים. אפשר להשתמש בקצה העורפי המקורי של מערכת ההפעלה (Windows, Linux או macOS), או להשתמש בקצה העורפי libusb
.
חלק מהתכונות, כמו attach
, detach
וזיהוי מהירות USB, זמינות רק כשמשתמשים בקצה העורפי libusb
.
אתם יכולים לבחור קצה עורפי באמצעות משתנה הסביבה ADB_LIBUSB
.
אם לא מגדירים את הפרמטר, adb משתמש בקצה העורפי שמוגדר כברירת מחדל. התנהגות ברירת המחדל משתנה בין מערכת ההפעלה. החל מ-ADB v34, נעשה שימוש בקצה העורפי liubusb
כברירת מחדל בכל מערכות ההפעלה מלבד Windows, שבהן נעשה שימוש בקצה העורפי המקורי כברירת מחדל. אם המדיניות ADB_LIBUSB
מוגדרת, היא קובעת אם ייעשה שימוש בקצה העורפי המקורי או ב-libusb
. מידע נוסף על משתני הסביבה של adb זמין בדף הידני של adb.
קצוות עורפיים של adb mDNS
ADB יכול להשתמש בפרוטוקול Multicast DNS כדי לחבר באופן אוטומטי את השרת והמכשירים. שרת ה-ADB נשלח עם שני קצוות עורפיים, Bonjour (mdnsresponseer של Apple) ו-Openscreen.
לקצה העורפי של Bonjour נדרש דימון כדי לפעול במחשב המארח.
ב-macOS, הדימון המובנה של Apple פועל תמיד, אבל ב-Windows וב-Linux המשתמש צריך לוודא שהדימון (daemon) של mdnsd
פועל.
אם הפקודה adb mdns check
מחזירה שגיאה, סביר להניח ש-ADB משתמש בקצה העורפי של Bonjour, אבל לא פועל דימון (daemon) של Bonjour.
הקצה העורפי של Openscreen אינו זקוק לדימון (daemon) כדי לפעול במחשב. התמיכה בקצה העורפי Openscreen ב-macOS מתחילה ב-ADB v35. החל מ-ADB v34 יש תמיכה ב-Windows וב-Linux.
כברירת מחדל, ADB משתמש בקצה העורפי של Bonjour. אפשר לשנות את ההתנהגות הזו באמצעות משתנה הסביבה ADB_MDNS_OPENSCREEN
(מוגדר ל-1
או 0
). פרטים נוספים זמינים בדף הידני של ADB.
adb Burst Mode (מתחיל ב-ADB 36.0.0)
'מצב רצף' הוא תכונה ניסיונית שמאפשרת ל-ADB להמשיך לשלוח חבילות למכשיר עוד לפני שהמכשיר הגיב לחבילה הקודמת. כך אפשר להגביר משמעותית את התפוקה של ADB כשמעבירים קבצים גדולים, וגם מקצר את זמן האחזור במהלך ניפוי הבאגים.
כברירת מחדל, 'מצב רצף' מושבת. כדי להפעיל את התכונה, מבצעים אחת מהפעולות הבאות:
- מגדירים את משתנה הסביבה
ADB_DELAYED_ACK
ל-1
. - ב-Android Studio, עבור להגדרות ניפוי הבאגים ב-File (או Android Studio ב-macOS) > הגדרות > Build, Execution, Deployment > Debugger והגדר את ADB Server Burst Mode לEnabled.