为什么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'
}

我唯一添加的是播放服务位置.为什么这个图书馆需要它?

解决方法

简短的答案:我不认为播放服务位置确实需要这些权限.它似乎也不需要android.permission.ACCESS_NETWORK_STATE或android.permission.INTERNET,也正在添加.

更长的答案:
看看我的清单合并日志,似乎所有这四个权限都被包含在播放服务地图的请求中,哪个位置是自动链接的.我的应用程序没有使用-maps,只是位置.

此外,我发现这种行为刚刚出现在播放服务位置的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日:Mark Murphy(@commonsware)在他的博客上完成了an excellent writeup on this issue,包括讨论我的解决方案的风险.

相关文章

Android 通过adb shell命令查看内存,CPU,启动时间,电量等...
Monkey Android app稳定性测试工具之Monkey使用教程 by:授客...
Android 常见adb命令 by:授客 QQ:1033553122 1、 查看所有已...
这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...