Mokelab Blog

Play Install Referrer Libraryを導入すると不要なパーミッションが付与される話

前回はAndroidのPlay Install Referrer Libraryの導入方法を紹介しました。 今回は、そのまま導入したときに不要なパーミッションが追加されてしまう件と、その回避方法を紹介します。

Merged Manifest

Play Install Referrer Libraryを追加した後のMerged Manifestは次のようになっています。

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    ...>
    <uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    ...
</manifest>

パーミッションとしてBIND_GET_INSTALL_REFERRER_SERVICEは必要そうですが、WRITE_EXTERNAL_STORAGE/READ_PHONE_STATE/READ_EXTERNAL_STORAGEは必要なさそうです。

なぜ追加された?

Android StudioのMerged Manifestではパーミッションが追加された理由を確認することができます。確認してみると次のように書かれています。

reason: {アプリID} has a targetSdkVersion < 4

targetSdkVersionは29に設定しているのに4より小さいと言われています。これは Play Install Referrer Libraryがバージョン1.1.1の時点でtargetSdkVersionの指定がなく、1として扱われているのが原因です。

解決策は?

アプリ側のAndroidManifest.xmlで、次のようにremoveします。なお、アプリ本体や別ライブラリでこれらのパーミッションを使用している場合は removeしないようにしましょう。

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    ...>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove"/>

    ...
</manifest>

本サイトではサービス向上のため、Google Analyticsを導入しています。分析にはCookieを利用しています。