Я использую проект gradle с множеством различных библиотечных зависимостей и использую новый манифест слияния. В моем <application />
теге он настроен так:
<application tools:replace="android:icon, android:label, android:theme, android:name"
android:name="com.example.myapp.MyApplcation"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/application_name"
android:logo="@drawable/logo_ab"
android:theme="@style/AppTheme"
>
....
</application>
Тем не менее я получаю сообщение об ошибке:
/android/MyApp/app/src/main/AndroidManifest.xml:29:9 Error:
Attribute application@icon value=(@drawable/ic_launcher) from AndroidManifest.xml:29:9
is also present at {Library Name} value=(@drawable/app_icon)
Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:30:9 Error:
Attribute application@label value=(@string/application_name) from AndroidManifest.xml:30:9
is also present at {Library Name} value=(@string/app_name)
Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:27:9 Error:
Attribute application@name value=(com.example.myapp.MyApplication) from AndroidManifest.xml:27:9
is also present at {Another Library}
Suggestion: add 'tools:replace="android:name"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:32:9 Error:
Attribute application@theme value=(@style/AppTheme) from AndroidManifest.xml:32:9
is also present at {Library Name} value=(@style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:26:5 to override
android
android-gradle-plugin
agrosner
источник
источник
<application>
в проекте повторяется тег. Просьба убедиться, что есть только один<application>
.Ответы:
Объявите свой заголовок манифеста, как это
Затем вы можете добавить в свой тег приложения следующий атрибут:
Например, мне нужно заменить значок и метку. Удачи!
источник
tools:node="replace"
:<meta-data tools:node="replace" android:name="QUERY_LOG" android:value="true" />
и т. Д.tools:replace
в свое приложение тег, который должен заменить его, а не источник, который должен быть заменен. Таким образом, мои приложения заменяют то, что определено в моей библиотеке. Вы говорите «что следует заменить» вместо «что можно заменить». Я надеюсь, что это проясняет вопросы.tools:replace="android:versionCode, android:versionName"
должен быть внутри<manifest >
тега.Я исправил ту же проблему. Решение для меня:
xmlns:tools="http://schemas.android.com/tools"
строку в тег манифестаtools:replace=..
в манифест тегandroid:label=...
в манифест тегПример:
источник
<manifest>
непосредственно, а не под<application>
.Попробуйте изменить порядок ваших зависимостей в файле Gradle. Мне пришлось переместить нарушающую библиотеку из нижней части списка вверх, и тогда это сработало.
источник
Я только что испытал такое же поведение,
tools:replace=...
как описано в ОП.Оказалось, что основной причиной
tools:replace
игнорирования манифеста слияния является ошибка, описанная здесь . По сути, это означает, что если в вашем проекте есть библиотека, содержащая манифест с<application ...>
узлом, содержащимtools:ignore=...
атрибут, то может случиться, чтоtools:replace=...
атрибут в манифесте вашего основного модуля будет проигнорирован.Сложность в том, что это может случиться, но не обязательно. В моем случае у меня было две библиотеки: библиотека A с
tools:ignore=...
атрибутом, библиотека B с атрибутами, подлежащими замене в соответствующих манифестах, иtools:replace=...
атрибут в манифесте основного модуля. Если манифест B был объединен с основным манифестом до манифеста A, все работало как ожидалось. В обратном порядке слияния появилась ошибка.Порядок, в котором происходят эти слияния, кажется несколько случайным. В моем случае изменение порядка в разделе зависимостей не
build.gradle
имело никакого эффекта, но изменение имени флейвора сделало это.Таким образом, единственный надежный обходной путь, по-видимому, состоит в распаковке библиотеки, вызывающей проблему, удалении
tools:ignore=...
тега (что не должно быть проблемой, поскольку это только подсказка для lint) и повторной упаковки библиотеки.И голосуйте за исправление ошибки, причины.
источник
<manifest>
узел с<application>
узла и все заработало.Окончательное рабочее решение для меня (выделены метки в примере кода):
xmlns:tools
строку в тег манифестаtools:replace
в тег приложенияПример:
источник
Недостающий кусок для меня был такой:
например:
источник
Вы можете заменить их в своем теге приложения Manifest:
и будет работать на вас.
источник
tools:replace="android:label"
в приложение, но это не работаетFIXED IT HAD ТОЧНОЙ ОШИБКИ, Просто добавьте эти инструменты: заменить = «андроид: значок, андроид: тему»
в тег приложения в вашем манифесте, он работает просто отлично,
источник
Вы можете заменить их в своем
application
теге Manifest :и будет работать на вас.
объяснение
Использование такой зависимости / библиотеки в вашем
gradle
файле, которая имеет эти метки в теге приложения манифеста, может создать эту проблему, и замена их в вашемManifest
является решением.источник
Следующий хак работает:
xmlns:tools="http://schemas.android.com/tools"
строку в тег манифестаtools:replace="android:icon,android:theme,android:allowBackup,label"
в тег приложенияисточник
Моя проблема заключается в многомодульном проекте с базовым модулем, модулем приложения и функциональным модулем. У каждого модуля есть свой AndroidManifest, и я реализовал вариант сборки для отладки и main. Поэтому мы должны убедиться, что «android: name» только что объявлено в Manifest только для отладки и main, и не устанавливать его ни в одном из Manifest в дочернем модуле. Пример: Манифест в основном:
Манифест в отладке:
Не устанавливайте «android: name» в других файлах манифеста, как это:
Просто определите в функциональном модуле, как это, и он будет хорошо слит
источник
Я получал похожую ошибку в проекте, который я импортировал:
Исправлено после изменения строки ниже в теге приложения:
в
источник
Я также прошел через эту проблему и изменил это:
в
источник
источник