Mem-build Microbenchmark tanpa Gradle

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Meskipun library Microbenchmark mengirimkan plugin Gradle untuk langsung diintegrasikan dengan Plugin Android Gradle, Anda juga dapat menggunakannya dalam sistem build lain, seperti Bazel atau Buck.

Topik ini menjelaskan cara mengonfigurasi sistem build selain Gradle saat menggunakan library Microbenchmark.

Instrumentasi

Gunakan AndroidBenchmarkRunner atau subclass sebagai runner instrumentasi dengan menentukannya dalam blok instrumentasi manifes pengujian:

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

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

Untuk mendapatkan pengukuran yang akurat, benchmark tidak boleh dapat di-debug. Jika flag yang dapat di-debug tidak ditetapkan dengan benar, library akan menampilkan error, bukan melaporkan hasil yang tidak valid. Perhatikan bahwa setelan ini mungkin perlu dialihkan selama berjalan secara lokal untuk digunakan dengan profiler Android Studio, yang memerlukan debuggable=true.

Microbenchmark dapat di-build untuk berjalan dengan dua cara: dalam APK yang melakukan instrumentasi sendiri, atau dengan satu APK pengujian yang menginstrumentasikan APK lain.

APK yang melakukan instrumentasi sendiri

Dengan APK sederhana yang melakukan instrumentasi sendiri (sebagai output Gradle untuk direktori androidTest milik com.android.library), manifes Android APK tunggal harus menonaktifkan flag yang dapat di-debug:

<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 aplikasi yang diinstrumentasi oleh APK pengujian

Jika build Anda menghasilkan dua APK, yaitu APK aplikasi dan APK pengujian (sebagai output Gradle untuk direktori androidTest milik com.android.app), APK aplikasi harus ditetapkan ke debuggable=false. Flag yang dapat di-debug dalam APK pengujian diabaikan oleh Android OS.

<!-- test manifest -->
<manifest
    package="com.example.android.app.test" ...>

    <instrumentation
        android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
        android:targetPackage="com.example.android.app"/>
    <!-- debuggable here ignored by OS! -->
</manifest>

<!-- app being tested -->
<manifest
    package="com.example.android.app" ...>

    <application android:debuggable="false"/>
</manifest>

Perhatikan bahwa pembuatan microbenchmark APK modul aplikasi tidak didukung oleh Android Studio atau Gradle. Hal ini disebabkan oleh kompleksitas dukungan direktori pengujian tambahan yang bergantung pada varian APK yang tidak dapat di-debug, dioptimalkan, atau diminifikasi, tetapi tanpa minifikasi yang mengganggu panggilan dari benchmark ke kode aplikasi.

Minifikasi dan pengoptimalan

Sebaiknya gunakan minifikasi dan pengoptimalan untuk benchmark agar mendapatkan performa yang siap untuk dirilis. Untuk kode contoh, lihat Contoh project benchmark.

Cakupan Kode

Benchmark harus dijalankan dengan menonaktifkan cakupan, tanpa kerusakan library atau DEX yang disebabkan oleh alat seperti JaCoCo.

Oleh karena itu, sebaiknya gunakan benchmark yang berupa set sumber yang sepenuhnya terisolasi dari uji instrumentasi lainnya, dan di-build secara terpisah dengan dependensi rilis. Kami juga mengetahui bahwa hal ini akan menghindari keharusan mem-build pengujian lebih dari sekali: dengan dan tanpa cakupan.

Perhatikan juga bahwa varian debug library yang diandalkan benchmark, terutama yang di-build secara lokal, dapat di-build dengan mengaktifkan cakupan.

Menjalankan

Anda dapat menjalankan pengujian dari command line dan menentukan class yang akan dijalankan.

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

Untuk mengonfigurasi library Microbenchmark pada runtime tanpa Gradle, lihat Argumen Instrumentasi.