LoginSignup
2
1

More than 5 years have passed since last update.

Android6.0対応でのPermissionの落とし穴

Last updated at Posted at 2016-10-15

Android6.0でのRuntime-Permissionの落とし穴

Android6.0から、アプリで使うpermission(権限)のうちいくつかは、実行時に権限を確認しないといけなくなったのはご存知の通り。

アプリで使うpermissionは AndroidManifest.xmlに記述すれば良いが、
実際には使用しているライブラリが権限を追加する場合があり、6.0の場合は
追加した覚えのないpermissionがアプリに付与されていることがあるので注意が必要。

例えば以下の例では、権限をなにも付与していない

AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="tone.ne.jp.myapplication">
    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"   

しかし,ライブラリとしてplay-service-locationを使っている場合、設定アプリから権限を確認してみると、
位置情報ストレージの権限が付与されている。

build.gradle
(省略)
dependencies{
   compile "com.google.android.gms:play-services-location:7.5.0"
}

これはビルド時にライブラリが使うpermissionをAndroidManifestに勝手に付与してるためで、permissionがmergeされた実際のmanifestは
app/build/intermediates/manifests/full/debug/AndroidManifest.xmlを見ればわかる

build/intermediates/manifests/full/debug/AndroidManifest.xml
(省略)

    <!-- Include required permissions for Google Maps API to run -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

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

さらに詳しい説明を見たい場合は、
app/build/outputs/logs/manifest-merger-debug-report.txt
にて、mergeされた権限の情報をみることができる。
(READ/WRITE EXTERNAL_STORAGEを確認できる)

manifest-merger-debug-report.txt
 (省略)
 ADDED from [com.google.android.gms:play-services-maps:7.5.0]
   ../play-services-maps/7.5.0/AndroidManifest.xml:21:22-64 uses-permission#android.permission.WRITE_EXTERNAL_STORAGE

 android:uses-permission#android.permission.READ_EXTERNAL_STORAGE
IMPLIED from /Users/user1/AndroidStudioProjects/MyApplication3/app/src/main/AndroidManifest.xml:2:1-31:12 reason: com.google.android.gms.maps requested WRITE_EXTERNAL_STORAGE

ライブラリが付与するpermissionを取り除きたい場合は、以下のようにAndroidManifest.xmlで取り除くことができる。
(ストレージ権限は確認されなくなる)

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

ただし,ライブラリがpermissionを付与されているかを確認するような実装になっているとは限らないので、注意が必要。当然ながら、SecurityExceptionを吐く場合もあるので、あくまで自己責任で注意してpermissionをOFFにするべき。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1