Ошибка манифеста слияния

Я в процессе перемещения моих текущих проектов огромное приложение в Android Studio и Gradle. В настоящее время я придерживаюсь следующей проблемы:

Error:(87, 9) Execution failed for task ':App:processDebugManifest'. > Manifest merger failed : Attribute application@label value=(@string/app_label) from AndroidManifest.xml:87:9 is also present at ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name) Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:82:5 to override 

Я попытался добавить следующие атрибуты в основной файл AndroidManifest.xml :

 tools:replace="android:label, *App Name*" tools:replace="android:label, @string/app_label" tools:replace="android:label" 

Ни одно из этих определений атрибутов не работает. Что я делаю не так?

Попробуйте:

Добавьте это в <manifest/>

 xmlns:tools="http://schemas.android.com/tools" 

Добавьте это в <application/>

 tools:node="replace" 

Исходя из этого , он должен переопределить все элементы. Msgstr "Заменить декларацию о нижнем приоритете аннотированной".

Задний план

Когда файлы манифеста объединяются, возникает конфликт с атрибутом label .

В общем, существует три типа файлов манифеста, которые необходимо объединить в один результирующий манифест приложения, здесь в порядке приоритета:

  1. Продукт отличает и создает типы конкретных файлов манифеста.
  2. Основной файл манифеста для приложения.
  3. Файлы манифеста библиотек.

Решения

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

Удалить конфликтующую метку

Удалите конфликтный атрибут из файла манифеста библиотеки (или более низкого уровня).

В этом случае значение ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name) имеет значение @string/app_name , отличное от значения в главном приложении. Поэтому, если это не требуется, то удалите его – просто удалите android:label="@string/app_name" из файла AndroidManifest.xml файла библиотеки.

Добавить атрибут, позволяющий автоматически разрешать конфликт

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

В этом случае, чтобы явно запретить ярлыки приложения (например, библиотечный файл) основного приложения android:label ярлыки приложения, добавьте определение xmlns:tools="http://schemas.android.com/tools" в <manifest> Узел и tools:replace="label" на узел <application> .

Вот пример – используйте это в файле AndroidManifest.xml основного приложения:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mycompany.myapp" xmlns:tools="http://schemas.android.com/tools"> <application android:label="@string/app_name" tools:replace="label"/> </manifest> 

Этот подход также будет работать с любыми другими противоречивыми атрибутами; Например, если атрибут icon также находится в конфликте, его можно было бы изменить на tools:replace="label, icon" .

Если вам повезло, как и я, вы можете вручную исправить проблему с помощью взломанной работы.

Файлы AAR – это просто .zip-файлы с расширением .aar. В моем случае я распаковал файл .aar, удалил оскорбительный android:label из файла AndroidManifest.xml библиотеки, а затем вытащил оставшиеся файлы с расширением .aar, и все, кажется, отлично работает с новым .aar.

FYI, это, кажется, известная ошибка в плагине android gradle .

Я исправил ту же проблему. Решение для меня:

  1. Добавьте строку xmlns:tools="http://schemas.android.com/tools" в теге манифеста
  2. Добавить tools:replace=.. в теге манифеста
  3. Move android:label=... в теге манифеста

Пример здесь

Я также столкнулся с теми же проблемами, и после того, как многие исследования обнаружили,

  1. Ваша версия min sdk должна быть такой же, как у модулей, которые вы используете, например: ваш модуль min sdk version равен 14, а ваше приложение min sdk version равно 9. Оно должно быть таким же.
  2. Если версия сборки вашего приложения и модулей не одинакова. Опять же, он должен

Короче говоря, файл и манифест приложения build.gradle должны иметь одинаковые конфигурации

  1. В файле манифеста нет дубликатов, подобных тем же разрешениям, что и дважды.
  2. Если вы удалили какую-либо деятельность из своего проекта, удалите ее из файла манифеста
  3. Иногда это означает, что ярлык, значок и т. Д. Файла манифеста a) добавить строку xmlns: tools в тег манифеста b) добавить инструменты: replace = или tools: ignore = в теге приложения Пример
  <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.slinfy.ikharelimiteduk" xmlns:tools="http://schemas.android.com/tools" android:versionCode="1" android:versionName="1.0" > <application tools:replace="icon, label" android:label="myApp" android:name="com.example.MyApplication" android:allowBackup="true" android:hardwareAccelerated="false" android:icon="@drawable/ic_launcher" android:theme="@style/Theme.AppCompat" > </application> </manifest> 

Рассматривая эти моменты в виду, вы избавитесь от этого манифестного слияния.