Инструменты: заменить не замену в манифесте Android - программирование
Подтвердить что ты не робот

Инструменты: заменить не замену в манифесте 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
4b9b3361

Ответ 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

Следующий хак работает:

  1. добавьте строку xmlns:tools="http://schemas.android.com/tools" в тег манифеста
  2. добавьте tools:replace="android:icon,android:theme,android:allowBackup,label" в теге приложения