ساختن Microbenchmarks بدون Gradle

این صفحه پیکربندی سیستم ساخت غیرGradle را هنگام استفاده از کتابخانه Microbenchmark شرح می‌دهد.

اگرچه کتابخانه Microbenchmark یک افزایه Gradle را برای ادغام مستقیم با افزایه Android Gradle ارائه می‌دهد، می‌توانید از آن در سیستم‌های ساخت دیگر مانند Bazel یا Buck نیز استفاده کنید.

سازآرایی

از AndroidBenchmarkRunner یا یک زیرکلاس به‌عنوان اجراکننده ابزار دقیق خود استفاده کنید با مشخص کردن آن در بلوک ابزار دقیق مانیفست آزمایشی:

<manifest
    package="com.example.library.test" ...>

    <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" />
    ...
</manifest>

برای دریافت اندازه‌گیری‌های دقیق، محک‌ها نباید قابل‌اشکال‌زدایی باشند. اگر پرچم قابل‌اشکال‌زدایی را به‌درستی تنظیم نکنید، کتابخانه به‌جای گزارش نتایج نامعتبر، خطا نشان می‌دهد. ممکن است لازم باشد این تنظیم را درطول اجراهای محلی برای استفاده با نمایه‌های «استودیو Android» که به debuggable=true نیاز دارند، تغییر دهید.

می‌توانید Microbenchmarks را برای اجرا به دو روش بسازید: در یک APK خودابزار، یا با یک APK آزمایشی که APK دیگری را ابزار می‌کند.

فایل‌های APK خودابزارساز

با APK خودابزار—به‌عنوان خروجی Gradle برای دایرکتوری androidTest از com.android.library—باید debuggable را در مانیفست 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 آزمایشی ابزاربندی شده است

اگر ساخت شما دو 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

کوچک‌سازی و بهینه‌سازی

توصیه می‌کنیم برای محک‌هایتان از کوچک‌سازی و بهینه‌سازی استفاده کنید تا عملکردی نزدیک به نسخه نهایی دریافت کنید. برای کد نمونه، پروژه نمونه Benchmark را ببینید.

پوشش کد

توصیه می‌کنیم محک‌ها را با پوشش غیرفعال و بدون هیچ‌گونه کتابخانه یا DEX mangling توسط ابزارهایی مانند JaCoCo اجرا کنید.

به همین دلیل، توصیه می‌کنیم محک‌ها را به‌عنوان مجموعه منبع از سایر آزمایش‌های ابزار دقیق جدا کنید و آن‌ها را به‌طور جداگانه با وابستگی‌های نسخه بسازید. این کار از ساختن آزمایش‌ها بیش‌از یک بار، هم با پوشش و هم بدون پوشش، جلوگیری می‌کند.

انواع اشکال‌زدایی کتابخانه‌هایی که محک شما به آن‌ها وابسته است، به‌ویژه آن‌هایی که به‌صورت محلی ساخته شده‌اند، ممکن است با فعال بودن پوشش ساخته شوند.

اجرای آزمایش‌ها

می‌توانید آزمایش‌هایتان را از خط فرمان اجرا کنید و کلاس‌هایی را که باید با آن‌ها اجرا شود مشخص کنید، همان‌طور که در مثال زیر نشان داده شده است:

adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner

برای پیکربندی کتابخانه Microbenchmark در زمان اجرا بدون Gradle، آرگومان‌های ابزار دقیق Microbenchmark را ببینید.