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

Bu sayfada, Microbenchmark kitaplığını kullanırken Gradle olmayan bir derleme sisteminin yapılandırılması açıklanmaktadır.

Microbenchmark kitaplığı, doğrudan Android Gradle eklentisiyle entegrasyon sağlamak için bir Gradle eklentisi gönderse de bu eklentiyi Bazel veya Buck gibi diğer derleme sistemlerinde de kullanabilirsiniz.

Enstrümantasyon

AndroidBenchmarkRunner veya bir alt sınıfı test manifestinin araç bloğunda belirterek araç çalıştırıcınız olarak kullanın:

<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ırmalarda hata ayıklaması mümkün olmamalıdır. Hata ayıklaması yapılabilir işaretini doğru şekilde ayarlamazsanız kitaplık, geçersiz sonuçları bildirmek yerine hata bildirir. Android Studio profil oluşturucularıyla kullanmak üzere yerel çalıştırmalar sırasında bu ayarı değiştirmeniz gerekebilir. Bunun için debuggable=true gerekir.

Mikro karşılaştırmaları iki şekilde çalışacak şekilde oluşturabilirsiniz: kendi kendine enstrümantasyon sağlayan bir APK içinde veya bir test APK'sı başka bir APK ile.

Otomatik enstrümantasyon APK'ları

Kendi kendine enstrümantasyon sağlayan bir APK ile (com.android.library içindeki bir androidTest dizini için Gradle tarafından çıkış olarak) tek APK'nın Android manifestindeki hata ayıklama işlemini devre dışı bırakmanız gerekir:

<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 kullanılan uygulama APK'sı

Derlemeniz iki APK (bir uygulama APK'sı ve bir test APK'sı) oluşturuyorsa uygulama APK'sını debuggable=false olarak ayarlamanız gerekir.androidTestcom.android.app Test APK'sının hata ayıklaması yapılabilir işaretini 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'larının mikro karşılaştırmasını desteklemez. Bunun nedeni, APK'nın hata ayıklanamayan, optimize edilmiş veya küçültülmüş bir varyantına bağlı olan, ancak karşılaştırmalardan gelen çağrıları uygulama koduna bölmeden küçültmeden ek bir test dizinini desteklemenin karmaşıklığıdır.

Küçültme ve optimizasyon

Kullanıma sunulmak üzere olan bir performans elde etmek için karşılaştırmalarınızda küçültme ve optimizasyon kullanmanızı öneririz. Örnek kod için Karşılaştırma örneği projesine bakın.

Kod kapsamı

Karşılaştırmaları, kapsam devre dışı olarak ve JaCoCo gibi araçlar tarafından kitaplık veya DEX yönetimi olmaksızın çalıştırmanızı öneririz.

Bu nedenle, karşılaştırmaları diğer araç testlerinden bir kaynak kümesi olarak ayırmanızı ve yayın bağımlılıklarıyla ayrı ayrı oluşturmanızı öneririz. Böylece kapsam olan ve olmayan birden fazla test oluşturmak zorunda kalmazsınız.

Özellikle yerel olarak oluşturulan kitaplıkların dayalı olduğu kitaplıkların hata ayıklama varyantlarında kapsam etkinleştirilerek oluşturulabilir.

Testlerinizi çalıştırın

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

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

Çalışma zamanında Microbenchmark kitaplığını Gradle olmadan yapılandırmak için Microbenchmark enstrümantasyonu bağımsız değişkenleri bölümüne bakın.