このページでは、Microbenchmark ライブラリを使用する場合に Gradle 以外のビルドシステムを構成する方法について説明します。
Microbenchmark ライブラリには Android Gradle プラグインと直接統合される Gradle プラグインが付属していますが、Bazel や Buck などの他のビルドシステムでもこのライブラリを使用できます。
インストルメンテーション
テスト マニフェストのインストルメンテーション ブロックで AndroidBenchmarkRunner
またはサブクラスを指定することにより、それをインストルメンテーション ランナーとして使用します。
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" /> ... </manifest>
正確な測定値を得るには、ベンチマークがデバッグ可能であってはなりません。デバッグ可能フラグを正しく設定しないと、ライブラリは無効な結果をレポートするのではなく、エラーをスローします。debuggable=true
を必要とする Android Studio プロファイラで使用するには、ローカル実行時にこの設定の切り替えが必要になることがあります。
Microbenchmark を作成して実行する方法は 2 つあります。自己インストルメント化 APK 内で実行する方法と、1 つのテスト APK で別の APK をインストルメント化する方法です。
自己インストルメント化 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
ビルドが 2 つの APK(アプリ APK とテスト APK)を出力し、Gradle が com.android.app
パッケージの androidTest
ディレクトリに対して出力する場合は、アプリ 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"/> <!-- 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 の microbenchmarking をサポートしていません。これは、追加のテスト ディレクトリのサポートに際して、ベンチマークからの呼び出しをアプリコードに分割して圧縮化することなく、最適化または圧縮されたデバッグ可能でない APK バリアントに依存することになり、複雑であるためです。
コンパイル
テストを実行する前に、 次のコマンドを実行します。
adb shell cmd package compile -f -m speed com.example.benchmark
軽量化と最適化
リリース版に近いパフォーマンスを実現するには、ベンチマークに対して軽量化と最適化を使用することをおすすめします。コード例については、ベンチマーク サンプル プロジェクトをご覧ください。
コード カバレッジ
ベンチマークは、JaCoCo などのツールによるカバレッジを無効にしてライブラリや DEX のマングリングを使用することなく実行することをおすすめします。
このため、ベンチマークを他のインストルメンテーション テストからソースセットとして分離し、リリース依存関係とは別にビルドすることをおすすめします。これにより、カバレッジの有無にかかわらず、テストを複数回ビルドする必要がなくなります。
なお、ベンチマークが依存するライブラリのデバッグ バリアント(特にローカルでビルドされたもの)は、カバレッジを有効にしてビルドできます。
テストの実施
次の例に示すように、コマンドラインからテストを実行し、実行するクラスを指定できます。
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
Gradle を使用しないで実行時に Microbenchmark ライブラリを構成する場合は、Microbenchmark インストルメンテーション引数をご覧ください。
あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- Microbenchmark を作成する
- ベースライン プロファイルを作成する {:#creating-profile-rules}