web-dev-qa-db-fra.com

Android Erreur manifeste de Studio 3.0: élément inconnu <action> trouvé

AVIS: Veuillez ne pas publier ceci "Android.enableAapt2 = false" comme réponse. C'est pas une solution. Il s'agit simplement d'ignorer l'erreur réelle qui ne pose aucun problème au moment de l'exécution.

La solution était simple, elle vient d'être retirée par erreur balise d'action en dehors d'un filtre d'intention dans le fichier manifeste.

Avoir une application qui était en construction par Android Studio 2.3 très bien. Après la mise à jour de Android Studio 3.0 Stable, cette erreur s'est produite et n'a pas pu générer mon projet.

Voici mon manifeste.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>

Erreur montre cette ligne:

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

Si je commente/supprime cette action, le projet se construit bien mais il est nécessaire pour GCM et je ne peux pas le supprimer.

Lorsque vous voyez les journaux, l’erreur ne se produit pas dans le fichier principal fichier manifeste se produit dans /build/intermediates/manifests/full/debug/AndroidManifest.xml

J'ai essayé de nettoyer, de reconstruire, de désactiver l'exécution instantanée. y-a-t'il une solution?

Les journaux d'erreur:

/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
40
Oğuzhan Döngül

Vous avez une balise égarée. Le nouvel AAPT (AAPT2) génère maintenant une erreur à ce sujet.

À partir de la documentation ici: https://developer.Android.com/studio/build/gradle-plugin-3-0-0-migration.html

Le comportement change lors de l'utilisation de AAPT2


Pour améliorer le traitement des ressources incrémentielles, le plug-in Android 3.0.0 active AAPT2 par défaut. Bien que AAPT2 devrait immédiatement fonctionner avec des projets plus anciens, cette section décrit certains changements de comportement que vous devez connaître.

Hiérarchies d'éléments dans le manifeste Android

Dans les versions précédentes d'AAPT, les éléments imbriqués dans des nœuds incorrects dans le manifeste Android étaient soit ignorés, soit généraient un avertissement. Par exemple, considérons l'exemple suivant:

<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>

Les versions précédentes d'AAPT ignoreraient simplement la balise mal placée. Cependant, avec AAPT2, vous obtenez l'erreur suivante:

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

Pour résoudre le problème, assurez-vous que vos éléments de manifeste sont imbriqués correctement. Pour plus d'informations, lisez Structure du fichier manifeste .

36
Raz

ajoutez ce code dans gradle.properties dans le projet racine:

Android.enableAapt2=false

cela a fonctionné pour moi

root 
| 
|--gradle.properties
16
djsreeraj

Placez le contenu de l'action dans le filtre d'intention comme ci-dessous, conformément à structure de fichier manifeste .

<intent-filter>
        <action Android:name="com.google.Android.c2dm.intent.REGISTRATION" />
 </intent-filter>
2
Tushar Lathiya

Pour résumer et simplifier: vous devez simplement vous concentrer sur votre fichier AndroidManifest.xml principal et vérifier s’il respecte scrupuleusement la séquence, ainsi que l’imbrication des balises XML comme décrit dans https://developer.Android.com/). guide/topics/manifest/manifest-intro.html . Sinon, le IDE ouvrira le fichier AndroidManifest.xml de niveau débogage, affichant de nombreuses erreurs à chaque fois que vous essayez de nettoyer/construire le projet et de vous dérouter!

1
Md. Nazimul Haque

Nous avons la solution à ce problème et la solution est que le service est toujours sous la forme enfant de <Application <service>> lorsque nous écrivons le code en dehors de <Application>, puis un problème se produit. Les services sont la partie enfant de l'application dans Manifest ... d'accord ... ça va marcher ... faites-le

0
Pradeep Sheoran

Il suffit de renommer votre fichier manifeste comme suit: AndroidManifest.xmlold, puis de créer un nouveau fichier XML et de lui donner le nom suivant: AndoridManifest.xml. Ensuite, copiez simplement le contenu de l'ancien fichier après avoir supprimé la ligne avec balise. Construire> Nettoyer le projet, puis à nouveau Exécuter> Application de débogage. Ensuite, le problème sera disparu.

0
Davidy Silalahi

J'ai récemment eu ce correctif sur mon fichier gradle.properties, mais un avertissement indiquant que "L'option 'Android.enableAapt2' est obsolète ..." continue à apparaître et que la solution consiste à le remplacer par la valeur true.

0
Edson Zandamela