モバイルファースト室の@tomorrowkey です。
Google I/O 2014で発表されたProject VoltaのBatteryHistorianについて調べました。
目次
- 注意
- Battery Historianってなに?
- BatteryHistorianを使おう
- 開発中のBatteryHistorianを使おう
- 各項目の解説
- まとめ
- 参考
注意
この記事は2014年8月12日 現在 正式リリースされていない開発中のツールを解説しています。 正式リリース時にはツールの使い方や解析結果の見かたなどが変わる場合がありますので、ご注意ください。
Battery Historianってなに?
Google I/O 2014でProject Voltaが発表されました。 Project VoltaはAndroidアプリの電力消費の解析をするためのツールを作ったり、アプリの電力消費を抑えることなどをミッションとしたプロジェクトです。 詳しい文章はまだAPI Overviewくらいしかありません。
API Overview | Android Developers http://developer.android.com/preview/api-overview.html
Battery Historianはアプリの電力消費を解析するために開発されたツールで、pythonで書かれたスクリプトです。 以下の項目を時系列のグラフで知ることができます。
- フォアグラウンドにいるアプリ
- 通話
- モバイルネットワーク
- Wifi
- Bluetooth
- バッテリーステータス(バッテリーレベルなど)
- バックグラウンド同期
- スクリーンオン
- 他
BatteryHistorianを使おう
API Overviewによるとスクリプトは<android-sdk>/tools/historian.par
に入っているらしいですが
そこにはまだスクリプトは入っていません。
Google I/Oで発表された多くのツールやSDKはまだプレビュー版なので、まだSDKには入っていないようです。
開発中のBatteryHistorianを使おう
スクリプトは正式には公開されていませんが、GitHubに開発中のものがありました。
google/battery-historian https://github.com/google/battery-historian
コミットメッセージを見るに、開発中のものを定期的にGitHubに同期しているみたいです。 まだ正式リリースされているものではありませんが、試しに使ってみましょう。
まずはスクリプトを使うために手元にスクリプトをダウンロードします。
$ git clone git@github.com:google/battery-historian.git
より正確なwake lockの時間を取得するために以下のコマンドを実行します。 このコマンドはKitKat以降のAndroidで使えます。
$ adb shell dumpsys batterystats --enable full-wake-history
その後にリセットのコマンドを実行します。
$ adb shell dumpsys batterystats --reset
以上で、計測するための準備が整ったので、ここから計測したい操作をします。 アプリを開発しているのであればアプリを起動したり、ホームボタンを押してバックグラウンドにアプリを移動させたりしてみましょう。 USBを抜いても問題ないので、必要とあらばUSBケーブルを抜いて操作してもいいでしょう。
計測したい操作が終わったら、以下のコマンドを実行します。
$ adb bugreport > bugreport.txt
このコマンドの実行にはすこし時間がかかります。待ちましょう。 バグレポートの中にバッテリー情報や端末の使用状況が含まれています。 実行が終わったら、さきほどダウンロードしたスクリプトを使ってhtmlファイルに変換します。
$ ./historian.py bugreport.txt > report.html
出力されたhtmlファイルをブラウザで開くと、キーノートで見たような画面が表示されました。
各項目の解説
公式のドキュメントで詳しい説明はまだないので、見て分かる部分だけ見てみましょう。
battery_level
バッテリ残量を表します。 このグラフを見ると計測開始後1分23秒後に99%に変化したと読み取れます。
top
フォアグラウンドにいるアプリを表します。 アプリはapplication_idで表現されます。 起動している時間が短くてapplication_idが表示しきれていないアプリもありますが、カーソルを合わせると表示されます。
status
電源との接続状態を表します。
値の意味はBatteryManager のBATTERY_STATUS
で始まる定数を参照してください。
health
バッテリーの状態を表します。
値の意味はBatteryManager のBATTERY_HEALTH
で始まる定数を参照してください。
plug
接続している電源の種類を表します。 計測直後には何も接続されていませんでしたが、3分10秒経過した時にUSBに接続したようです。
statusと見比べると、同じタイミングで電源との接続状態が変わっていることが分かります。
wifi_full_lock
WiFiの接続状態を維持するためにロックを取得している期間を表します。 細かいですが何度かロックされているようですね。
screen
スクリーンがオンになっている期間を表します。 topと見比べると、アプリが起動している期間はスクリーンがオンになっています。 電話をしている最中は近接センサーによってスクリーンがオフになっている様子も分かります。
plugged
電源に接続されている期間を表します。
plug
と比べるとたしかにUSBが接続された時から期間が始まっています。
data_conn
モバイルネットワークの種類の切り替わりを表します。 最初はLTEで接続されていましたが、途中で圏外になり、またLTEが復活したようです。
phone_in_call
電話中の期間を表します。
top
と比べるとdialer(電話アプリ)が同じ期間に立ち上がっていることが分かります。
wifi
Wifiがオンになっている期間を表します。 今回の計測期間中はずっとオンだったので、帯がずっと伸びています。
signal_strength
モバイルネットワークの電波の強さの変化を表します。
sync
同期しているサービスとその期間を表します。 Google Calendarの同期が行われたようです。
wake_lock
Wake Lockが取得されている期間を表します。 最初と最後の長い帯は、スクリーンがオンだったため、スクリーンによってWake Lockが取得されていました。 間の2つはバックグラウンドサービスによるWake Lockの取得でした。
まとめ
BatteryHistorianはまだ開発中のツールですが、現時点でも詳しいデータがとれてなかなかおもしろいですね。 電池残量でなんかしらのアクションをするアプリや、複雑な条件で起動するサービスなどがある場合にとても役に立ちそうです。 名前からだけでは推測できないので何を表しているのかまだ分からない項目がありますが、正式リリース時にはより詳しいドキュメントが公開されると思いますので、それを待ちましょう。
参考
- API Overview | Android Developers http://developer.android.com/preview/api-overview.html
- Google I/O 2014 - Introduction to Project Volta https://www.google.com/events/io/schedule/session/64bf2234-4bcb-e311-b297-00155d5066d7
- google/battery-historian https://github.com/google/battery-historian