为什么应用程序不在清单中写入就请求许可

Why apps asks permission without writing it in manifest

我有一个应用程序,其中的清单只有以下几行权限

<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"/>

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

身份
使用以下一项或多项:设备上的帐户、配置文件数据
地点
使用设备的位置
Photos/Media/Files
使用以下一项或多项:设备上的文件,例如图像、视频或音频,设备的外部存储

因为我既不询问用户位置也不使用它,为什么 Play 商店显示这个?

编辑:如何修复

接受答案的 link 和 this google page 帮助我解决了问题。基本上 play-services 使用位置,所以我只是用 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'

Since I am not asking for user location neither I am using it, why play store is showing this ?

它显示了您的应用程序需要什么,即使您没有明确将其放入您的清单文件中。事实上,最终的清单是合并您的 AndroidManifest.xml 和您的依赖项(通常通过 gradle 的 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

进一步阅读: