Ошибка манифеста Android Studio 3.0: неизвестный элемент <action> найден

ВНИМАНИЕ: Пожалуйста, не отправляйте этот "android.enableAapt2 = false" в качестве ответа. Это не решение. Это просто игнорирование реальной ошибки, которая не вызывает никаких проблем во время выполнения.

Решение было простым, просто удалил ошибочно помещенный тег действия вне фильтра намерения в файле манифеста.

У вас есть приложение, которое было создано Android Studio 2.3 в порядке. После обновления Android Studio 3.0 Стабильный, появилась ошибка и не удалось создать мой проект.

Здесь мой manifest.xml

<application
    android:name=".ApplicationClass"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <!--other unrelated stuff-->

    <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

    <receiver
        android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.xxx.xxx" />
        </intent-filter>
    </receiver>
</application>

Ошибка показывает эту строку:

<action android:name="com.google.android.c2dm.intent.REGISTRATION" />

Если я комментирую/удаляю эту строку тега действия, проект строит отлично, но это необходимо для GCM, и я не могу его удалить.

Как вы видите журналы, ошибка не встречается в основном файле манифеста, встречается в /build/intermediates/manifests/full/ debug/AndroidManifest.xml

Пробная очистка, перестройка, отключение мгновенного запуска. Есть ли какое-либо решение?

Журналы ошибок:

/THE_PROJECT_PATH/app/build/intermediates/manifests/full/debug/AndroidManifest.xml
Error:(99) error: unknown element <action> found.
Error:(99) unknown element <action> found.
Error:java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Execution failed for task ':app:processDebugResources'.
> Failed to execute aapt
Information:BUILD FAILED in 1s
Information:6 errors
Information:0 warnings
Information:See complete output in console

Ответы

Ответ 1

У вас неправильный тег. Новый AAPT (AAPT2) теперь вызывает ошибку.

В документах здесь: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html

Поведение изменяется при использовании AAPT2


Чтобы улучшить инкрементную обработку ресурсов, Android-плагин 3.0.0 включает AAPT2 по умолчанию. Хотя AAPT2 должен немедленно работать со старыми проектами, этот раздел описывает некоторые изменения поведения, о которых вы должны знать.

Иерархии элементов в манифесте Android

В предыдущих версиях AAPT элементы, вложенные в неправильные узлы в манифестах Android, либо игнорируются, либо приводят к предупреждению. Например, рассмотрим следующий пример:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myname.myapplication">
   <application
       ...
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
           <action android:name="android.intent.action.CUSTOM" />
       </activity>
   </application>
</manifest>

Предыдущие версии AAPT просто проигнорировали бы неправильный тег. Однако с AAPT2 вы получаете следующую ошибку:

AndroidManifest.xml:15: error: unknown element <action> found.

Чтобы устранить проблему, убедитесь, что элементы манифеста правильно вложены. Для получения дополнительной информации прочитайте Структура файла манифеста.

Ответ 2

добавьте этот код в gradle.properties в проект root:

android.enableAapt2=false

это сработало для меня

root 
| 
|--gradle.properties

Ответ 3

Даже я столкнулся с той же проблемой, и я получил это решение,

Перейдите к

gradle.properties

напишите приведенный ниже код и синхронизируйте свой проект

android.enableAapt2=false

Пример изображения введите описание изображения здесь

Ответ 4

Чтобы обобщить и упростить: вы должны просто сосредоточиться на своем главном файле AndroidManifest.xml и проверить, строго ли это следует за последовательностью, а также вложенность тегов XML, как описано в https://developer.android.com/guide/topics/manifest/manifest-intro.html. В противном случае IDE откроет AndroidManifest.xml на уровне отладки, демонстрируя много ошибок каждый раз, когда вы пытаетесь очистить/построить проект и запутать вас!