Инструменты: заменить не замену в манифесте Android
Я использую проект 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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
Ответы
Ответ 1
Объявите свой заголовок манифеста, как это
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yourpackage"
xmlns:tools="http://schemas.android.com/tools">
Затем вы можете добавить в свой тег приложения следующий атрибут:
<application
tools:replace="icon, label" ../>
Например, мне нужно заменить значок и метку. Удачи!
Ответ 2
Я исправил ту же проблему. Решение для меня:
- добавьте строку
xmlns:tools="http://schemas.android.com/tools"
в тег манифеста
- добавить
tools:replace=..
в тег манифеста
- переместить
android:label=...
в тег манифеста
Пример:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:replace="allowBackup, label"
android:allowBackup="false"
android:label="@string/all_app_name"/>
Ответ 3
Попробуйте переупорядочить ваши зависимости в файле gradle. Мне пришлось переместить библиотеку с нарушением списка вниз, а затем она сработала.
Ответ 4
Я просто испытал такое же поведение tools:replace=...
, как описано OP.
Оказалось, что основная причина для tools:replace
игнорируется манифестным слиянием - это ошибка, описанная здесь здесь. В основном это означает, что если в вашем проекте есть библиотека, содержащая манифест с <application ...>
node, содержащий атрибут tools:ignore=...
, может случиться, что атрибут tools:replace=...
в манифесте вашего основного модуля будет проигнорирован.
Трудная точка здесь в том, что она может, но не обязательно. В моем случае у меня были две библиотеки, библиотека A с атрибутом tools:ignore=...
, библиотека B с атрибутами, которые должны быть заменены в соответствующих манифестях и атрибут tools:replace=...
в манифесте основного модуля. Если манифест B слился в основной манифест перед манифестом A, все работало так, как ожидалось. В противоположном порядке слияния появляется ошибка.
Порядок, в котором происходят эти слияния, кажется несколько случайным. В моем случае изменение порядка в разделе зависимостей build.gradle
не повлияло, но изменило название аромата.
Таким образом, единственное надежное обходное решение, похоже, состоит в том, чтобы распаковать проблему, вызывающую библиотеку, удалить тег tools:ignore=...
(что не должно быть проблемой, поскольку это подсказка только для lint) и снова упаковать библиотеку.
И голосуйте за исправление ошибки, причины.
Ответ 5
Окончательное рабочее решение для меня (выделено значение в примере кода):
- добавьте строку
xmlns:tools
в тег манифеста
- добавить
tools:replace
в тег приложения
Пример:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pagination.yoga.com.tamiltv"
**xmlns:tools="http://schemas.android.com/tools"**
>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
**tools:replace="android:icon,android:theme"**
>
Ответ 6
Недостающий кусок для меня был такой:
xmlns:tools="http://schemas.android.com/tools"
например:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.your.appid">
Ответ 7
Вы можете заменить их в своем теге приложения Manifest:
<application
tools:replace="android:icon, android:label, android:theme, android:name,android:allowBackup"
android:allowBackup="false"...>
и будет работать на вас.
Ответ 8
ФИКСИРОВАННЫЙ ИТ
УДАЛИТЬ ОШИБКУ, Просто добавьте эти инструменты: replace = "android: icon, android: theme"
в тэг приложения в манифесте,
он работает отлично,
Ответ 9
Вы можете заменить теги в теге Manifest application
:
<application
...
tools:replace="android:label, android:icon, android:theme"/>
и будет работать для вас.
Объяснение
Использование такой зависимости/библиотеки в вашем файле gradle
, который имеет эти метки в теге приложения Manifest, может вызвать эту проблему, и замена их в вашем Manifest
является решением.
Ответ 10
Я получал похожую ошибку в проекте, который я импортировал:
Несколько записей с одним и тем же ключом: android: icon = ЗАМЕНА и инструменты: icon = ЗАМЕНА
Исправлено после изменения строки ниже в теге приложения:
tools:replace="icon, label, theme"
в
tools:replace="android:icon, android:label, android:theme"
Ответ 11
Я также прошел через эту проблему и изменил это:
<application android:debuggable="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:supportsRtl="true" android:allowBackup="false" android:fullBackupOnly="false" android:theme="@style/UnityThemeSelector">
в
<application tools:replace="android:allowBackup" android:debuggable="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:supportsRtl="true" android:allowBackup="false" android:fullBackupOnly="false" android:theme="@style/UnityThemeSelector">
Ответ 12
Следующий хак работает:
- добавьте строку
xmlns:tools="http://schemas.android.com/tools"
в тег манифеста - добавьте
tools:replace="android:icon,android:theme,android:allowBackup,label"
в теге приложения