2016年12月21日19:07
Android 6.0の Xperia Z5でバッテリードレインが発生!犯人はまさかのあのアプリ
こんにちは、たかしーです。
先日、自分のXperiaをAndroid 6.0 にアップグレードした、という記事を書きましたが、その後からバッテリードレインの症状が発生してしまいました。
ただの思い過ごしとも思ったのですが、明らかに電池の減りが早くなっていますし、本体も5.0の時と比べて明らかに熱くなることが多くなっていました。
バッテリードレインは、インストール済みのアプリや、システム上のプロセスが何らかの原因でCPUに高い負荷をかけ続けてしまうことがよくある原因なのですが、Androidの場合、ほかのOSと違ってどのプロセスが電池を消費しているのかがなかなかわかりづらい仕組みになっています。
設定にある

アプリごとの電池消費がわかる機能もあるのですが、実はこれ、すべてのプロセスが表示されているわけではありません。
今回も、最終的に分かった原因がこの一覧には出てきていないものでした。
早い話が、Android SDKをインストールして、adb shellしてしまえばいいだけなのですが、手元にAndroid SDKのインストールされたPCがなかったため、とりあえずAndroid標準の開発者ツールで調べてみることにしました。
やり方としては、
Androidの設定アプリから

"開発者向けオプション"をタップ
(開発者向けオプションが設定画面に出ていない方はこちらのような手順で有効化できます。)

"CPUの使用状況を表示" をオンにします。

そうすると、右上にCPUの使用状況、およびロードアベレージと、CPUに負荷をかけているアプリの一覧が表示されます。
この表示には、アプリ以外にもシステムの処理の負荷も一部表示されるので、"電池の使用状況"よりかはバッテリードレインの犯人が見つかりやすくなります。
...が、なんと、こちらにも、それらしいアプリは上がってこず...
こうなってしまうと本体上だけではお手上げになってしまいます((
なくなく、PCにadb shellをインストールします(
Android Studioを、以下のURLから入手します。
https://developer.android.com/studio/index.html#downloads
Windows mac OS Linux番がそれぞれ用意されているので、PCの機種やOSにかかわらず利用できます。
ただし、インストール後の容量が最低でも数GBとかなり大きいので、10GB以上の空き容量のあるマシンでないと厳しいです...
インストールしたら、Android Studioを起動します。

こんな画面が出てくるので、右下の"Configure"をクリック

出てきたメニューから"SDK Manager"をクリックします。

こんなウインドウが出てくるので、左下のリンクをクリック。

こんな画面が出てきます。
赤枠の"Android SDK Pratform-tools"にチェックが入っていることを確認して、右下の"Install ? Package" ボタンをクリックします。
ライセンス確認が出てきたら、Agreeのような選択肢があるので、クリックしてインストールします。
これでadbがインストールされたので、実際に使えるように設定していきます。
(※ここからはWindowsの設定方法です。)
なお、ここからは設定を間違えるとWindowsがおかしくなりますので十分気を付けてください((
まず、Windowsキーを押しながらRキーを押します。
”ファイル名を指定して実行”
というウインドウが表示されるので、
sysdm.cpl
と入力し、エンターを押します。

詳細設定タブを選択し、環境変数をクリック

上の画面が出てきたら、ユーザー変数の"Path"をクリックし、"編集"をクリックします。

新規をクリックし、入力欄に以下のように入力します。
%USERPROFILE%\AppData\Local\Android\sdk\platform-tools
あとはすべてOKをクリックして閉じます。
もし以下のような表示が出てくる場合は、

ほかの値を消さないように注意しながら、変数値の行末に、先ほどの値を入力します。
この際、値の頭と末尾に必ず ; が一つ入るようにします。
お疲れ様です。これでようやくadb shellが使えるようになりました(;´∀`)
見ての通り、ここまでの流れがかなりめんどくさい(なお、Androidアプリの開発をやる際もこの設定が必要になりますw)ので極力やりたくなかったのですが、原因が特定できないのなら仕方ない...(;´∀`)
スマートフォンの動作が激重状態になっているところを見計らって、USBケーブルでPCと接続し、コマンドプロンプトを開いて以下のコマンドを入力します。
adb shell
すると、接続したスマホのシェル(CUI環境)にアクセスすることができます。感覚としてはSSHのような感じです。
この状態で以下のコマンドを入力します。
top
すると、コマンドプロンプト上でなにやら表示がブァッと繰り返し出力されるので、2~3回出力されたところで Ctrl + C キーを押して止めます。
上の方にスクロールしていき、以下のような表示を見つけます。

User47% . System 32% ... と表示されているとことが、この実行結果の先頭部分です。
その下にずらずらと一覧で並んでいるのが、今スマホの中で動作しているプロセスの一覧です。
この一覧はCPUに負荷を与えているプロセス順に並んでいます。したがって、一番上に来ているプロセスが、今まさにスマホに負荷を与えている張本人というわけです。
上の例の場合、一行目の PID 1706 Name system_server のプロセスはAndroid OS本体のプロセスと思われます。これはシステムそのものでどうしようもないので無視します。

プロセス名を見ただけでお分かりの方も多いかと思いますが、Antutuというアプリのバックグラウンドプロセスが、今回のバッテリードレインの原因となっていました。
Antutuはスマートフォンの性能を測るベンチマークアプリで、スマホの機種レビューなどでも非常によく使用されています。
通常は、アプリを起動して操作をしないと動作しないアプリだったと思ったのですが、なぜか起動していない状態でもバックグラウンドで動き続けていたようです。
暫定的に、Antutuをアンインストールし、2、3日様子を見ていますが、CPU使用率は低くなり、本体が過熱することもなくなったようです。
これで原因はAntutuであったことはほぼ確実となったわけですが、ネット上で調べた限りでは特に情報がなく、Antutu自体に問題があったかどうかは不明です。
もしかすると、OSのアップグレード処理時に、Antutuアプリに何らかの不具合が発生してしまったのかもしれません。
Android 6.0のバッテリードレインの不具合として、Wi-Fiの位置情報サービスやGoogleアカウントのバックアップ・同期の不具合の可能性が指摘されていますが、それ以外に、通常のアプリがバッテリードレインの原因になってしまうこともあるようです。
なかなか改善せずにお困りの方は(手順がちょっと大変ですが)一度調べてみるといいかもしれません。
先日、自分のXperiaをAndroid 6.0 にアップグレードした、という記事を書きましたが、その後からバッテリードレインの症状が発生してしまいました。
ただの思い過ごしとも思ったのですが、明らかに電池の減りが早くなっていますし、本体も5.0の時と比べて明らかに熱くなることが多くなっていました。
バッテリードレインは、インストール済みのアプリや、システム上のプロセスが何らかの原因でCPUに高い負荷をかけ続けてしまうことがよくある原因なのですが、Androidの場合、ほかのOSと違ってどのプロセスが電池を消費しているのかがなかなかわかりづらい仕組みになっています。
設定にある

アプリごとの電池消費がわかる機能もあるのですが、実はこれ、すべてのプロセスが表示されているわけではありません。
今回も、最終的に分かった原因がこの一覧には出てきていないものでした。
早い話が、Android SDKをインストールして、adb shellしてしまえばいいだけなのですが、手元にAndroid SDKのインストールされたPCがなかったため、とりあえずAndroid標準の開発者ツールで調べてみることにしました。
やり方としては、
Androidの設定アプリから

"開発者向けオプション"をタップ
(開発者向けオプションが設定画面に出ていない方はこちらのような手順で有効化できます。)

"CPUの使用状況を表示" をオンにします。

そうすると、右上にCPUの使用状況、およびロードアベレージと、CPUに負荷をかけているアプリの一覧が表示されます。
この表示には、アプリ以外にもシステムの処理の負荷も一部表示されるので、"電池の使用状況"よりかはバッテリードレインの犯人が見つかりやすくなります。
...が、なんと、こちらにも、それらしいアプリは上がってこず...
こうなってしまうと本体上だけではお手上げになってしまいます((
なくなく、PCにadb shellをインストールします(
Android Studioを、以下のURLから入手します。
https://developer.android.com/studio/index.html#downloads
Windows mac OS Linux番がそれぞれ用意されているので、PCの機種やOSにかかわらず利用できます。
ただし、インストール後の容量が最低でも数GBとかなり大きいので、10GB以上の空き容量のあるマシンでないと厳しいです...
インストールしたら、Android Studioを起動します。

こんな画面が出てくるので、右下の"Configure"をクリック

出てきたメニューから"SDK Manager"をクリックします。

こんなウインドウが出てくるので、左下のリンクをクリック。

こんな画面が出てきます。
赤枠の"Android SDK Pratform-tools"にチェックが入っていることを確認して、右下の"Install ? Package" ボタンをクリックします。
ライセンス確認が出てきたら、Agreeのような選択肢があるので、クリックしてインストールします。
これでadbがインストールされたので、実際に使えるように設定していきます。
(※ここからはWindowsの設定方法です。)
なお、ここからは設定を間違えるとWindowsがおかしくなりますので十分気を付けてください((
まず、Windowsキーを押しながらRキーを押します。
”ファイル名を指定して実行”
というウインドウが表示されるので、
sysdm.cpl
と入力し、エンターを押します。

詳細設定タブを選択し、環境変数をクリック

上の画面が出てきたら、ユーザー変数の"Path"をクリックし、"編集"をクリックします。

新規をクリックし、入力欄に以下のように入力します。
%USERPROFILE%\AppData\Local\Android\sdk\platform-tools
あとはすべてOKをクリックして閉じます。
もし以下のような表示が出てくる場合は、

ほかの値を消さないように注意しながら、変数値の行末に、先ほどの値を入力します。
この際、値の頭と末尾に必ず ; が一つ入るようにします。
お疲れ様です。これでようやくadb shellが使えるようになりました(;´∀`)
見ての通り、ここまでの流れがかなりめんどくさい(なお、Androidアプリの開発をやる際もこの設定が必要になりますw)ので極力やりたくなかったのですが、原因が特定できないのなら仕方ない...(;´∀`)
スマートフォンの動作が激重状態になっているところを見計らって、USBケーブルでPCと接続し、コマンドプロンプトを開いて以下のコマンドを入力します。
adb shell
すると、接続したスマホのシェル(CUI環境)にアクセスすることができます。感覚としてはSSHのような感じです。
この状態で以下のコマンドを入力します。
top
すると、コマンドプロンプト上でなにやら表示がブァッと繰り返し出力されるので、2~3回出力されたところで Ctrl + C キーを押して止めます。
上の方にスクロールしていき、以下のような表示を見つけます。

User47% . System 32% ... と表示されているとことが、この実行結果の先頭部分です。
その下にずらずらと一覧で並んでいるのが、今スマホの中で動作しているプロセスの一覧です。
この一覧はCPUに負荷を与えているプロセス順に並んでいます。したがって、一番上に来ているプロセスが、今まさにスマホに負荷を与えている張本人というわけです。
上の例の場合、一行目の PID 1706 Name system_server のプロセスはAndroid OS本体のプロセスと思われます。これはシステムそのものでどうしようもないので無視します。
問題は2番目のPID 1227のプロセス。 CPUを20%も消費しています。
瞬間的に負荷が上がっている可能性も考えられるので、topコマンドの結果を複数回出力させてそれぞれの結果を見比べていましたが、常にこのプロセスが上位に張り付いていました。
そう、このプロセスこそが今回の"真犯人"です。
プロセス名を見ただけでお分かりの方も多いかと思いますが、Antutuというアプリのバックグラウンドプロセスが、今回のバッテリードレインの原因となっていました。
Antutuはスマートフォンの性能を測るベンチマークアプリで、スマホの機種レビューなどでも非常によく使用されています。
通常は、アプリを起動して操作をしないと動作しないアプリだったと思ったのですが、なぜか起動していない状態でもバックグラウンドで動き続けていたようです。
暫定的に、Antutuをアンインストールし、2、3日様子を見ていますが、CPU使用率は低くなり、本体が過熱することもなくなったようです。
これで原因はAntutuであったことはほぼ確実となったわけですが、ネット上で調べた限りでは特に情報がなく、Antutu自体に問題があったかどうかは不明です。
もしかすると、OSのアップグレード処理時に、Antutuアプリに何らかの不具合が発生してしまったのかもしれません。
Android 6.0のバッテリードレインの不具合として、Wi-Fiの位置情報サービスやGoogleアカウントのバックアップ・同期の不具合の可能性が指摘されていますが、それ以外に、通常のアプリがバッテリードレインの原因になってしまうこともあるようです。
なかなか改善せずにお困りの方は(手順がちょっと大変ですが)一度調べてみるといいかもしれません。