Android12でGoogle Play開発者サービスが暴走した
経緯
Motorola g52j 5Gを使っており、2025/05/01あたりからスマホが異常に発熱するようになりました。
とりあえず、ネットで調べた限りGoogle Play開発者サービスが悪さをしているみたいなのでキャッシュの削除と強制停止をしてみることにしました。
しかし、発熱が収まらずいつもの3倍の速度 (めちゃくちゃ嬉しくない赤い彗星) で電池が減るのでどうにかしたいところ、adbを使えば原因を探れるのではと思い実践してみました。
事前に試したこと
- Google Play開発者サービスのキャッシュを削除・強制停止
- Google Play Storeのキャッシュ及びアップデートの削除
キャッシュの削除方法
設定 > アプリ > すべてのアプリ > Google Play 開発者サービス > ストレージとキャッシュ > キャッシュを消去
これでも発熱が収まらない場合は次に進んでヨシ
adbのインストール
検索すれば色々出てくるのでそれに従ってインストール
Linux使いはここを見れば大体のトラブルは解決できます
ログを取る
adb shell dumpsys
やadb logcat
でログを取って原因を探る
adb logcat
正確には adb shell logcat
らしい。Linuxディストロで例えるとjournalctl的なやつ?
adb logcat -s [文字列]:[エラーレベル]
エラーレベルについて
Androidのエラーラベルは以下の通り。表の下に行くほど重要度が下がる。
エラーレベル | 意味 | 要約 |
---|---|---|
S | Silent | 最も高い重要度。たぶん何も表示されない |
F | Fatal | クラッシュなどこれ以上実行できなくなった場合に出てくる |
E | Error | 致命的なエラーだけどギリギリ動作はしている |
W | Warning | 動作しているけど直したほうが良い |
I | Info | 正常 |
D | Debug | デバッグメッセージ |
V | Verbose | 有象無象 |
Errorレベルのメッセージを見たいので
# -v colorでカラー表示
adb logcat -s *:E -v color
adb shell top
UNIXのtopと同じやつ
# -n 1 1回実行
# -m 10 上位10プロセスを表示
adb shell top -n 1 -m 10
dumpsys cpuinfo
CPUの使用率を確認できる
adb shell dumpsys cpuinfo
ログを見やすくするコツ
上記のコマンドだとただ単に標準出力されるだけなので
adb shell dumpsys cpuinfo > cpuinfo.log
でテキストファイルに書き起こすことをオススメする。
.log
は.txt
などでもOK
ログを見てみる
...
15% 29115/com.google.android.gms.persistent: 9.9% user + 5.4% kernel / faults: 68251 minor 1323 major
...
-
com.google.android.gms.persistent
が滅茶苦茶CPUを食っていることが分かった。- 上記がGoogle Play開発者サービスらしく、強制停止をかけられずにCPUを食っている。
dumpsys meminfo
こちらはメモリの使用状況が見れる
adb shell dumpsys meminfo
ここでもGoogle Play開発者サービスがメモリを多く占有していた
dumpsys batterystats
原因はなんとなく分かったが、com.google.android.gms.persistent
を呼び出しているアプリを特定する。
というのも、こういったAndroidの不具合はサードパーティのアプリによって引き起こされている可能性も考えられるからである。
まずはスマホのバッテリー使用履歴をリセットする
# バッテリーの使用履歴を削除
adb shell dumpsys batterystats --reset
スマートフォンの 設定>電池>バッテリー使用量
の中が消えていたら成功。
電池の消耗具合を記録させるため、一度100%充電した後、電源を抜いて数時間放置する。
adb shell dumpsys batterystats > batterystatus.log
かなり行数が多いのでファイルに書き起こす。
出来上がったログファイルを見てみる。
BATTERY HISTORYセクション
...
Battery History (2% used, 116KB used of 4096KB, 125 strings using 18KB):
0 (14) RESET:TIME: 2025-05-03-07-40-35
...
ここを見るとシステムがどれだけwake_lockを保持していたかや、CPUを使っていたか等がわかる
Estimated power use (mAh) セクション
アプリやコンポーネントごとの消費電力を確認する。
Estimated power use (mAh):
Capacity: 5000, Computed drain: 750, actual drain: 700-750
Global
screen: 1.92 apps: 1.92 duration: 48s 141ms
cpu: 454 apps: 454
system_services: 40.7 apps: 40.7
mobile_radio: 34.7 apps: 0
sensors: 0.0911 apps: 0.0911
gnss: 0.445 apps: 0.445
wifi: 2.57 apps: 2.57
wakelock: 10.7 apps: 10.7 duration: 2h 8m 50s 251ms
idle: 19.4 apps: 0 duration: 2h 9m 38s 392ms
UID u0a179: 203 ( cpu=185 system_services=10.2 sensors=0.0517 gnss=0.422 wifi=0.105 wakelock=7.18 )
UID 0: 39.0 ( cpu=39.0 wifi=0.00280 wakelock=0.0000626 )
UID u0a582: 25.6 ( cpu=22.7 system_services=2.80 wifi=0.122 wakelock=0.00120 )
UID u0a340: 21.8 ( cpu=20.9 system_services=0.0106 wifi=0.00141 wakelock=0.874 )
...
UID u0a202: 0.0104 ( cpu=0.00839 system_services=0.00198 )
...
Uidからアプリケーションの名前を取得したい
adb shell cmd package list packages --uid 10202
全体消費量(Computed drain
)が750 mAhに対してu0a202
が104 mAhも食っているではないか。
じゃあu0a202
は一体何なのか...
なんとfacebookでした。ほとんど使用していないのになぜ...
まとめ
- facebookを削除し、スマートフォンを再起動させると発熱が収まりました。
-
こんなの素人が分かる訳ないのでAndroidは玄人向きOSですね。
余談
途中でDigital Wellbeingを無効化すれば直るのでは?と思いadbから操作してみた
adb shell pm disable-user --user 0 com.google.android.apps.wellbeing
また、GMSのデータが破損している可能性も考えたのでリセットをかけてみた
adb shell pm clear com.google.android.gms
Discussion
自分もmoto g52j 5GなのですがPlay開発者( GMS)をアップデートしてから発熱とバッテリーの減りがすぐ切れてしまうようになってしまいました。
ありがとうございました。