2015-01-17 4 views
8

Я столкнулся со следующей проблемой на данный момент:разрешения зависимостей Отключить

я разработал приложение «A», который использует разрешения 1, 2, 3 и использует 3 участника библиотеку «B» в качестве зависимости (добавила используя maven & gradle).

Библиотека «B» использует разрешения 4 и 5. Теперь при создании приложения слияние манифеста добавляет разрешения 4 и 5 в приложение «A».

Как я могу предотвратить это и иметь только разрешения 1, 2 и 3 в последнем манифесте?

Моя первая догадка будет использовать один из манифестов маркеров слияний, как показано здесь: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Markers

ответ

13

Вы должны использовать Selector

Каждых инструменты: узел или инструменты: атр декларация может быть дополнена tools: атрибут selector, который является контекстуальной информацией о том, является ли или не стратегия объединения, должна применяться к текущему нижнему приоритет XML-описания. Например, это полезно при удалении разрешения только если приходя для одной конкретной библиотеки, в отличие от любого библиотеки:

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

Это будет следующим согласно вашим исходным требованиям

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

но имейте в виду, что все остальные <uses-permissions/> будут удалены.

+0

Как я могу подавить в результате предупреждения при использовании 2-е примера? «атрибут имени должен быть определен» – throwaway

+0

@throwaway Используйте пространство имен Android-инструментов 'xmlns: tools =" http://schemas.android.com/tools "', добавьте его в '' – gio

+0

Naw, я говорил об этом, что для узла '' требуется атрибут 'andorid: name' (в соответствии с lint), вот что я имею в виду: https://i.imgur.com/V5YZp11.png проект по-прежнему строит с этой ошибкой, но он очень запутан – throwaway

0

Как известно, все библиотеки имеют файл манифеста и будут сливаться вместе. вы можете удалить разрешение, которое находится в одном из ваших библиотек по этим:

tools:node="remove" 

для примера извлекая разрешение местоположения:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" /> 
Смежные вопросы