为什么play-services-location需要android.permission.WRITE_EXTERNAL_STORAGE和android.permission.READ_EXTERNAL_STORAGE权限?

我在AndroidManifest.xml中所有的是:

<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

将APK上传到开发者控制台之后,它添加了两个新的权限: 在这里输入图像说明

我的build.gradle:

 apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "net.perspiratron.ifpaprofile" minSdkVersion 15 targetSdkVersion 22 versionCode 3 versionName "1.2" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) // wearApp project(':wear') compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.google.android.gms:play-services-analytics:7.5.0' compile 'com.google.android.gms:play-services-location:7.5.0' compile 'com.jjoe64:graphview:4.0.0' } 

我唯一添加的是play-services-location。 为什么这个图书馆需要它?

Solutions Collecting From Web of "为什么play-services-location需要android.permission.WRITE_EXTERNAL_STORAGE和android.permission.READ_EXTERNAL_STORAGE权限?"

简短的回答:我不相信play-services-location确实需要这些权限。 它似乎也不需要android.permission.ACCESS_NETWORK_STATEandroid.permission.INTERNET ,它们也被添加。

较长的回答:看看我的清单合并日志,似乎所有这四个权限都包含在play-services-maps的请求中,这些地点是自动链接的。 我的应用程序不使用-maps,只是 – 位置。

另外,我发现这个行为刚刚出现在play-services-location的7.5.0版本中; 之前的版本不包括-maps,并且不添加这些权限。

我实际上怀疑这个与玩服务地图的连接是偶然的,并且将在未来版本的GMS中被删除。

跟随Mark Murphy(CommonsWare)给出的链接,您可以通过将以下行添加到您的清单中,从您的应用程序中删除这些权限:

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

请注意,您还需要在开始的<manifest ... >元素中使用xmlns:tools="http://schemas.android.com/tools"来使这些工作成功。 而通常的注意事项适用于:我的应用程序采取这一步后,罚款,但YMMV。


更新2015年9月10日:马克·墨菲(@commonsware)在他的博客上对这个问题做了很好的写作 ,包括讨论我的解决scheme的风险。