Я нахожусь в процессе переноса моего текущего приложения projects huge в 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 файл:
Ни одно из этих определений атрибутов не работает. Что я делаю не так?
Переведено автоматически
Ответ 1
Попробуйте:
Добавьте это в <manifest/>
xmlns:tools="http://schemas.android.com/tools"
Добавьте это в <application/>
tools:node="replace"
На основании этого, он должен переопределить все элементы. "Замените объявление с более низким приоритетом на аннотированное".
Ответ 2
Справочная информация
При объединении файлов манифеста возникает конфликт с label атрибутом.
В общем, существует три типа файлов манифеста, которые необходимо объединить в единый результирующий манифест приложения, здесь в порядке приоритета :
Файлы манифеста зависят от разновидностей продукта и типов сборки.
Основной файл манифеста для приложения.
Файлы манифеста библиотеки.
Решения
Конфликт может быть разрешен одним из двух способов:-
Удалите конфликтующую метку
Удалите конфликтующий атрибут из файла манифеста библиотеки (или более низкого уровня).
В этом случае у ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name) есть @string/app_name определенное значение, отличное от значения в основном приложении. Так что, если это не требуется, то удалите его - просто удалите android:label="@string/app_name" из AndroidManifest.xml файла библиотеки.
Добавьте атрибут, позволяющий автоматически разрешать конфликт
Существует несколько специальных маркеров атрибутов (в пространстве имен tools), которые могут использоваться для выражения конкретного решения о том, как разрешать конфликты.
В этом случае, чтобы явно заставить основное приложение android:label переопределять любые другие метки приложений (например, файл библиотеки), добавьте xmlns:tools="http://schemas.android.com/tools" определение к <manifest> узлу и tools:replace="label" к <application> узлу.
Вот пример - используйте это в AndroidManifest.xml файле основного приложения:
Этот подход также будет работать с любыми другими конфликтующими атрибутами; например, если icon атрибут также конфликтовал, его можно было бы изменить на tools:replace="label, icon".
Ответ 3
Если вам повезло, как мне, вы можете вручную устранить проблему с помощью простого обхода.
Файлы AAR - это просто zip-файлы с расширением .aar. В моем случае я разархивировал файл .aar, удалил нарушающий .android:label из AndroidManifest.xml библиотеки, а затем повторно заархивировал оставшиеся файлы с расширением .aar, и, кажется, все отлично работает с новым .aar.