Batterystats と Battery Historian を使用してバッテリー使用量をプロファイリングする

このチュートリアルでは、Batterystats ツールと Battery Historian スクリプトの基本的なセットアップ方法と作業の流れについて説明します。Battery Historian を使用して電池消費パターンを調べる方法については、Battery Historian を使用して消費電力を分析するをご覧ください。

Batterystats は Android フレームワークに含まれるツールで、デバイスの電池データを収集します。adb を使用して、収集した電池データを開発マシンにダンプし、レポートを作成できます。このレポートは、Battery Historian を使用して分析できます。Battery Historian は、Batterystats が生成したレポートを、ブラウザで表示可能な HTML 表示形式に変換します。

主なメリット:

  • 各プロセスが、電池のどこからどのように電流を引き出しているのかを表示できます。
  • アプリ内で、保留したり削除したりすることで電池寿命を延ばすことができるタスクを発見できます。

Battery Historian をインストールする

Battery Historian をインストールする方法としては、Docker を使用するのが最も簡単です。ソースからのビルドなど、他のインストール方法については、プロジェクトの GitHub ページの Read Me をご覧ください。Docker を使用してインストールする手順は次のとおりです。

  1. Docker ウェブサイトの手順に沿って、Docker Community Edition をインストールします。

  2. Docker が正しくインストールされているか確認するには、コマンドラインを開いて次のコマンドを入力します。

    docker run hello-world
    

    Docker が正しくインストールされている場合、次のような出力が表示されます。

    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    78445dd45222: Pull complete
    Digest:
    sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
    1. The Docker client contacted the Docker daemon.
    2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
    4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal
    
  3. 次のコマンドを使用して Battery Historian イメージを実行します。

    docker run -p port_number:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999
    

    Battery Historian は、port_number で指定されたポートを使用します。

  4. ブラウザで Battery Historian に移動して、実行中になっているか確認します。 アドレスはオペレーティング システムによって異なります。

    Linux、Mac の場合

    Battery Historian は http://localhost:port_number で利用できます。

    Windows の場合

    Docker を起動すると、使用しているマシンの IP アドレスが表示されます。たとえば IP アドレスが 123.456.78.90 の場合、Battery Historian は http://123.456.78.90:port_number で利用できます。
    このページでは、電池統計情報のアップロードと表示が可能です。

    Battery Historian のスタートページ
    図 1. Battery Historian のスタートページ

Batterystats を使用してデータを収集する

Batterystats を使用してデバイスからデータを収集し、Battery Historian でそのデータを開く手順は次のとおりです。

  1. モバイル デバイスをパソコンに接続します。

  2. ターミナル ウィンドウから、実行中の adb サーバーをシャットダウンします。

    adb kill-server
    
  3. adb を再起動して、接続済みのデバイスを確認します。

    adb devices
    

    次の出力例のように、デバイスがリスト表示されます。

    adb デバイスの出力
    図 2. 接続済みのデバイスが 1 台であることを示す adb devices の出力。

    デバイスが表示されない場合は、スマートフォンが接続されていて USB デバッグが有効になっているか確認し、adb を強制終了して再起動します。

  4. 電池データ収集をリセットします。

    adb shell dumpsys batterystats --reset
    

    デバイスは常に、電池統計情報と各種デバッグ情報をバックグラウンドで収集しています。リセットすると、古い電池収集データが消去されます。リセットしなかった場合、出力が膨大になります。

  5. デバイスの電池だけから電流を引き出すようにするため、デバイスをパソコンから切断します。

  6. アプリを操作して、データを必要とするアクションを実行します。たとえば、Wi-Fi から切断して、データをクラウドに送信します。

  7. スマートフォンを再接続します。

  8. スマートフォンが認識されているか確認します。

    adb devices
    
  9. すべての電池データをダンプします。しばらく時間がかかります。

    adb shell dumpsys batterystats > [path/]batterystats.txt
    

    オプションの batterystats.txt 引数を使用して指定したディレクトリに、ファイルが作成されます。パスを指定しなかった場合、ファイルはホーム ディレクトリに作成されます。

  10. 未加工データからレポートを作成します。

    Android 7.0 以降を搭載しているデバイスの場合:

    adb bugreport [path/]bugreport.zip

    Android 6.0 以前を搭載しているデバイスの場合:

    adb bugreport [path/]bugreport.txt

    バグレポートの作成が完了するまでに数分かかることがあります。プロセスが完了するまで、デバイスを切断したり、プロセスをキャンセルしたりしないでください。

    上記の batterystats.txt と同様、オプションの path 引数を使用して指定したディレクトリに、ファイルが作成されます。パスを指定しなかった場合、ホーム ディレクトリに作成されます。

    まだ実行していない場合は、次のコマンドを使用して Battery Historian を実行します。

    docker --run -p port_number:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999
    
  11. Battery Historian でデータを表示するには、ブラウザ内で Battery Historian を開きます(Mac や Linux の場合、Battery Historian は http://localhost:port_number で稼働します。Windows の場合、Battery Historian は http://your_IP_address:port_number で稼働します)。

  12. [Browse] をクリックして、上記で作成したバグレポート ファイルを選択します。

  13. [送信] をクリックします。Battery Historian が、電池統計情報データから作成したグラフを開きます。

Battery Historian グラフを使用してデータを表示する

Battery Historian グラフは、電力関連イベントを経時的にグラフ化します。

システム コンポーネントがアクティブで電池から電流を引き出している場合、各行に色付きのバーセグメントが表示されます。コンポーネントが消費した電池量は、グラフには表示されません。グラフに表示されるのは、「アプリがアクティブだった」ということだけです。グラフはカテゴリ別に分類され、各カテゴリのバーの経時的変化がグラフの X 軸に沿って表示されます。

Battery Historian グラフの例
図 3. Battery Historian グラフの例

  1. プルダウン リストから、指標を追加します。
  2. 情報アイコンにカーソルを合わせると、グラフで使用されている色の意味など、各指標の詳細情報が表示されます。
  3. バーにカーソルを合わせると、タイムライン上の特定のポイントにおける指標や電池統計情報に関する詳細情報が表示されます。

追加の電池統計情報出力

Battery Historian グラフの下部にある統計情報セクションで、batterystats.txt ファイルに関する追加情報を表示できます。

Battery Historian の統計情報セクション
図 4. Battery Historian の統計情報セクション

[System Stats] タブ(1)には、セルの信号レベルや画面の明るさなど、システム全体の統計情報が表示されます。この情報により、デバイスの全体的な状況を把握できます。この情報は、外部イベントがテストに影響しないか確認する際に特に便利です。

[App Stats] タブ(2)には、個々のアプリに関する情報が表示されます。左側の [App Selection] パネルにある [Sort apps by] プルダウン リスト(3)を使用すると、アプリのリストを並べ替えられます。下部にあるアプリ プルダウン リスト(4)を使用して特定のアプリを選択すると、その統計情報を表示できます。