Android

Android Jetpack Macrobenchmarkのマルチモジュール構成時の設定方法

Android Jetpackにアプリのベンチマークを計測するMacrobenchmarkというライブラリがあります。
今までもアプリの処理速度を計測するための方法はいくつかあったと思うのですが、アプリが起動したあとの例えば画面の表示速度などは計測できましたが、アプリの起動速度などの計測は比較的難儀だったみたいです。

Android JetpackのMacrobenchmarkは起動時のベンチマークを取得することができます。
しかしながらアプリモジュールだけでは完結せずにベンチマーク用に追加のモジュールが必要になるなど、マルチモジュールではない環境では導入に慎重になる場合もあったのですが、Android Studio Bumbluebeeで比較的簡単に導入できるようになりました。
引き続きベンチマーク用のモジュールは必要ですがIDE上から作成できるので導入コストは低くなっております。

導入方法

基本的にはこちらの導入手順に従って作業を行えば大丈夫です。
Macrobenchmark を作成する
自分の場合少しだけ違う手順にした箇所があります。

profileableについて

AndroidManifest.xmlにprofileableを追加しなければならないのですが、アプリのAndroidManifest.xmlには記載したくなかったので、benchmark専用のAndroidManifest.xmlを追加しました。
アプリのbuild.gradleのbuildTypesにbenchmarkを追加しているので、専用のAndoroidManifest.xmlのパスはapp/src/benchmark/AndroidManifest.xmlです。
内容は以下のような感じです。


```
<!--?xml version="1.0" encoding="utf-8"?-->

<!-- packageはアプリのパッケージを指定してください -->





```

マルチモジュールの場合

すでにマルチモジュールのアプリを構成している場合、Benchmarkのテストを実行しても以下のようなエラーが発生して実行できません。


No matching variant of project :{modulename} was found. The consumer was configured to find a runtime of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'benchmark', attribute 'com.android.build.api.attributes.ProductFlavor:default' with value '{valiantname}', attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.1.2' but:

これは上記のページに記載があるのですが、Benchmarkのモジュールにあるbuild.gradleに以下の記載をする必要があります。


android {
  buildTypes {
    initWith buildTypes.release
    signingConfig signingConfigs.debug

    matchingFallbacks = ['release'] // この行を追加する
  }
}

ビルドバリラントを設定してある場合

これは、しっかりと確認したわけではないのと公式で正確な情報を見つけられていないので、この環境でだけ動くワークアラウンドかもしれません。
ビルドバリラントが設定してある場合、もうひと手間必要なようです。
アプリのbuild.gradleに以下のようなビルドタイプとプロダクトフレーバーが指定されている場合の想定です。


android {
  buildTypes {
    debug { // 略 }
    release { // 略 }
  }
  flavorDimensions "default"
  productFlavors {
    local { // 略 }
    prod { // 略 }
  }
}

デフォルトのビルドバリラントがlocalDebugになる場合、この状態でBenchmarkのテストを実行してもビルトバリラントがないみたいなエラーが発生して実行できません。
この場合ですが、Benchmarkのモジュールにあるbuild.gradleに以下の記載をする必要があります。


android {
  flavorDimensions "default"
  productFlavors {
    local {
    }
  }
}

結果

これでアプリの起動時間の計測ができるようになりました。
アプリの起動時間については、QAやテスターからなんかアプリの起動が遅くなったような気がするんですけど???みたいな問い合わせがあっても、心のなかでは「それ、あなたの感想ですよね?」って言いたくなる気持ちを抑えながら、「調査します!!!」と返答することも多いのですが、ベンチマークがあるともう少し定量的にサポートできるので、変化をより認識しやすくなります。
今回の作業だけだと、導入することが目的になってしまうので、継続的に計測できるように環境を整えることも忘れずに実施する必要があります。

-Android

© 2022 ビー鉄のブログ Powered by AFFINGER5