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:
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.
Ci-dessous sont mentionnées quatre} _ différentes solutions: A, B, C et D; choisissez celui qui vous convient:
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.
Notez l'emplacement d'installation de votre Android Studio 3, par exemple. ~/opt/Android-studio-3
.
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
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
):
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
Rendez-le exécutable:
chmod +x ~/.local/share/applications/Android-studio-3.desktop
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:
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!
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:
Éditez studio.sh
, par exemple. ~/opt/Android-studio/bin/studio.sh
ou quel que soit votre chemin d'installation.
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"
...
Redémarrer Android Studio
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.
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:
Soit spécifier le correctif à chaque appel comme ceci:
LC_NUMERIC="en_US.UTF-8" ./gradlew clean assDebug
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"
...
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é =)
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
J'ai résolu ce problème en ajoutant la ligne suivante aux fichiers gradle.properties
Android.enableAapt2=false
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).
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>