Tworzenie mikroporównań bez Gradle

Na tej stronie opisujemy, jak skonfigurować system kompilacji inny niż Gradle przy użyciu biblioteki Microbenchmark.

Biblioteka Microbenchmark zawiera wtyczkę Gradle umożliwiającą bezpośrednią integrację z wtyczką Androida Gradle, ale możesz jej też używać w innych systemach kompilacji, takich jak Bazel czy Buck.

Narzędzia

Użyj klasy AndroidBenchmarkRunner lub podklasy jako mechanizmu uruchamiania narzędzi, określając ją w bloku narzędzi w pliku manifestu testu:

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

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

Aby można było uzyskać dokładne pomiary, testy porównawcze nie mogą być debugowane. Jeśli nie ustawisz prawidłowo flagi możliwości debugowania, biblioteka zgłosi błąd, a nie nieprawidłowe wyniki. Może być konieczne przełączanie tego ustawienia podczas uruchamiania lokalnych na potrzeby programatorów profilujących Android Studio, które wymagają debuggable=true.

Testy mikroporównawcze możesz tworzyć na 2 sposoby: w samodzielnym pliku APK lub za pomocą jednego testowego pakietu APK obsługującego inny plik APK.

Własnoinstruujące pliki APK

W przypadku samodzielnego pliku APK – wygenerowanego przez Gradle dla katalogu androidTest z com.android.library – musisz wyłączyć możliwy do debugowania w pliku manifestu pojedynczego pliku APK na Androida:

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

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

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

Plik APK aplikacji dostosowany przez testowy plik APK

Jeśli kompilacja generuje 2 pliki APK – plik APK aplikacji i testowy plik APK jako dane wyjściowe przez Gradle dla katalogu androidTest z pakietu com.android.app – musisz ustawić pakiet APK aplikacji na debuggable=false. Flaga możliwości debugowania testowego pakietu APK jest ignorowana przez system operacyjny 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 i Gradle nie obsługują analizy porównawczej pakietów APK modułu aplikacji. Wynika to ze złożoności obsługi dodatkowego katalogu testowania, który zależy od wariantu pliku APK, którego nie można debugować, optymalizowanego lub zminifikowanego pliku APK, ale bez minifikacji, która nie rozdziela wywołań z testów porównawczych do kodu aplikacji.

Minimalizacja i optymalizacja

Zalecamy stosowanie w testach porównawczych minifikacji i optymalizacji, aby uzyskać wydajność zbliżoną do zbliżającej się wersji produkcyjnej. Przykładowy kod znajdziesz w sekcji Analiza porównawcza przykładowego projektu.

Pokrycie kodu

Zalecamy przeprowadzanie testów porównawczych przy wyłączonym zasięgu i bez użycia biblioteki lub zarządzania plikami DEX za pomocą takich narzędzi jak JaCoCo.

Z tego względu zalecamy, aby wyodrębnić testy porównawcze jako zbiór źródłowy od innych testów instrumentów i utworzyć je oddzielnie za pomocą zależności wersji. Dzięki temu unikniesz konieczności tworzenia testów więcej niż raz – zarówno z uwzględnieniem pokrycia, jak i bez niego.

Debugowanie wariantów bibliotek, od których zależy test porównawczy, zwłaszcza tych utworzonych lokalnie, może być tworzone z włączonym zasięgiem.

Przeprowadzanie testów

Testy możesz uruchomić z poziomu wiersza poleceń i określić klasy, które mają zostać uruchomione, jak pokazano w poniższym przykładzie:

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

Aby skonfigurować bibliotekę mikroporównawczych w środowisku wykonawczym bez Gradle, zapoznaj się z informacjami o argumentach instrumentacji mikroporównawczej.