Ошибка манифеста слияния
В процессе переноса моих текущих проектов огромное количество приложений в Android Studio и Gradle. В настоящее время я придерживаюсь следующей проблемы:
Error:(87, 9) Execution failed for task ':App:processDebugManifest'.
> Manifest merger failed : Attribute [email protected] 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"
Ни одно из этих определений атрибутов не работает. Что я делаю неправильно?
Ответы
Ответ 1
Попробуйте:
Добавьте это к <manifest/>
xmlns:tools="http://schemas.android.com/tools"
Добавьте это в <application/>
tools:node="replace"
Основанный на этом, он должен переопределить все элементы. Msgstr "Заменить декларацию о нижнем приоритете аннотированной."
Ответ 2
Фон
Когда файлы манифеста сливаются, возникает конфликт с атрибутом label
.
В общем случае существует три типа файлов манифеста, которые необходимо объединить в один результирующий манифест приложения, здесь в порядке приоритета:
- Продукт отличает и создает типы конкретных файлов манифеста.
- Основной файл манифеста для приложения.
- Файлы манифеста библиотеки.
Решение
Конфликт может быть разрешен одним из двух способов: -
Удалите конфликтующую метку
Удалите конфликтующий атрибут из файла манифеста библиотеки (или более низкого уровня).
В этом случае значение 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>
node и tools:replace="label"
в <application>
node.
Вот пример - используйте это в главном приложении 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"
.
Ответ 3
Если вам повезло, как и я, вы можете вручную исправить эту проблему с помощью взломанной работы.
Файлы AAR - это просто .zip файлы с расширением .aar. В моем случае я распаковал файл .aar, удалил оскорбительный android:label
из библиотеки AndroidManifest.xml
, а затем вытащил оставшиеся файлы с расширением .aar, и все, кажется, отлично работает с новым .aar.
FYI, это, по-видимому, известная ошибка в плагине android gradle.
Ответ 4
Я исправил ту же проблему. Решение для меня:
- добавьте строку
xmlns:tools="http://schemas.android.com/tools"
в тег манифеста
- добавить
tools:replace=..
в тег манифеста
- переместить
android:label=...
в тег манифеста
Пример здесь
Ответ 5
Я также столкнулся с теми же проблемами, и после того, как многие исследования обнаружили, что душа
- Ваша версия min sdk должна быть такой же, как и у модулей, которые вы используете например: ваш модуль min sdk версии составляет 14, а ваша версия приложения min sdk - 9 Он должен быть таким же.
- Если версия сборки вашего приложения и модулей не одинакова. Опять же, он должен был
Короче говоря, файл и манифест приложения build.gradle должны иметь одинаковые конфигурации
- В файле манифеста нет дубликаций, подобных тем же разрешениям, что и дважды.
- Если вы удалили любое действие из своего проекта, удалите его из файла манифеста, а также
- Иногда это связано с ярлыком, значком etc тега файла манифеста a) добавить строку xmlns: tools в тег манифеста б) добавить инструменты: 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>
Рассматривая эти моменты, вы избавитесь от этого манифестного слияния с неудачной проблемой
Проверьте мой пост: эта проблема возникает из-за проблемы в файле манифеста или файле build.gradle. Вы можете проверить мой пост
https://wordpress.com/post/dhingrakimmi.wordpress.com/23