88 votes

AAPT2 compilation a échoué : dimen invalide sur Android 3.0 Canary 1

Je suis en train d'expérimenter avec les applications instantanées pour Android. J'ai installé tous les packages corrects et j'ai essayé de créer une nouvelle application avec le support des applications instantanées (j'ai coché la case pour les applications instantanées lors de la création de la nouvelle application). Le problème est que je rencontre toujours un problème avec les outils de compilation. Est-ce que quelqu'un d'autre a ce problème et a réussi à trouver une solution de contournement.

Mon environnement :

  • Android Studio 3.0 Canary 1
  • Compile SDK : 25
  • Outils de build : "26.0.0 rc2"
  • Plugin Gradle : 3.0.0-alpha1
  • Gradle : j'ai essayé à la fois gradle-4.0-milestone1 et 2
  • Java 1.8/1.7
  • OS : j'ai essayé à la fois Windows 10 et Linux Ubuntu 16.4 LTS

L'erreur :

Erreur : java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.internal.aapt.AaptException: Échec de la compilation AAPT2 :
aapt2 compile -o /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/res/merged/androidTest/debug /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml
Problèmes :
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:520 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:521 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:568 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:594 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:595 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:597 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:598 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:599 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:600 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:601 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:602 dimen invalide
 - ERREUR : /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:603 dimen invalide
:feature:mergeDebugAndroidTestResources ÉCHEC

La ligne en question contient (520) :

0.30

J'espère avoir fourni suffisamment d'informations pour résoudre le problème. Merci.

4 votes

En tant que solution de contournement pour faire fonctionner la construction, j'ai actuellement désactivé le aapt2 et ça fonctionne pour tester la construction ... vous pouvez le faire en définissant android.enableAapt2=false dans votre fichier gradle.properties. Je pense que cela pourrait être un bug de studio, pas sûr ...

0 votes

Une autre solution est stackoverflow.com/a/33943562/5125608 Cela a fonctionné pour moi.

5 votes

FYI la dernière version canary, 5, est sortie et Google a mentionné ci-dessous qu'ils ont encore un problème avec ce AAPT2 comme suit, AAPT2. Nous continuons à stabiliser AAPT2 qui permet un traitement incrémental des ressources. Si votre construction échoue en raison d'un problème de traitement des ressources, veuillez nous envoyer un rapport de bug. Pour désactiver temporairement AAPT, définissez android.enableAapt2=false dans votre fichier gradle.properties. Roboelectric n'est actuellement pas compatible avec AAPT2

106voto

Voici mentionnées quatre solutions différentes : A, B, C et D ; choisissez celle qui vous convient :

A) Réparation d'Android Studio via le fichier lanceur Ubuntu .desktop

Il s'agit d'une alternative uniquement pour Ubuntu à l'approche générale sur la réparation d'Android Studio (voir ci-dessous). Notez que vous voudrez peut-être toujours implémenter la partie sur la réparation de la shell, et peut-être même revenir sur les modifications apportées à studio.sh pour confirmer complètement cette correction.

J'en ai eu assez de patcher mon studio.sh à chaque mise à jour Canary, alors j'ai trouvé une meilleure solution qui élimine cette étape. Cela fonctionne sur Ubuntu et implique simplement la création d'un lanceur .desktop qui définit la variable d'environnement en question.

  1. Notez où est installé votre Android Studio 3, par exemple ~/opt/android-studio-3.

  2. Préparez votre icône locale et votre répertoire d'applications, au cas où ils n'existeraient pas déjà :

    mkdir -vp ~/.local/share/icons ~/.local/share/applications
  3. Créez une icône Android Studio 3 qui fera ressortir votre lanceur par rapport à l'icône par défaut et enregistrez-la dans ~/.local/share/icons/android-studio-3.png. Ou vous pouvez utiliser celle que j'ai faite en frottant un morceau de fromage sur l'originale (~/opt/android-studio-3/bin/studio.png) :

    android-studio-3.png

  4. Créez un fichier lanceur Android Studio 3 en copiant-collant ceci dans un shell :

    cat <<-EOF > ~/.local/share/applications/android-studio-3.desktop
    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=Android Studio 3
    Icon=android-studio-3
    Exec=env LC_NUMERIC="en_US.UTF-8" opt/android-studio-3/bin/studio.sh "%f"
    Categories=Développement;IDE;
    Terminal=false
    StartupWMClass=jetbrains-studio
    EOF
  5. Rendez-le exécutable :

    chmod +x ~/.local/share/applications/android-studio-3.desktop
  6. Maintenant la partie délicate. Idéalement, vous devriez pouvoir trouver, démarrer et créer des raccourcis pour Android Studio 3 depuis le Dash :

Pour votre plaisir

Mais personnellement, j'ai presque toujours du mal à convaincre Ubuntu de détecter mes fichiers .desktop neufs ou modifiés. Une solution consiste à se déconnecter puis se reconnecter. Si quelqu'un sait comment forcer une nouvelle analyse, faites-le moi savoir !

B) Correction du script de démarrage d'Android Studio

Voici une correction facile, élégante et semi-permanente : modifiez uniquement la locale d'Android Studio en modifiant son script de démarrage :

  1. Modifiez studio.sh par exemple ~/opt/android-studio/bin/studio.sh ou quel que soit votre chemin d'installation.

  2. Quelque part en haut du fichier, en dessous de #!/bin/sh et avant l'apparition des premières lignes de code, ajoutez ceci :

    LC_NUMERIC="en_US.UTF-8".

    Voici la partie haute de mon studio.sh pour plus de complétude :

    #!/bin/sh
    #
    # ---------------------------------------------------------------------
    # Script de démarrage d'Android Studio.
    # ---------------------------------------------------------------------
    #
    
    LC_NUMERIC="en_US.UTF-8"
    
    message()
    {
      TITLE="Ne peut pas démarrer Android Studio"
    ...
  3. Redémarrez Android Studio

Remarque sur la mise à niveau d'Android Studio ou de Gradle

Lorsque vous mettrez plus tard à niveau votre installation d'Android Studio, il détectera que vous avez modifié studio.sh. Vous devriez laisser l'installateur remplacer le fichier, et ensuite effectuer à nouveau le correctif comme décrit ci-dessus. Redémarrez enfin Android Studio, et vous serez prêt à nouveau. Les autres solutions ne sont pas affectées par cela.

C) Réparation de la shell ; Gradle, Jenkins, tout ça

Compiler à partir de la shell en utilisant gradlew nécessite également l'application du correctif. Cela n'affecte que la shell et pas Android Studio. Choisissez-en un :

  1. Spécifiez le correctif à chaque invocation de cette manière :

    LC_NUMERIC="en_US.UTF-8" ./gradlew clean assDebug

  2. Ou pour rendre ceci permanent pour le projet, modifiez le fichier gradlew à la racine du projet et ajoutez ceci quelque part en haut :

    LC_NUMERIC="en_US.UTF-8"

    Comme ici :

    #!/usr/bin/env bash
    
    ################################################################################    
    ##
    ##  Script de démarrage Gradle pour UN*X
    ##
    ################################################################################
    
    LC_NUMERIC="en_US.UTF-8"
    
    # Ajoutez les options JVM par défaut ici. Vous pouvez également...
    DEFAULT_JVM_OPTS=""
    
    APP_NAME="Gradle"
    ...
  3. Ou vous pouvez bien sûr également ajouter un correctif global et permanent en utilisant un alias, gr :

    cat <>~/.bash_aliases
    
    # Correction du bug d'Android Studio 3 Canary https://stackoverflow.com/a/44304075/2412477
    alias gr='LC_NUMERIC="en_US.UTF-8" ./gradlew'
    EOF

    Notez que c'est ainsi que les alias de shell bash sont ajoutés sur Ubuntu ; si vous êtes sur un système d'exploitation différent, vous devriez peut-être ajouter ceci à ~/.bashrc ou ~/.profile à la place.

    Ensuite, démarrez une nouvelle shell et maintenant au lieu d'appeler ./gradlew, utilisez le nouvel alias gr :

    gr clean assDebug

L'inconvénient clair de #2 est que cela doit être appliqué manuellement à tous les projets. L'avantage, je pense, est que cela sera automatiquement écrasé lorsqu'un nouveau gradlew est installé, à l'instar du remplacement de studio.sh

D) Désactivation d'APPT2 entièrement

``

Personnellement, je ne ferais pas cela, mais je l'ai ajouté pour la complétude car c'est certainement une façon d'empêcher appt2 de générer des erreurs. Ajoutez cette ligne à votre gradle.properties : android.enableAapt2=false

``

10 votes

Cela semble être une solution de contournement bien meilleure que la réponse acceptée

2 votes

Pour une raison quelconque, cela ne fonctionne pas pour moi. J'ai Android Studio 3.0 Canary 3 et après avoir tout configuré, le problème de fusion persiste. Mon paramètre régional est en_US.UTF-8

1 votes

Je viens de passer à la version 3 de canary et je suis revenu ici pour recopier, ça fonctionne toujours pour moi

57voto

saturov Points 710

La solution de contournement consiste à basculer votre machine de développement vers une langue qui utilise "." comme marque décimale.

Cela peut être modifié de la manière suivante :

entrer la description de l'image ici

6 votes

Cela a fonctionné pour moi. Appliquer à l'ensemble du système n'était pas nécessaire. Mais redémarrer Android-Studio ne suffit pas. Vous devez vous déconnecter et vous reconnecter (ou redémarrer votre système) pour que les modifications soient actives pour la construction de gradle.

14 votes

Cela fonctionne! Pour Linux, vous devez faire : export LC_NUMERIC="en_US.UTF-8" et ensuite démarrer Android Studio dans le même terminal

17 votes

J'ai ajouté export LC_NUMERIC="en_US.UTF-8" au début de mon studio.sh et cela fonctionne bien. Je ne changerais certainement pas la localisation de mon système juste pour contourner un bug.

33voto

cOcO Points 50

J'ai résolu ce problème en ajoutant la ligne suivante aux fichiers gradle.properties

android.enableAapt2=false

2 votes

Je pense que cette réponse mérite son explication.

0 votes

Cette réponse a aidé mais ne résout pas le problème, elle désactive simplement le module gradle qui l'a causé, si vous avez besoin de l'aapt2, alors ajoutez certainement export LC_NUMERIC="en_US.UTF-8" à votre .bashrc qui a fonctionné comme un charme pour moi

1 votes

Qu'en est-il des utilisateurs de MAC OS ?

1voto

Izabela Orlowska Points 4270

Ce problème a été résolu dans la dernière version stable d'Android Studio. Mettre à jour votre Android Studio vers la version 3.0 devrait résoudre ce problème pour vous (pas besoin de désactiver AAPT2).

1voto

Max Points 6217

Assurez-vous de ne pas ajouter d'unités (dp) lors de l'utilisation de format="float"

Je rencontrais le même problème car j'ai généré automatiquement des dimensions en utilisant Android Studio en utilisant Extraire la ressource dimen et cela a ajouté un type d'unité comme :

51.75dp

Cela devrait être :

51.75

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