Ошибка манифеста Flutter для Android: Не удалось объединить манифест из-за множества ошибок

Вопрос или проблема

Я пытаюсь добавить уведомления в свое приложение 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, но не указали новое значение для этого атрибута.

Решение

  1. Добавление xmlns:tools:
    Убедитесь, что пространство имен tools правильно объявлено в корневом manifest элементе. Так должно выглядеть ваше объявление:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools">
  2. Использование атрибута tools:replace правильно:
    Вам необходимо указать новое значение для android:label. Чтобы это сделать, измените свой элемент <application> следующим образом:

    <application
       android:label="kpop"
       android:name="${applicationName}"
       android:icon="@mipmap/ic_launcher"
       tools:replace="android:label">
  3. Итоговый 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>

Дополнительные рекомендации

  1. Проверка других ошибок: После внесения изменений, перезапустите сборку приложения, чтобы убедиться, что нет дополнительных ошибок в манифесте.
  2. Использование плагина: Убедитесь, что версия flutter_local_notifications совместима с версиями вашего проекта и другими используемыми плагинами.
  3. Документация: Обратитесь к документации Flutter и официальным руководствам по flutter_local_notifications для получения дополнительной информации о настройках.

Теперь ваша конфигурация должна быть правильной, и ошибка манифеста должна исчезнуть. Не забывайте всегда тестировать на разных устройствах и в разных средах для выявления возможных совместимых ошибок.

Оцените материал
Добавить комментарий

Капча загружается...