Microbenchmark 라이브러리는 Gradle 플러그인을 제공하여 Android Gradle 플러그인과 직접 통합할 수 있지만 Bazel 또는 Buck과 같은 다른 빌드 시스템에서도 Microbenchmark를 사용할 수 있습니다.
이 항목에서는 Microbenchmark 라이브러리를 사용할 때 Gradle이 아닌 빌드 시스템 구성을 설명합니다.
계측
테스트 매니페스트의 계측 블록에서 지정하여 AndroidBenchmarkRunner
또는 서브클래스를 계측 실행기로 사용합니다.
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" /> ... </manifest>
정확하게 측정하려면 벤치마크는 디버그 가능하지 않아야 합니다. 디버그 가능한 플래그가 올바르게 설정되지 않으면 라이브러리에서 잘못된 결과가 보고되지 않고 오류가 발생합니다. 이 설정은 debuggable=true
가 필요한 Android 스튜디오 프로파일러와 함께 사용하기 위해 로컬 실행 중에 전환해야 할 수 있습니다.
Microbenchmark는 자체 계측 APK 내에서 또는 하나의 테스트 APK에서 다른 APK를 계측하는 두 가지 방식으로 실행되도록 빌드할 수 있습니다.
자체 계측 APK
com.android.library
의 androidTest
디렉터리에 관한 Gradle의 출력과 같이 간단한 자체 계측 APK를 사용하면 단일 APK의 Android 매니페스트는 디버그 가능한 기능이 사용 중지되어야 합니다.
<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
빌드에서 com.android.app
의 androidTest
디렉터리에 관한 Gradle의 출력으로 두 개의 APK 즉, 앱 APK 및 테스트 APK를 출력하는 경우 앱 APK를 debuggable=false
로 설정해야 합니다. 테스트 APK의 디버그 가능 플래그는 Android OS에서 무시됩니다.
<!-- test manifest --> <manifest package="com.example.android.app.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" android:targetPackage="com.example.android.app"/> <!-- debuggable here ignored by OS! --> </manifest> <!-- app being tested --> <manifest package="com.example.android.app" ...> <application android:debuggable="false"/> </manifest>
앱 모듈 APK의 마이크로벤치마킹은 Android 스튜디오 또는 Gradle에서 지원되지 않습니다. 디버그 불가능하거나 최적화 또는 축소된 APK 변형에 의존하지만 벤치마크에서 앱 코드로의 호출을 방해하는 압축이 없는 추가 테스트 디렉터리를 지원하는 복잡성 때문입니다.
압축 및 최적화
출시 성능을 높이려면 벤치마크에 압축 및 최적화를 사용하는 것이 좋습니다. 코드 예는 벤치마크 샘플 프로젝트를 참고하세요.
코드 적용 범위
벤치마크는 JaCoCo와 같은 도구로 실행한 라이브러리 또는 DEX 맹글링 없이 적용 범위를 사용 중지한 상태로 실행해야 합니다.
이러한 이유로 벤치마크는 다른 계측 테스트와 완전히 격리된 소스 집합으로 출시 종속 항목과 별도로 빌드하는 것이 좋습니다. 이렇게 하면 적용 범위 유무와 관계없이 테스트를 두 번 이상 빌드하지 않아도 됩니다.
벤치마크가 의존하는 라이브러리의 디버그 변형, 특히 로컬에서 빌드된 라이브러리의 디버그 변형은 적용 범위가 사용 설정된 상태로 빌드될 수 있습니다.
실행
명령줄에서 테스트를 실행하고 실행에 사용할 클래스를 지정할 수 있습니다.
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
Gradle 없이 Microbenchmark 라이브러리를 런타임에 구성하려면 계측 인수를 참고하세요.
맞춤 콘텐츠
- 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
- Microbenchmark 작성
- 기준 프로필 만들기 {:#creating-profile-rules}