web-dev-qa-db-fra.com

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

Je joue avec Instant Apps pour Android.J'ai installé tous les packages appropriés et fatigué de créer une nouvelle application avec le support Instant App (cochez la case Instant App pour créer une nouvelle application). Le problème est que je rencontre toujours un problème avec les outils de compilation. Quelqu'un d'autre at-il ce problème et a-t-il pu trouver une solution de contournement?.

Mon environnement:

  • Android Studio 3.0 Canaries 1
  • Compiler le SDK: 25
  • Outils de construction: "26.0.0 rc2"
  • Gradle plugin: 3.0.0-alpha1
  • Gradle: essayé les deux gradle-4.0-milestone1 et 2
  • Java 1.8/1.7
  • OS: essayé à la fois Windows 10 et Linux Ubuntu 16.4 LTS

L'erreur:

Error: Java.lang.RuntimeException: Java.lang.RuntimeException: com.Android.builder.internal.aapt.AaptException: AAPT2 compile failed:
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
Issues:
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:520 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:521 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:568 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:594 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:595 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:597 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:598 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:599 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:600 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:601 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:602 invalid dimen
 - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:603 invalid dimen
:feature:mergeDebugAndroidTestResources FAILED

La ligne en question contient (520):

<item format="float" name="abc_disabled_alpha_material_dark" type="dimen">0.30</item>

J'espère que je vous ai fourni suffisamment d'informations pour résoudre le problème. Je vous remercie.

87
sposnjak

La solution de contournement consiste à basculer votre ordinateur de développement vers un environnement local qui utilise "." comme une marque décimale.

Il peut être changé de la manière suivante:

 enter image description here

57
saturov

Ci-dessous sont mentionnées quatre} _ différentes solutions: A, B, C et D; choisissez celui qui vous convient:

A) Correction d'Android Studio via le fichier de lancement Ubuntu .desktop

Il s’agit d’une alternative réservée à Ubuntu à l’approche générale sur Correction d’Android Studio (voir ci-dessous). Notez que vous souhaiterez peut-être toujours implémenter la partie relative à Réparation du shell et peut-être même rétablir les modifications apportées à studio.sh pour confirmer entièrement ce correctif.

J'en avais marre de corriger mon studio.sh pour chaque mise à jour de canary, alors j'ai proposé 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 malade en question.

  1. Notez l'emplacement d'installation de 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 permettra à votre lanceur de se distinguer de l'icône par défaut et enregistrez-la dans ~/.local/share/icons/Android-studio-3.png. Ou vous pouvez utiliser celui que j'ai fabriqué en frottant un morceau de fromage sur l'original (~/opt/Android-studio-3/bin/studio.png):

     Android-studio-3.png

  4. Créez un fichier de lancement Android Studio 3 en copiant et collant 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=Development;IDE;
    Terminal=false
    StartupWMClass=jetbrains-studio
    EOF
    
  5. Rendez-le exécutable:

    chmod +x ~/.local/share/applications/Android-studio-3.desktop
    
  6. Maintenant pour la partie la plus délicate. Idéalement, vous devriez pouvoir trouver, démarrer et créer des courts métrages pour Android Studio 3 à partir du tableau de bord:

 For your pleasure

Mais personnellement, j’ai presque toujours du mal à faire en sorte que Ubuntu détecte mes fichiers .desktop nouveaux ou modifiés. Une solution consiste à vous déconnecter et à vous 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 solution simple, élégante et semi-permanente: modifiez uniquement les paramètres régionaux d'Android Studio en modifiant son script de démarrage:

  1. Éditez 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, sous #!/bin/sh et avant que les premières lignes de code apparaissent, ajoutez ceci: 

    LC_NUMERIC="en_US.UTF-8"

    Voici la partie supérieure de mon studio.sh pour compléter:

    #!/bin/sh
    #
    # ---------------------------------------------------------------------
    # Android Studio startup script.
    # ---------------------------------------------------------------------
    #
    
    LC_NUMERIC="en_US.UTF-8"
    
    message()
    {
      TITLE="Cannot start Android Studio"
    ...
    
  3. Redémarrer Android Studio

Une note sur la mise à niveau d'Android Studio ou Gradle

Lors de la mise à niveau ultérieure de votre installation Android Studio, il détectera que vous avez modifié studio.sh. Vous devez laisser le programme d'installation remplacer le fichier, puis effectuer à nouveau le correctif comme décrit ci-dessus. Enfin, redémarrez Android Studio et vous serez prêt à nouveau. Les autres solutions ne sont pas concernées par cela.

C) la fixation de la coque; Gradle, Jenkins, tout ça

Construire à partir du Shell en utilisant gradlew nécessite également l’application du correctif. Cela n'affecte que le shell et pas Android Studio. Choisissez-en un:

  1. Soit spécifier le correctif à chaque appel comme ceci:

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

  2. Ou pour rendre cette tâche permanente pour le projet}, éditez le fichier gradlew à la racine du projet et, quelque part en haut, ajoutez ceci:

    LC_NUMERIC="en_US.UTF-8"

    Comme ici:

    #!/usr/bin/env bash
    
    ################################################################################    
    ##
    ##  Gradle start up script for UN*X
    ##
    ################################################################################
    
    LC_NUMERIC="en_US.UTF-8"
    
    # Add default JVM options here. You can al...
    DEFAULT_JVM_OPTS=""
    
    APP_NAME="Gradle"
    ...
    
  3. Vous pouvez aussi bien sûr ajouter un correctif global et permanent en utilisant un alias, gr:

    cat <<EOF>>~/.bash_aliases
    
    # Fixing Android Studio 3 Canary bug 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 utilisez un système d'exploitation différent, vous devriez peut-être ajouter à ~/.bashrc ou ~/.profile à la place.

    Ensuite, démarrez un nouveau Shell et maintenant, au lieu d’appeler ./gradlew, utilisez le nouvel alias gr:

    gr clean assDebug

L’inconvénient évident du n ° 2 est que cela doit être appliqué manuellement à tous les projets. Je pense que l’avantage, c’est que cela sera automatiquement écrasé lorsqu’un nouveau gradlew sera installé, un peu comme si studio.sh est remplacé, de sorte que vous pourrez tester si le bogue a été corrigé =)

D) Désactiver APPT2 tous ensemble

Personnellement, je ne le ferais pas, mais je l’ai ajouté par souci d’exhaustivité, car c’est définitivement un moyen de faire en sorte que appt2 cesse de donner des erreurs. Ajouter cette ligne à votre gradle.properties: Android.enableAapt2=false

106

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

Android.enableAapt2=false
33
H.S.H

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

1
Izabela Orlowska

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

Je faisais face au même problème parce que je générais automatiquement des dimens à l'aide d'Android Studio à l'aide de Extract dimen resource et qu'il ajoutait un type d'unité tel que: 

<item name="margin_top" type="dimen" format="float">51.75dp</item>

CA devrait etre:

<item name="margin_top" type="dimen" format="float">51.75</item>

0
Max