🤖

Android12でGoogle Play開発者サービスが暴走した

に公開1

経緯

Motorola g52j 5Gを使っており、2025/05/01あたりからスマホが異常に発熱するようになりました。

とりあえず、ネットで調べた限りGoogle Play開発者サービスが悪さをしているみたいなのでキャッシュの削除と強制停止をしてみることにしました。

しかし、発熱が収まらずいつもの3倍の速度 (めちゃくちゃ嬉しくない赤い彗星) で電池が減るのでどうにかしたいところ、adbを使えば原因を探れるのではと思い実践してみました。

事前に試したこと

  • Google Play開発者サービスのキャッシュを削除・強制停止
  • Google Play Storeのキャッシュ及びアップデートの削除
キャッシュの削除方法
  • 設定 > アプリ > すべてのアプリ > Google Play 開発者サービス > ストレージとキャッシュ > キャッシュを消去

これでも発熱が収まらない場合は次に進んでヨシ

adbのインストール

検索すれば色々出てくるのでそれに従ってインストール

Linux使いはここを見れば大体のトラブルは解決できます
https://wiki.archlinux.jp/index.php/Android_Debug_Bridge

ログを取る

adb shell dumpsysadb logcatでログを取って原因を探る

adb logcat

正確には adb shell logcatらしい。Linuxディストロで例えるとjournalctl的なやつ?

sh
adb logcat -s [文字列]:[エラーレベル]
エラーレベルについて

Androidのエラーラベルは以下の通り。表の下に行くほど重要度が下がる。

エラーレベル 意味 要約
S Silent 最も高い重要度。たぶん何も表示されない
F Fatal クラッシュなどこれ以上実行できなくなった場合に出てくる
E Error 致命的なエラーだけどギリギリ動作はしている
W Warning 動作しているけど直したほうが良い
I Info 正常
D Debug デバッグメッセージ
V Verbose 有象無象

Errorレベルのメッセージを見たいので

sh
# -v colorでカラー表示
adb logcat -s *:E -v color

adb shell top

UNIXのtopと同じやつ

sh
# -n 1   1回実行
# -m 10  上位10プロセスを表示
adb shell top -n 1 -m 10

dumpsys cpuinfo

CPUの使用率を確認できる

sh
adb shell dumpsys cpuinfo
ログを見やすくするコツ

上記のコマンドだとただ単に標準出力されるだけなので

sh
adb shell dumpsys cpuinfo > cpuinfo.log

でテキストファイルに書き起こすことをオススメする。
.log.txtなどでもOK

ログを見てみる

cpuinfo
...
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

こちらはメモリの使用状況が見れる

sh
adb shell dumpsys meminfo

ここでもGoogle Play開発者サービスがメモリを多く占有していた

dumpsys batterystats

原因はなんとなく分かったが、com.google.android.gms.persistentを呼び出しているアプリを特定する。

というのも、こういったAndroidの不具合はサードパーティのアプリによって引き起こされている可能性も考えられるからである。

まずはスマホのバッテリー使用履歴をリセットする

sh
# バッテリーの使用履歴を削除
adb shell dumpsys batterystats --reset

スマートフォンの 設定>電池>バッテリー使用量 の中が消えていたら成功。

電池の消耗具合を記録させるため、一度100%充電した後、電源を抜いて数時間放置する。

sh
adb shell dumpsys batterystats > batterystatus.log

かなり行数が多いのでファイルに書き起こす。

出来上がったログファイルを見てみる。

BATTERY HISTORYセクション

batterystats.log
...
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) セクション

アプリやコンポーネントごとの消費電力を確認する。

batterystats.log
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からアプリケーションの名前を取得したい
sh
adb shell cmd package list packages --uid 10202

全体消費量(Computed drain)が750 mAhに対してu0a202が104 mAhも食っているではないか。

じゃあu0a202は一体何なのか...

なんとfacebookでした。ほとんど使用していないのになぜ...

まとめ

  • facebookを削除し、スマートフォンを再起動させると発熱が収まりました。
  • こんなの素人が分かる訳ないので Androidは玄人向きOSですね。

余談

途中でDigital Wellbeingを無効化すれば直るのでは?と思いadbから操作してみた
sh
adb shell pm disable-user --user 0 com.google.android.apps.wellbeing

また、GMSのデータが破損している可能性も考えたのでリセットをかけてみた

sh
adb shell pm clear com.google.android.gms

Discussion

3z_at3z_at

自分もmoto g52j 5GなのですがPlay開発者( GMS)をアップデートしてから発熱とバッテリーの減りがすぐ切れてしまうようになってしまいました。
ありがとうございました。