Вопрос или проблема
Я пытаюсь добавить уведомления в свое приложение Flutter и внес изменения в AndroidManifest.xml для разрешений, но получил эту ошибку. Я использую пакет flutter_local_notifications. Я добавил tools:replace=”android:label, как указано в предыдущей ошибке, но получил эту.
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:label="kpop"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<service
android:name="io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingService"
android:exported="true"
tools:replace="android:label">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Указывает Android-тему, которая будет применена к этому Activity, как только
процесс Android будет запущен. Эта тема видна пользователю
во время инициализации пользовательского интерфейса Flutter. После этого эта тема продолжает
определять фон окна за пользовательским интерфейсом Flutter. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Не удаляйте метаданные ниже.
Это используется инструментом Flutter для генерации GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
<!-- Необходимо для запроса активностей, которые могут обрабатывать текст, см.:
https://developer.android.com/training/package-visibility и
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
В частности, это используется движком Flutter в io.flutter.plugin.text.ProcessTextPlugin. -->
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
</intent>
</queries>
</manifest>
И вот ошибка, которую я получаю
C:\Users\prati\repos\kpop\android\app\src\main\AndroidManifest.xml:9:9-16:11 Ошибка:
tools:replace указано в строке:9 для атрибута android:label, но новое значение не указано
C:\Users\prati\repos\kpop\android\app\src\main\AndroidManifest.xml Ошибка:
Проверка не прошла, выходим
FAILURE: Сборка завершилась с исключением.
* Что пошло не так:
Выполнение задачи ':app:processDebugMainManifest' завершилось неудачей.
> Слияние манифеста не удалось с несколькими ошибками, смотрите логи
* Попробуйте:
> Запустите с параметром --stacktrace, чтобы получить трассировку стека.
> Запустите с параметром --info или --debug, чтобы получить больше вывода журнала.
> Запустите с параметром --scan, чтобы получить полные сведения.
* Получите дополнительную помощь на https://help.gradle.org
СБОРКА ПРОВАЛИЛАСЬ за 11 секунд
Запуск задачи Gradle 'assembleDebug'... 12.6 секунд
Ошибка: Задача Gradle assembleDebug завершилась с кодом выхода 1
Я обращался к другим ответам, но получил те же или больше ошибок.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:label="kpop"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<service
android:name="io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
</intent>
</queries>
</manifest>
Попробуйте это, возможно, ошибка вызвана тем, что вы используете атрибут tools:replace в AndroidManifest.xml, не указав правильное новое значение для атрибута android:label.
Ответ или решение
Ошибка "Manifest merger failed with multiple errors" в Flutter, возникающая при попытке добавить уведомления в ваше приложение, может быть вызвана неправильным использованием атрибута tools:replace
в вашем AndroidManifest.xml
. Давайте подробно разберем вашу ситуацию и найдем решение.
Описание проблемы
Как указано в вашем сообщении, вы получили ошибку, связанную с объявлением tools:replace
для атрибута android:label
. Ваша ошибка в строке:
tools:replace specified at line:9 for attribute android:label, but no new value specified
Это указывает на то, что вы пытаетесь заменить значение android:label
, но не указали новое значение для этого атрибута.
Решение
-
Добавление xmlns:tools:
Убедитесь, что пространство именtools
правильно объявлено в корневомmanifest
элементе. Так должно выглядеть ваше объявление:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
-
Использование атрибута tools:replace правильно:
Вам необходимо указать новое значение дляandroid:label
. Чтобы это сделать, измените свой элемент<application>
следующим образом:<application android:label="kpop" android:name="${applicationName}" android:icon="@mipmap/ic_launcher" tools:replace="android:label">
-
Итоговый AndroidManifest.xml:
Вот как вашAndroidManifest.xml
должен выглядеть с учетом вышеприведенных изменений:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:label="kpop" android:name="${applicationName}" android:icon="@mipmap/ic_launcher" tools:replace="android:label"> <service android:name="io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingService" android:exported="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:taskAffinity="" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme"/> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> <queries> <intent> <action android:name="android.intent.action.PROCESS_TEXT"/> <data android:mimeType="text/plain"/> </intent> </queries> </manifest>
Дополнительные рекомендации
- Проверка других ошибок: После внесения изменений, перезапустите сборку приложения, чтобы убедиться, что нет дополнительных ошибок в манифесте.
- Использование плагина: Убедитесь, что версия
flutter_local_notifications
совместима с версиями вашего проекта и другими используемыми плагинами. - Документация: Обратитесь к документации Flutter и официальным руководствам по
flutter_local_notifications
для получения дополнительной информации о настройках.
Теперь ваша конфигурация должна быть правильной, и ошибка манифеста должна исчезнуть. Не забывайте всегда тестировать на разных устройствах и в разных средах для выявления возможных совместимых ошибок.