为什么应用程序要求权限而不在清单中写入

roc*_*ght 2 android android-manifest android-permissions

我有一个应用程序,其中清单只允许以下行

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
Run Code Online (Sandbox Code Playgroud)

但在安装应用程序时,Play商店会显示以下权限

身份
使用以下一项或多项:设备上的帐户,配置文件数据
位置
使用设备的位置
照片/媒体/文件
使用以下一项或多项:设备上的文件,如图像,视频或音频,设备的外部存储

既然我没有要求用户位置,我也没有使用它,为什么Play商店会显示这个?

编辑:如何修复

接受的答案和谷歌页面上的链接帮助我解决了这个问题.基本上播放服务使用了位置,所以我只是用service-plus和service-ads替换它们来解决这个问题.希望这将有助于其他一些开发人员.

具体
替换compile 'com.google.android.gms:play-services:7.5.0'

compile 'com.google.android.gms:play-services-ads:7.5.0'
compile 'com.google.android.gms:play-services-plus:7.5.0'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ski 10

既然我没有要求用户位置,我也没有使用它,为什么Play商店会显示这个?

它显示了您的应用所需的内容,即使您没有明确地将其明确放在您的清单文件中.实际上,最终的Manifest是你AndroidManifest.xml和你的所有清单合并的结果(这些通常通过gradle's引用compile ...)提供.

如果您想知道哪个依赖项会影响您的最终权限要求,您可以检查文件<PROJECT>/app/build/outputs/logs夹中的清单合并报告文件并查找uses-permission#<PERMISSION_YOU_LOOK_FOR>,即:

uses-permission#android.permission.WRITE_EXTERNAL_STORAGE
ADDED from AndroidManifest.xml:11:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:22:5
Run Code Online (Sandbox Code Playgroud)

进一步阅读: