54 votes

Android - L'élément interne doit être soit une référence à une ressource, soit vide.

Détails de l'erreur

AGPBI: {"kind":"error","text":"error: \u003citem\u003e inner element must either be a resource reference or empty.","sources":[{"file":"...\\app\\src\\main\\res\\values\\ids.xml","position":{"startLine":2,"startColumn":4,"startOffset":57,"endColumn":61,"endOffset":114}}],"original":"","tool":"AAPT"}
:app:mergeDebugResources
Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
:app:mergeDebugResources FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details.

Dossier de ressources

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv_deviceName" type="id">tv_deviceName</item>
</resources>

Environnement de construction

  • Android Studio 3.1.4
  • minSdkVersion = 21
  • targetSdkVersion = 28
  • compileSdkVersion = 28
  • buildToolsVersion = "28.0.2" (en anglais)

0 votes

Même chose dans mon cas alors je supprime le code du fichier ids.xml . Entrez la description de l'image ici

99voto

Sangeet Suresh Points 1386

Lors de la déclaration de l'id dans les ressources, le corps doit être vide.

<item
    type="id"
    name="id_name" />

Pour plus d'informations, veuillez consulter le lien ci-dessous.

https://developer.Android.com/guide/topics/resources/more-resources#Id

Alors que Oliver Manyasa mentionné, il devrait être comme suit

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv_deviceName" type="id"/>
</resources>

1 votes

Je connais ce bug, si le fichier xml est dans un fichier aar, comment résoudre ce problème ?

0 votes

@yuchangfu vous pouvez remplacer la ressource dans votre fichier pour résoudre ce problème.

21voto

user1134670 Points 31

J'ai eu un problème similaire après la mise à jour vers Android Studio 3.2.1.

L'erreur pointait vers cet élément dans le fichier ids.xml

<item name="mnuActivate" type="id">Activation</item>

Comme mentionné par l'utilisateur Sangeet Suresh je l'ai changé en

<item name="mnuActivate" type="id" />

Cela a réglé le problème.

7 votes

Comment avez-vous modifié le fichier ? Il est régénéré automatiquement.

11voto

Sangam Pandey Points 1

Pour tous les autres qui se grattent encore la tête pour trouver la solution, il s'agit de créer ids.xml à l'intérieur de src/main/res/values avec un contenu similaire à ce qui suit (mais assurez-vous de le mettre à jour avec les identifiants pour lesquels vous voyez des erreurs) :

<?xml version="1.0" ?>
<items>
    <item name="animator" type="id"/>
    <item name="date_picker_day" type="id"/>
    <string name="deleted_key"/>
</items>

Maintenant, Android Studio vous donnera une erreur pour les valeurs explicites et si ces valeurs proviennent d'une bibliothèque que vous utilisez, vous ne pouvez pas faire de changement dans le fichier intermédiaire, donc à la place, changez ici et pendant la fusion de votre code, Android Studio s'en occupe.

6voto

Oliver Manyasa Points 51

Dans votre fichier de ressources, supprimez la balise de fermeture et le corps, c'est-à-dire supprimez "tv_deviceName".

et que votre fichier de ressources soit comme :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv_deviceName" type="id"/>
</resources>

3voto

Pour moi, cela a échoué à cause des nouvelles versions de Gradle. Je suis presque sûr que certains plugins que j'utilise ont des incompatibilités avec la dernière version de Gradle. Je me suis retrouvé avec une construction réussie ayant les versions suivantes :

fichier gradle-wrapper.properties :

distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

fichier build.gradle

 dependencies {
   classpath 'com.android.tools.build:gradle:3.0.1'
 }

EDIT :

Comme nous voulons utiliser les versions 3.2.+ maintenant, ce n'est pas une solution fiable.

Ce que j'ai fini par faire, c'est créer un nouveau fichier ids.xml, et remplacer toutes les valeurs qui étaient en conflit.

Exemple de fichier ids.xml :

<?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item name="cc_card" type="id"/>
        <item name="cc_ccv" type="id"/>
        <item name="cc_entry" type="id"/>
        <item name="cc_entry_internal" type="id"/>
        <item name="cc_exp" type="id"/>
        <item name="cc_form_layout" type="id"/>
        <item name="cc_four_digits" type="id"/>
        <item name="cc_zip" type="id"/>
        <item name="text_helper" type="id"/>
    </resources>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X