最初に
結論から言うとこの問題はGoogle Play Servicesのバグでした。バージョンを12.0.1で修正されていますので、12.0.0を使っている方は12.0.1上げることをオススメします。
経緯
Google Play Servicesのバージョンを12.0.0に上げてリリースしようとした際、Google Play Developer Console上でREAD_PHONE_STATEが追加されているが大丈夫?と警告が出た。
原因
全くに身に覚えが無い。
READ_PHONE_STATEはDangerous Permission (targetSdkVersionが23以上でRuntime Permissionに対応していない場合Permission要求された時点で落ちる)なのでカジュアルに追加することは無い。
調査
appモジュールレベルのbuild.gradleにGoogle Play Servicesの依存を追加する。以下はGoogle Analyticsだが他のAPIでも変わらない。
dependencies {
implementation "com.google.android.gms:play-services-analytics:12.0.0"
}
AndoidManifestを開き、下側のタブから「Merged Manifest」を選択するとManifest Mergerでマージ後のAndroidManifestを確認できる。
READ_PHONE_STATEをクリックして情報をみてみる。
Merging Logからcom.google.android.gms.license由来のパーミッションであることがわかる。targetSdkVersionが4未満なのが原因らしい。
READ_PHONE_STATEのドキュメントを読むと以下の記述がある。
Note: If both your minSdkVersion and targetSdkVersion values are set to 3 or lower, the system implicitly grants your app this permission. If you don't need this permission, be sure your targetSdkVersion is 4 or higher.
targetSdkVersionが4未満の場合勝手追加されるようだ。
解決方法
com.google.android.gms.licenseについて調べていくとGoogle Play ServicesのRelease Notesに辿りついた。Version 12.0.0の項目を確認すると原因が書いてあった。
-license POM dependencies have no minSdkVersion / targetSdkVersion set, which means that the implied targetSdkVersion is 1. This adds READ_PHONE_STATE and READ_EXTERNAL_STORAGE permissions for apps using 12.0.0.
minSdkVersion/targetSdkVersionをセットしていなかったのが原因との事。また、Version 12.0.1でこの問題は修正されている。
12.0.1にバージョンを更新してMerged Manifestで確認するとREAD_PHONE_STATE、READ_EXTERNAL_STORAGEが削除されていることがわかる。
まとめ
Play Consoleが警告を出してくれてすごい。助かった。
参考
https://developer.android.com/studio/build/manifest-merge.html#_9