Подтвердить что ты не робот

Как использовать новое слияние манифеста (из Android Studio и Gradle)?

Фон

В прошлом, когда Eclipse & ADT были официальными инструментами для разработки для Android, вы могли бы просто использовать " manifestmerger.enabled = true" внутри " project.properties" проекта приложения, и вы автоматически его сгенерировали все проявления библиотек (и я опубликовал об этом здесь).

Это сработало, иногда. У него было много странных проблем, и я всегда предпочитал просто не использовать его и вручную помещать в основной файл манифеста.

Проблема

Где-то в 2014 году Google объявил, что новая Android-Studio (0.1, я думаю), вместе с Gradle, позволит вам точно выбрать, как выполнять слияние компонентов библиотек.

Однако новые инструкции (ссылка здесь) очень сложны, и я действительно (действительно) пытался понять как их использовать, а также не нашли примеров того, как их использовать.

Не то, чтобы я ничего не понял, но я не уверен, хорошо ли я понял.

Что я нашел

С яркой стороны я обнаружил, что слияние выполняется полностью автоматически, поэтому, если у вас есть BroadcastReceiver в манифесте библиотеки (и как класс, конечно), он будет добавлен в проект приложения, который использует он.

Вопрос

Я не могу просто попросить все объяснить. Я думаю, этого будет достаточно, чтобы задать следующие вопросы:

  • Как я могу выбрать, какие компоненты приложения (разрешения, действия,...) игнорировать из автоматического слияния?

  • Как я могу переопределить атрибуты компонентов приложения (из библиотеки) (в проекте приложения)? например, тему деятельности?

  • Есть ли способ полностью отключить автоматическое слияние файлов манифеста?

  • Что происходит с манифестами зависимостей, которые находятся внутри репозиториев? Они тоже сливаются?

  • Есть ли какие-либо учебники/примеры/видеоролики относительно этой новой (но новой для меня) функции?

  • Есть ли какие-либо вещи, о которых я должен знать при использовании автоматического слияния?

Я надеюсь, что эти вопросы достаточно представительны, достаточно информативны, но не слишком сложно ответить тем, кто знает.

4b9b3361

Ответ 1

1. Отключение элементов

Вы всегда можете явно отключать разрешения и функции в манифесте приложения и переопределять любые значения библиотеки. И я обнаружил, что вы можете отключить элементы из библиотеки.

Пример

Рассмотрим следующий код из приведенной выше ссылки:

<activity-alias
    android:name="foo.bar.alias">
  <meta-data 
      android:name="zoo" 
      tools:node="remove"/>
</activity-alias>

Используя этот код внутри вашего манифеста, вы гарантируете, что слияние найдет какие-либо элементы <activity-alias> с атрибутом android:name="foo.bar.alias" и удалит элемент <meta-data>, если он имеет атрибут android:name="zoo". Он удаляет только мета-данные "зоопарка". Не псевдоним активности. Если вы укажете это в своем основном манифесте, это будет эффективно для всего, что было объединено до сих пор (элементы из библиотек).

Пример # 2

Поскольку вы запросили пример с действиями, это то, что я придумал:

<activity android:name="com.example.ui.MyActivity" tools:node="remove"/>

В этой строке слияние удалит любые действия с атрибутом android:name="com.example.ui.MyActivity", которые были объединены до сих пор. Поэтому, если вы укажете это в своем основном манифесте, он эффективно удалит любые записи com.example.ui.MyActivity, которые могли быть объединены из библиотек.

2. Переопределение атрибутов из библиотеки

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

Что такое типы сборки?

По умолчанию "debug" и "release". Вы можете определить свои собственные и переопределить параметры, такие как подпись или прогейдер. Для ваших целей вы можете сказать, что это эквивалент конфигураций запуска.

Он работает следующим образом: вы помещаете свои значения по умолчанию и общие значения внутри манифеста main. Затем в ароматных проявлениях вы переопределяете значения, которые вам нужны. Google "gradle ароматы" для получения дополнительной информации.

3. Отключение манифеста слияния вообще

Отключить манифестное слияние в Android Gradle Построить

android.applicationVariants.all { variant ->
    variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
    variant.processManifest.enabled=false
}

В каком файле вы помещаете это?

В конце проекта вашего модуля (не root) build.gradle.

4. Являются ли проявления от зависимостей объединенными?

Да, они (это библиотеки).

Есть ли способ блокировать слияние определенных манифестов библиотеки?

Не то, чтобы я знаю, извините.

5. Любые учебники?

Зависит от того, что вы пытаетесь достичь. До сих пор он всегда работал у меня из коробки.

Я не знаю о каких-либо видео.

6. Что я должен знать?

Вы можете проверить сгенерированный манифест, если у вас возникли подозрения в отношении дополнительных разрешений и т.д. Он находится в project/module/build/intermediates/manifests/full/[flavor]/build-type/AndroidManifest.xml.

Соус: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger