27

zauważyłem, że następujące uprawnienia zostały automatycznie dodane podczas korzystania z następujących w moim pliku build.gradleDlaczego uprawnienia są automatycznie dodawane do mojego AndroidManifest gdy w tym biblioteki Google Play Services

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

To nie wystąpić wcześniejsze wersje gier-usług. czy ktoś ma rozwiązanie, aby usunąć te niechciane uprawnienia?

Używam tylko funkcji reklam (INTERNET i ACCESSNETWORK_STATE). Nie potrzebuję uprawnień LOCATION i USE_CREDENTIALS. Jak usunąć te niechciane uprawnienia?

Zauważyłem, że 'Manifest-fuzja-xxx-debug-report.txt' plik zawiera następujące

...<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> 

Odpowiedz

43

Podczas korzystania

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

Oznacza to używasz każdy funkcja Usług Google Play, w tym usługi lokalizacyjne. Jeśli potrzebujesz tylko konkretnego API, powinieneś używać selective APIs.

W przypadku reklam, można używać wyłącznie:

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

ahhh. to naprawiło. To dziwne, że przewodnik szybkiego startu wzywa nas do korzystania ze wszystkich usług zamiast tylko pakietu reklam. https://developers.google.com/admob/android/quick-start –

+1

@AngelKoh - Zgłaszałem błąd w zespole dokumentacji Google, aby zaktualizować przewodnik szybkiego uruchamiania. Dzięki za wskazanie tego! – ianhanniballake

+0

@ianhanniballake Według tego wpisu na blogu (http://googleadsdeveloper.blogspot.com/2014/12/announcing-v65-of-google-mobile-ads-sdk.html), istnieje zastrzeżenie, że ta metoda nie działa, jeśli zainicjujesz banery reklamowe z XML –

15

Można wykluczyć te auto dodaje uprawnienia, jeśli funkcja aplikacji nie wymaga.

W moim przypadku używam usługi gry w wersji 8.3, która dodaje GET_ACCOUNTS i USE_CREDENTIALS. Nie wymagamy od użytkownika wybrania konta google do wybrania google portfela.

<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" załatwia sprawę przy tworzeniu pełnego manifestu.

patrzenie na całą końcowego AndroidManifest.xml na /build/intermediates/manifest/full/debug

+0

To było dla mnie bardziej istotne, ponieważ od wersji usług Play 8.3, zależność 'play-services-ads' przynosi uprawnienie' WAKE_LOCK' w. –