为什么在包含Google Play服务库时,权限会自动添加到我的AndroidManifest中

Ang*_*Koh 29 android android-manifest admob android-permissions google-play-services

我注意到,当我在build.gradle文件中使用以下内容时,会自动添加以下权限

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

早期版本的播放服务不会出现这种情况.有没有人有解决方案来删除这些不需要的权限?

我只使用广告功能(INTERNET和ACCESSNETWORK_STATE).我不需要LOCATION和USE_CREDENTIALS权限.如何删除这些不需要的权限?

我注意到'manifest-merger-xxx-debug-report.txt'文件包含以下内容

 ...<snipped bunch of other merges>
MERGED from com.google.android.gms:play-services-maps:7.5.0:22:5
    android:name
        ADDED from com.google.android.gms:play-services-maps:7.5.0:22:22
uses-permission#android.permission.ACCESS_COARSE_LOCATION
ADDED from com.google.android.gms:play-services-maps:7.5.0:23:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:23:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:23:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:23:5
    android:name
        ADDED from com.google.android.gms:play-services-maps:7.5.0:23:22
uses-feature#0x00020000
ADDED from com.google.android.gms:play-services-maps:7.5.0:24:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:24:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:24:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:24:5
    android:glEsVersion
        ADDED from com.google.android.gms:play-services-maps:7.5.0:25:8
    android:required
        ADDED from com.google.android.gms:play-services-maps:7.5.0:26:8
android:uses-permission#android.permission.READ_EXTERNAL_STORAGE
IMPLIED from AndroidManifest.xml:2:1 reason: com.google.android.gms.maps requested WRITE_EXTERNAL_STORAGE
uses-permission#android.permission.GET_ACCOUNTS
ADDED from com.google.android.gms:play-services-wallet:7.5.0:21:5
    android:name
        ADDED from com.google.android.gms:play-services-wallet:7.5.0:21:22
uses-permission#android.permission.USE_CREDENTIALS
ADDED from com.google.android.gms:play-services-wallet:7.5.0:22:5
    android:name
        ADDED from com.google.android.gms:play-services-wallet:7.5.0:22:22
meta-data#com.google.android.gms.wallet.api.enabled
 ...<snips more lines away>
Run Code Online (Sandbox Code Playgroud)

ian*_*ake 43

当你使用

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

这意味着您正在使用Google Play服务的所有功能,包括位置服务.如果您只需要特定的API,则应使用选择性API.

对于广告,您可以单独使用:

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

  • 唉唉.修好了.奇怪的是,快速入门指南要求我们使用所有服务而不仅仅是广告包.https://developers.google.com/admob/android/quick-start (3认同)
  • 请注意,[快速入门指南](https://developers.google.com/admob/android/quick-start)现已更新为参考`play-services-ads` (3认同)
  • play-services 7.5是第一个自动添加必要权限的版本,而在过去,这并不适合你. (3认同)
  • @NanaGhartey - 这是版本6.5的限制,而不是7.5.AFAIK,此限制已被删除. (2认同)

Lib*_*bin 17

如果您的应用功能不需要,您可以排除这些自动添加的权限.

在我的情况下,我正在使用Google wallet播放服务8.3添加GET_ACCOUNTSUSE_CREDENTIALS.我们不要求用户选择谷歌帐户来选择谷歌钱包.

<uses-permission android:name="android.permission.GET_ACCOUNTS" tools:node="remove"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS" tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)

tools:node="remove" 在创建完整清单时可以做到这一点.

看看,这最终AndroidManifest.xml/build/intermediates/manifest/full/debug