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.