Creare microbenchmark senza Gradle

Questa pagina descrive la configurazione di un sistema di build non Gradle quando utilizzi la libreria Microbenchmark.

Anche se la libreria Microbenchmark include un plug-in Gradle per integrarsi direttamente con il plug-in Android Gradle, puoi utilizzarlo anche in altri sistemi di build, ad esempio Bazel o Buck.

Strumentazione

Utilizza AndroidBenchmarkRunner o una sottoclasse come runner della strumentazione specificandolo nel blocco di strumentazione del manifest di test:

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

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

Per ottenere misurazioni accurate, non è necessario eseguire il debug dei benchmark. Se non imposti correttamente il flag di cui è possibile eseguire il debug, la libreria genera un errore anziché segnalare risultati non validi. Potrebbe essere necessario attivare/disattivare questa impostazione durante le esecuzioni locali per utilizzarla con i profiler di Android Studio, che richiedono debuggable=true.

Puoi creare Microbenchmark in modo che vengano eseguiti in due modi: all'interno di un APK con autostrumentazione o con un APK di test che utilizza un altro APK.

APK con strumentazione automatica

Con un APK con autostrumentazione (come output da Gradle per una directory androidTest da com.android.library), devi disattivare l'opzione di cui è possibile eseguire il debug nel file manifest Android del singolo APK:

<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 dell'app strumentato dall'APK di test

Se la tua build genera due APK (un APK dell'app e un APK di test, come output di Gradle per la directory androidTest del pacchetto com.android.app), devi impostare l'APK dell'app su debuggable=false. Il flag di cui è possibile eseguire il debug dell'APK di test viene ignorato dal sistema operativo Android.

<!-- 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 e Gradle non supportano il microbenchmarking di un APK di moduli dell'app. Ciò è dovuto alla complessità del supporto di una directory di test aggiuntiva che dipende da una variante dell'APK non sottoposta a debug, ottimizzata o minimizzata, ma senza minimizzare le chiamate dai benchmark al codice dell'app.

Minimizzazione e ottimizzazione

Ti consigliamo di utilizzare la minimizzazione e l'ottimizzazione per i tuoi benchmark al fine di ottenere prestazioni vicine al rilascio. Per esempio di codice, consulta il Progetto di esempio di benchmark.

Copertura del codice

Consigliamo di eseguire benchmark con copertura disattivata e senza libreria o gestione DEX tramite strumenti come JaCoCo.

Per questo motivo, ti consigliamo di isolare i benchmark come set di origine da altri test di strumentazione e di crearli separatamente con dipendenze di release. In questo modo evitiamo di dover creare test più di una volta, sia con che senza copertura.

Le varianti di debug delle librerie da cui dipende il benchmark, in particolare quelle create localmente, potrebbero essere create con la copertura abilitata.

Esegui i test

Puoi eseguire i test dalla riga di comando e specificare le classi da utilizzare, come mostrato nell'esempio seguente:

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

Per configurare la libreria Microbenchmark in fase di runtime senza Gradle, consulta Argomenti di strumentazione di Microbenchmark.