Unity

UnityでAndroidをビルドしたときに勝手にREAD_PHONE_STATEが付与される

背景

某SDKを導入したり、自分で書いたnative pluginを導入した際に、なぜかREAD_PHONE_STATE権限が付与されてしまってハマった。

要因

AndroidのBuildToolsが26.0.2以上でビルドした際に発生

原因

新しいBuildToolsでは、AndroidManifest.xmlが複数あったときにmergeする時の挙動が変わった.

minSdkVersionとtargetSdkVersionの両方の指定がないと勝手にREAD_PHONE_STATEなどの下位互換性を保つための権限が付与される。

この挙動自体は正しく、いままでよりAndroidManifestの指定が厳格になった感じらしい。

対処

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+  <uses-sdk android:targetSdkVersion="26" android:minSdkVersion="19" />
  <application>
  </application>
</manifest>

uses-sdkで各AndroidManifestにtargetSdkVersionとminSdkVersionを指定してあげることで回避した。