На этой странице описывается настройка системы сборки, отличной от Gradle, при использовании библиотеки Microbenchmark.
Хотя библиотека Microbenchmark включает плагин Gradle для непосредственной интеграции с плагином Android Gradle, вы также можете использовать его в других системах сборки, таких как Bazel или Buck .
Инструментарий
Используйте AndroidBenchmarkRunner
или его подкласс в качестве средства запуска инструментов, указав его в блоке инструментов манифеста теста:
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" /> ... </manifest>
Чтобы получить точные измерения, тесты не должны быть отлаживаемыми . Если вы неправильно установите флаг отладки, библиотека выдаст ошибку, а не сообщит о неверных результатах. Возможно, вам придется переключить этот параметр во время локальных запусков для использования с профилировщиками Android Studio, для которых требуется debuggable=true
.
Вы можете создавать микробенчмарки для запуска двумя способами: в составе APK с самоинструментом или с помощью одного тестового APK, инструментирующего другой APK.
Самоинструментируемые APK-файлы
При использовании APK с самоинструментированием (вывод Gradle для каталога androidTest
из com.android.library
) вы должны отключить отладку в манифесте Android отдельного 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-файл приложения, оснащенный тестовым APK
Если ваша сборка выводит два APK — APK приложения и тестовый APK, как выходные данные Gradle для каталога androidTest
из пакета com.android.app
— вы должны установить для APK приложения значение debuggable=false
. Флаг отладки тестового APK игнорируется ОС 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 и Gradle не поддерживают микробенчмаркинг APK-модуля приложения. Это связано со сложностью поддержки дополнительного каталога тестирования, который зависит от неотлаживаемого, оптимизированного или минимизированного варианта APK, но без минификации, разбивающей вызовы из тестов в код приложения.
Сборник
Мы рекомендуем скомпилировать APK-файл микробенчмарка перед запуском тестов, используя следующую команду:
adb shell cmd package compile -f -m speed com.example.benchmark
Минификация и оптимизация
Мы рекомендуем использовать минификацию и оптимизацию для ваших тестов, чтобы получить производительность, близкую к релизной. Пример кода см. в примере проекта Benchmark .
Покрытие кода
Мы рекомендуем запускать тесты с отключенным покрытием и без использования каких-либо библиотек или DEX с помощью таких инструментов, как JaCoCo.
По этой причине мы рекомендуем вам изолировать тесты в качестве исходного набора от других инструментальных тестов и собирать их отдельно с зависимостями от выпуска. Это позволяет избежать необходимости создавать тесты более одного раза, как с покрытием, так и без него.
Отладочные варианты библиотек, от которых зависит ваш тест, особенно те, которые созданы локально, могут быть созданы с включенным покрытием.
Запустите свои тесты
Вы можете запускать тесты из командной строки и указывать классы для запуска, как показано в следующем примере:
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
Чтобы настроить библиотеку Microbenchmark во время выполнения без Gradle, см. раздел Аргументы инструментария Microbenchmark .
{% дословно %}Рекомендуется для вас
- Примечание. Текст ссылки отображается, когда JavaScript отключен.
- Напишите микротест
- Создание базовых профилей {:#creating-profile-rules}