ベンチマーク ライブラリには Android Gradle プラグインと直接統合する Gradle プラグインが付属していますが、Bazel や Buck など、他のビルドシステムでもベンチマークを使用できます。
このトピックでは、ベンチマーク ライブラリを使用する場合の、Gradle 以外のビルドシステムの設定について説明します。
AndroidBenchmarkRunner
AndroidBenchmarkRunner
またはサブクラスを、テスト マニフェストのインストルメンテーション ブロックで指定することで、インストルメンテーション ランナーとして使用します。
<instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" ... />
デバッグ可能
正確な測定値を得るために、ベンチマークをデバッグ可能にしてはなりません。デバッグ可能フラグが正しく設定されていない場合、ライブラリは無効な結果をレポートするのではなく、エラーをスローします。場合によって、この設定は、debuggable=true
を必要とする Android Studio プロファイラで使用するために、ローカル実行中に切り替える必要があります。
ベンチマークを実行する方法には、自己インストルメント化 APK によるものと、別の APK をインストルメント化するテスト APK によるものの 2 つがあります。
自己インストルメント化 APK
シンプルな自己インストルメント化 APK(com.android.library
の androidTest
ディレクトリに対する Gradle の出力)では、単一の 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
ビルドがアプリ APK とテスト APK という 2 つの APK を出力する場合(com.android.app
の androidTest
ディレクトリに対する Gradle の出力)、アプリ APK を debuggable=false
に設定する必要があります。Android OS では、テスト APK のデバッグ可能フラグは無視されます。
<!-- 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 Studio または Gradle ではサポートされていません。これは、デバッグ可能でない最適化または縮小化された APK バリアントに依存する追加のテスト ディレクトリをサポートする複雑さに起因しますが、ベンチマークからの呼び出しをアプリコードに分割する縮小化はありません。
縮小化と最適化
リリースに近いパフォーマンスを得るには、ベンチマークの縮小化と最適化を使用することをおすすめします。コード例については、ベンチマーク サンプル プロジェクトをご覧ください。
カバレッジ
ベンチマークは、Jacoco などのツールでライブラリまたは DEX の修飾を行わずに、カバレッジを無効にして実行する必要があります。
このためベンチマークは、他のインストルメンテーション テストから完全に独立したソースセットとし、リリースの依存関係とは別にビルドすることをおすすめします。また、カバレッジの有無にかかわらず、テストを何度もビルドする必要はありません。
なお、ベンチマークが依存するライブラリ(特にローカルでビルドされたもの)のデバッグ バリアントは、カバレッジを有効にしてビルドできます。
実行
Gradle を使用せず実行時にベンチマーク ライブラリを設定する方法については、継続的インテグレーションでベンチマークを実行するをご覧ください。