2015-01-17 10 views
8

Mam następujący problem stoi w tej chwili:Wyłącz uprawnienia zależnościami

wyrobiłem aplikacja „A”, który wykorzystuje uprawnienia 1, 2, 3 i wykorzystuje biblioteki 3rd party „B” jako zależność (dodane przy użyciu maven & gradle).

Biblioteka "B" używa uprawnień 4 i 5. Teraz podczas budowania aplikacji połączenie jawne dodaje uprawnienia 4 i 5 do aplikacji "A".

Jak mogę temu zapobiec i mam tylko uprawnienia 1, 2 i 3 w ostatecznym manifeście?

Moje pierwsze przypuszczenie byłoby stosując jedną z oczywistych markerów fuzji, jak widać tutaj: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Markers

Odpowiedz

13

Trzeba użyć Selector

Each narzędzi: node lub Narzędzia: atr deklaracja może być wspomagana przez narzędzia: atrybut selektora, który jest kontekstową informacją o tym, czy lub , strategia łączenia nie powinna być stosowana do bieżącego niższego opisu priorytetu XML . Na przykład, jest to przydatne przy usuwaniu zezwolenie tylko jeżeli pochodzą z jednej konkretnej biblioteki w przeciwieństwie do jakiegokolwiek biblioteki :

<permission 
     android:name="permissionOne" 
     tools:node="remove" 
     tools:selector="com.example.lib1"> 

Byłoby obok według początkowych wymagań

<!--suppress AndroidDomInspection --> 
<uses-permission 
    tools:node="removeAll"/> 

ale pamiętaj, że wszystkie pozostałe <uses-permissions/> zostaną usunięte.

+0

Jak mogę stłumić wynikowy ostrzeżenie podczas korzystania z 2nd przykład? "atrybut name powinien być zdefiniowany" – throwaway

+0

@throwaway Użyj przestrzeni nazw narzędzi Androida 'xmlns: tools =" http://schemas.android.com/tools "', dodaj go do '' – gio

+0

Naw, mówiłem o tym, że węzeł '' wymaga atrybutu 'andorid: name' (zgodnie z linią), to mam na myśli: https://i.imgur.com/V5YZp11.png projekt wciąż kompiluje się z tym błędem, ale jest bardzo mylący – throwaway

0

Jak wiadomo, wszystkie biblioteki mają plik manifestu i scalą się ze sobą. można usunąć pozwolenie, które jest w jednej z bibliotek przez to:

tools:node="remove" 

na przykład usuwając uprawnienie Lokalizacja:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" />