注目キーワード

Androidアプリ開発・あれっ?なぜかAndroidManifest.xmlに宣言していないpermissionが追加されている?

AndroidアプリにおいてAndroid Studioでビルドしていると、  AndroidManifest.xmlではパーミッション(権限)を付与していないのに、アプリを起動したときになぜか勝手にパーミッションが付与されていることに気づくことがあります。

 

AndroidアプリにおいてAndroid Studioでビルドしていると、

AndroidManifest.xmlではパーミッション(権限)を付与していないのに、アプリを起動したときになぜか勝手にパーミッションが付与されていることに気づくことがあります。

 

 

なぜそのようなことが発生するのでしょうか?

 

実は、自分では付与していなくても広告ツールなどのSDKを導入していると勝手に、パーミッションがついてしまうケースがあります。

 

その理由は、SDK側で必要なパーミッションをこっそりと追加しているためです。

 

勝手にパーミッションがつけられていないか確認方法

 

SDKを導入したら、勝手にパーミッションがつけられていないかマージログから確認します。

確認方法は、以下のファイルを開きます。

app/build/outputs/logs/manifest-merger-debug-report.txt

 

※ここでは「app」をAndroid Projectのルートとします。

 

 

ログに以下のような内容の書き込みがあったらパーミッションが付与されています。

 

	android:name
		ADDED from [com.apptentive:apptentive-android:5.1.1] C:\Users\your_path\Desktop\prod\build\intermediates\exploded-aar\com.apptentive\apptentive-android\5.1.1\AndroidManifest.xml:40
android:uses-permission#android.permission.READ_EXTERNAL_STORAGE
IMPLIED from C:\Users\your_path\Desktop\prod\src\main\AndroidManifest.xml:2:1-128:12 reason: com.apptentive.android.sdk requested WRITE_EXTERNAL_STORAGE

 

ADDED

android.permission.READ_EXTERNAL_STORAGE

 

という内容から、パーミッションが付与されていることがわかります。

 

 

こっそり追加されるパーミッションを削除するには?

AndroidManifest.xmlに、対象のパーミッションについてremoveを追加します。

 

READ_EXTERNAL_STORAGEを削除するときの例は以下のとおりです。

 

AndroidManifest.xmlファイルにて


<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
                 tools:node="remove"/>

 

※ただし、本当に削除してよいパーミッションか確認せよ!

SDKによるパーミッションの付与は、そもそも「必要だから」追加するケースがほとんどです。本当にパーミッションを削除してよいかはSDKなどのドキュメントを確認した上で対処してください!

 

 

以上、解決方法でした。