Android 11 デベロッパー プレビュー 2 が公開されました。ぜひお試しのうえ、フィードバックをお寄せください

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

このチュートリアルでは、Batterystats ツールと Battery Historian スクリプトの基本的な使用方法と作業の流れについて説明します。

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

主なメリット:

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

注: Batterystats と Battery Historian を使用するには、Android 5.0 以降を搭載したモバイル デバイスを使用し、USB デバッグを有効にする必要があります。

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 で指定されたポートを使用します。

    注: Windows マシンを使用している場合は、BIOS で仮想化を有効にする必要があります。仮想化を有効にする方法については、マザーボードのドキュメントをご覧ください。Android Emulator を実行できる場合、仮想化はすでに有効になっています。

  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
        

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

    図 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
        

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

  10. 未加工データからレポートを作成します。
    Android 7.0 以降を搭載しているデバイスの場合:
        adb bugreport > [path/]bugreport.zip
        
    Android 6.0 以下を搭載しているデバイスの場合:
        adb bugreport > [path/]bugreport.txt
        

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

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

  11. まだ実行していない場合は、次のコマンドを使用して Battery Historian を実行します。
        docker --run -p port_number:9999 gcr.io/android-battery-historian:2.1 --port 9999
        
  12. Battery Historian でデータを表示するには、ブラウザ内で Battery Historian を開きます(Mac や Linux の場合、Battery Historian は http://localhost:port_number で稼働します。Windows の場合、Battery Historian は http://your_IP_address:port_number で稼働します)。
  13. [Browse] をクリックして、上記で作成したバグレポート ファイルを選択します。
  14. [Submit] をクリックします。Battery Historian が、バッテリー統計情報データから作成したグラフを開きます。

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

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

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

図 3: Battery Historian グラフの例

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

追加のバッテリー統計情報出力

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

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

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

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

バッテリー性能の詳細については、バッテリー寿命を最適化するをご覧ください。