Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mem-build benchmark tanpa Gradle

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

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

AndroidBenchmarkRunner

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

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

Dapat di-debug

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 pengujian lokal untuk digunakan dengan profiler Android Studio, yang memerlukan debuggable=true.

Benchmark 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.app), 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 benchmark 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 diminifikasi, dioptimalkan, atau tidak dapat di-debug, tetapi tanpa minifikasi yang mengganggu panggilan dari benchmark ke kode aplikasi.

Minifikasi dan pengoptimalan

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

Cakupan

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

Karena alasan ini, sebaiknya gunakan benchmark yang berupa rangkaian sumber yang sepenuhnya terisolasi dari pengujian instrumentasi lainnya, dan di-build secara terpisah dengan dependensi rilis. Kami juga mendapati bahwa hal ini menghindari keharusan mem-build pengujian lebih dari sekali: dengan dan tanpa cakupan.

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

Menjalankan

Untuk mengonfigurasi library Benchmark pada waktu proses tanpa Gradle, lihat Menjalankan benchmark dalam Continuous Integration.