battery-historian使ってみた

BatteryHistorianとは2014年のGoogleI/Oで発表されたAndroidアプリにおける電力使用量を詳しく調査するための開発者ツールの一種です.

前置き等はこちらの記事が参考になるかとおもいます.

techlife.cookpad.com

この記事ではpythonスクリプトという説明がなされていますが,あるとき見るとやり方が変わっていたので,それについてだらだらっと書きます.


battery-historianの公式リポジトリはこちら github.com

基本的にはこのリポジトリのREADMEを参照すれば良さそう.

またBatteryHistorian2.0からはpythonではなく,Golang製になっていました. Golangそのものの設定はググるといいと思う.GOPATHだけちゃんと設定していればいい.

ちなみに自分はGOPATH=~/localにしてる.そうするとそれ以外のソースコードとかも統一して管理できる.

Protocol BufferのGoライブラリを入れる

$ go get -u github.com/golang/protobuf/proto
$ go get -u github.com/golang/protobuf/protoc-gen-go

The compiler plugin, protoc-gen-go, will be installed in $GOBIN, which must be in your $PATH for the protocol compiler, protoc, to find it.

protoc-gen-goというバイナリを使用するらしいので,PATH通しておけとのこと.$GOBIN設定していればその場所に,してなければデフォルトで$GOPATH/binに入るらしい.

改めてREADME読んで$GOBINなるものを初めて知った.デフォルトは$GOPATH/binらしいから普通の人は気にしなくていいと思う.

Protocol BufferはGoogleが作ってるシリアライズフォーマット.研究室のコードで使われてた形跡とかあったけどあんまり知らない.

Battery-Historianダウンロード

# battery-historianダウンロード
$ go get -u github.com/google/battery-historian
# battery-historianのディレクトリに移動
$ cd $GOPATH/src/github.com/google/battery-historian

# セットアップスクリプトを起動
$ bash setup.sh
# Battery-historianサーバ起動
$ go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

あとはgitから落としてきた上で,セットアップスクリプト動かすだけ.

見て分かる通り今回のバージョンからGolangによるサーバが立つかんじらしい.

ここまでできたらlocalhost:9999にアクセス. f:id:programmerMOT:20150711123805p:plain

統計データ抽出

あとは開発者モードをオンにしたAndroid端末を用意する.これはググって.

その後adbを利用して

$ adb bugreport > bugreport.txt

として出てくるbugreport.txtをbattery-historianにアップロードすると解析してもらえる.

bugreport出力は時間がそこそこかかるので注意.

あとデフォルトで取れるデータで記録されないものとかあるらしいので,イカのコマンドで有効にする*1

$ adb shell dumpsys batterystats --enable full-wake-history

bugreportのリセットはイカのコマンドで.

$ adb shell dumpsys batterystats --reset

データの可視化

無事ファイルをセットできると,こんな画面が見える.

それぞれのパラメータの意味はぶっちゃけ全部分かってない...

f:id:programmerMOT:20150711135951p:plain


参考文献

5分でわかるBatteryHistorianによるAndroidアプリの解析方法 - クックパッド開発者ブログ

google/battery-historian · GitHub

Battery Historian (unofficial) - Google Docs

*1:ぶっちゃけこの操作の意味分かってない.また調べないと...