בדף הזה נסביר הגדרה של מערכת build שאינה של Gradle כשמשתמשים ב- ספריית מיקרובנצ'מרק.
למרות שספריית Microbenchmark נשלחת פלאגין של Gradle לשילוב ישיר באמצעות הפלאגין Android Gradle, אפשר להשתמש בו גם במערכות פיתוח אחרות, כמו Bazel או באק.
אינסטרומנטציה
שימוש ב-AndroidBenchmarkRunner
או במחלקה משנית בתור הפעלת האינסטרומנטציה
על ידי ציון שלו בבלוק האינסטרומנטציה של מניפסט הבדיקה:
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" /> ... </manifest>
כדי לקבל מדידות מדויקות, אסור שהנקודות להשוואה יהיו ניתנות לניפוי באגים. אם
לא מגדירים בצורה נכונה את הסימון לצורך ניפוי באגים, הספרייה גורמת לשגיאה
מאשר דיווח על תוצאות לא תקינות. יכול להיות שתצטרכו להחליף את המצב של ההגדרה הזו במהלך
הפעלות מקומיות שמאפשרות שימוש בכלי ליצירת פרופילים של Android Studio, שמחייבות
debuggable=true
אפשר ליצור נקודות מיקרו-בנצ'מרקים להפעלה בשתי דרכים: במסגרת אינסטרומנטציה עצמית APK, או עם APK בדיקה אחד שמשלים APK אחר.
חבילות APK עם אינסטרומנטציה עצמית
באמצעות APK עם אינסטרומנטציה עצמית – כפלט של Gradle לandroidTest
מ-com.android.library
- יש להשבית את ניתנים לניפוי באגים
מניפסט Android של APK:
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" android:targetPackage="com.example.library.test"/> <application android:debuggable="false"/> </manifest>
חבילת APK של אפליקציה שבוצעה אליה אינסטרומנטציה על ידי APK לבדיקה
אם ה-build שלך יוצר שתי חבילות APK – APK של אפליקציה ו-APK לבדיקה, כפלט של Gradle עבור
הספרייה androidTest
מחבילת com.android.app
— עליך להגדיר את ה-APK של האפליקציה לערך
debuggable=false
. מערכת ההפעלה Android מתעלמת מהסימון של ה-APK לבדיקה שניתן לניפוי באגים.
<!-- Test manifest. --> <manifest package="com.example.android.app.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" android:targetPackage="com.example.android.app"/> <!-- This debuggable is ignored by the OS. --> </manifest> <!-- App being tested. --> <manifest package="com.example.android.app" ...> <application android:debuggable="false"/> </manifest>
ב-Android Studio וב-Gradle אין תמיכה במיקרו נתונים לצורכי השוואה ל-APK של מודול האפליקציה. הסיבה לכך היא המורכבות של תמיכה בספריית בדיקות נוספת תלוי בגרסה שלא ניתנת לניפוי באגים, עברה אופטימיזציה או מוקטנת של ה-APK, אבל בלי הקטנה של השיחות מנקודות ההשוואה לקוד האפליקציה.
קומפילציה
מומלץ להרכיב את ה-APK של המיקרו-בנצ'מרק לפני הרצת בדיקות, באמצעות הפקודה הבאה:
adb shell cmd package compile -f -m speed com.example.benchmark
מזעור ואופטימיזציה
מומלץ להשתמש בהקטנה ובאופטימיזציה כדי שהנקודות להשוואה ביצועים קרובים להפצה. לדוגמה, קוד, ראה השוואה לשוק פרויקט לדוגמה.
רמת הכיסוי של הקוד
מומלץ להפעיל נקודות השוואה כשהכיסוי מושבת וללא ספרייה או ניהול DEX באמצעות כלים כמו JaCoCo.
לכן, אנחנו ממליצים לבודד את נקודות ההשוואה כקבוצת מקור מחשבונות אחרים. בדיקות אינסטרומנטציה ולבנות אותם בנפרד עם יחסי תלות של גרסאות. הזה מונעת צורך בבניית בדיקות יותר מפעם אחת, גם עם וגם בלי כיסוי.
ניפוי באגים בווריאנטים של ספריות שהבנצ'מרק מבוסס עליהן, במיוחד שפותח באופן מקומי, עשוי להיבנות כשהכיסוי מופעל.
הרצת הבדיקות
אפשר להריץ את הבדיקות משורת הפקודה ולציין את המחלקות שרוצים להריץ כפי שמוצג בדוגמה הבאה:
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
כדי להגדיר את ספריית Microbenchmark בזמן ריצה בלי Gradle: ארגומנטים של אינסטרומנטציית מיקרובנצ'מרק.
מומלץ עבורך
- הערה: טקסט הקישור מוצג כאשר JavaScript מושבת
- כתיבת נתוני מיקרובנצ'מרק
- יצירת פרופילים בסיסיים {:#Creating-profile-כללים}