This page describes configuring a non-Gradle build system when using the Microbenchmark library.
Хотя библиотека Microbenchmark поставляется с плагином Gradle для прямой интеграции с плагином Android Gradle, вы также можете использовать ее в других системах сборки, таких как Bazel или Buck.
На базе Instrumentation
Используйте 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. ОС Android игнорирует флаг отладки тестового APK-файла.
<!-- 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}