Gradle Olmadan Mikro Karşılaştırmalar Oluşturma

Bu sayfada, Microbenchmark kitaplığı.

Microbenchmark kitaplığı, entegrasyona olanak sağlayan bir Gradle eklentisi kullanarak diğer derleme sistemlerinde de kullanabilirsiniz: Bazel veya Buck.

Enstrümantasyon

Enstrümantal koşucu olarak AndroidBenchmarkRunner veya bir alt sınıfı kullanın test manifestindeki araç blokunda belirterek bunu belirtmeniz gerekir:

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

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

Doğru ölçümler elde etmek için karşılaştırmaların hata ayıklaması mümkün olmamalıdır. Şu durumda: hata ayıklama bayrağı doğru ayarlanmazsa kitaplık hata verir daha fazla sonuç sunabilir. Şu süre içinde bu ayarı açmanız gerekebilir: Android Studio profil araçlarıyla kullanım için yerel çalıştırmalar, debuggable=true

Mikrobenchmark'ları, kendi kendini enstrümantasyon yöntemini kullanarak iki şekilde oluşturabilirsiniz. APK veya başka bir APK'nın enstrümantasyonunu kullanan bir test APK'sı içeren uygulamalar.

Kendi kendine enstrümantasyon kullanan APK'lar

Kendi kendini enstrümantasyonlu APK ile (Gradle tarafından bir androidTest için çıktı olarak) com.android.library dizininden hata ayıklanabilir tek bir APK'nın Android manifesti:

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

    <instrumentation
        android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
        android:targetPackage="com.example.library.test"/>

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

Test APK'sı tarafından sağlanan uygulama APK'sı

Derlemeniz, Gradle çıkışı olarak iki APK (uygulama APK'sı ve test APK'sı) oluşturuyorsa com.android.app paketindeki androidTest dizini. Uygulama APK'sını debuggable=false. Test APK'sının hata ayıklama işareti Android OS tarafından yoksayılır.

<!-- 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 ve Gradle, uygulama modülü APK'sının mikro karşılaştırmasını desteklemez. Bunun nedeni, her bir test dizinini destekleyen ek bir test dizininin APK'nın hata ayıklanamayan, optimize edilmiş veya küçültülmüş bir varyantına bağlıdır ancak Bu sayede, karşılaştırmalardan gelen aramaları uygulama koduna bölerek sadeleştirmeden yararlanabilirsiniz.

Derleme

Testleri çalıştırmadan önce şu komutu kullanın:

adb shell cmd package compile -f -m speed com.example.benchmark

Küçültme ve optimizasyon

Karşılaştırmalarınızda küçültme ve optimizasyondan yararlanmanızı öneririz. performans elde edebilirsiniz. Örneğin kod için Karşılaştırma örnek proje.

Kod kapsamı

Kapsamı devre dışı bırakılmış ve herhangi bir kitaplık olmadan karşılaştırmalar çalıştırmanızı öneririz veya JaCoCo gibi araçlar tarafından DEX tarafından yönetilir.

Bu nedenle, karşılaştırmaları diğerlerinden bir kaynak kümesi olarak enstrümantasyon testlerini yayınladık ve bunları yayın bağımlılıklarıyla ayrı ayrı derledik. Bu Böylece hem kapsam dahilinde hem de kapsam olmadan testleri birden fazla kez derlemek zorunda kalmazsınız.

Karşılaştırmanızın temel aldığı kitaplıkların, özellikle de şu kitaplıklarda hata ayıklayın yerel olarak oluşturulmuş, kapsam etkinleştirilmiş şekilde oluşturulabilir.

Testlerinizi yapın

Testlerinizi komut satırından çalıştırabilir ve çalıştırılacak sınıfları belirtebilirsiniz aşağıdaki örnekte gösterildiği gibi:

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

Microbenchmark kitaplığını, çalışma zamanında Gradle olmadan yapılandırmak için bkz. Mikrobenchmark araç bağımsız değişkenleri.