Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are permissions being automatically added to my AndroidManifest when including Google Play Services library

I noticed that the following permissions were automatically added when i use the following in my build.gradle file

compile 'com.google.android.gms:play-services:7.5.0' 

This did not occur with the earlier versions of the play-services. does anyone have a solution to remove these unwanted permissions?

I am only using the ads function (INTERNET and ACCESSNETWORK_STATE). I got no need for the LOCATION and USE_CREDENTIALS permissions. How do you remove these unwanted permissions?

I noticed that the 'manifest-merger-xxx-debug-report.txt' file contains the following

 ...<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> 
like image 428
Angel Koh Avatar asked Jun 05 '15 04:06

Angel Koh


People also ask

How do I get permission off Android manifest file?

The simple way to remove this type of permission, is by deleting its xml code line from the original Android Manifest file in android/app/src/main .

What is Android manifest permission?

The Android manifest file helps to declare the permissions that an app must have to access data from other apps. The Android manifest file also specifies the app's package name that helps the Android SDK while building the app.

What is Android permission Receive_boot_completed?

permission. RECEIVE_BOOT_COMPLETED. run at startup. Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the phone and allow the app to slow down the overall phone by always running.


2 Answers

When you use

compile 'com.google.android.gms:play-services:7.5.0' 

This implies you are using every feature of Google Play Services, including location services. If you only need a particular API, you should be using the selective APIs.

In the case of ads, you can use solely:

compile 'com.google.android.gms:play-services-ads:7.5.0' 
like image 50
ianhanniballake Avatar answered Sep 20 '22 05:09

ianhanniballake


You can exclude those auto added permissions if your app feature doesn't require.

In my case i'm using Google wallet play service 8.3 which adds GET_ACCOUNTS and USE_CREDENTIALS . We don't required user to pick the google account for selecting google wallet.

<uses-permission android:name="android.permission.GET_ACCOUNTS" tools:node="remove"/> <uses-permission android:name="android.permission.USE_CREDENTIALS" tools:node="remove" /> 

tools:node="remove" does the trick when creating the full manifest.

Look at the Full final AndroidManifest.xml at /build/intermediates/manifest/full/debug

like image 28
Libin Avatar answered Sep 19 '22 05:09

Libin