webentwicklung-frage-antwort-db.com.de

AAPT2-Kompilierung fehlgeschlagen: Ungültiger Wert auf Android 3.0 Canary

Ich spiele mit Instant Apps für Android herum. Ich habe alle korrekten Pakete installiert und müde, um eine neue Anwendung mit Instant App-Unterstützung zu erstellen (das Kontrollkästchen für Instant App beim Erstellen einer neuen Anwendung aktiviert). Das Problem ist, dass ich immer ein Problem mit Kompilierwerkzeugen habe. Hat jemand anderes dieses Problem und konnte einen Workaround finden.

Meine Umgebung:

  • Android Studio 3.0 Canary 1
  • SDK kompilieren: 25
  • Build-Tools: "26.0.0 rc2"
  • Gradle Plugin: 3.0.0-alpha1
  • Gradle: versuchte sowohl Gradle-4.0-Meilenstein1 als auch 2
  • Java 1.8/1.7
  • Betriebssystem: versuchte sowohl Windows 10 als auch Linux Ubuntu 16.4 LTS

Der Fehler:

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

Die betreffende Zeile enthält (520):

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

Hoffentlich habe ich genug Informationen zur Verfügung gestellt, um das Problem zu lösen. Vielen Dank.

87
sposnjak

Die Problemumgehung besteht darin, Ihre Entwicklungsmaschine auf ein Gebietsschema umzustellen, das "." Verwendet. als Dezimalzeichen.

Es kann auf folgende Weise geändert werden:

 enter image description here

57
saturov

Nachfolgend werden vier verschiedene Lösungen erwähnt: A, B, C und D; Wählen Sie eine aus, die zu Ihnen passt:

A) Reparieren von Android Studio über die Ubuntu .desktop Launcher-Datei

Dies ist eine reine Ubuntu-Alternative zum allgemeinen Ansatz von Fixing Android Studio (siehe unten). Beachten Sie, dass Sie möglicherweise den Teil über Fixing the Shell implementieren möchten und möglicherweise sogar alle Änderungen an studio.sh rückgängig machen möchten, um diesen Fix vollständig zu bestätigen.

Ich hatte es satt, meinen studio.sh für jedes Kanarien-Update zu patchen. Deshalb habe ich eine bessere Lösung gefunden, die diesen Schritt überflüssig macht. Es funktioniert auf Ubuntu und erfordert einfach das Erstellen eines .desktop-Startprogramms, das die betreffende kritische Umgebungsvariable festlegt.

  1. Notieren Sie sich, wo Ihr Android Studio 3 installiert ist, z. ~/opt/Android-studio-3.

  2. Bereiten Sie Ihr lokales Symbol und Ihr Anwendungsverzeichnis vor, falls noch nicht vorhanden:

    mkdir -vp ~/.local/share/icons ~/.local/share/applications
    
  3. Erstellen Sie ein Android Studio 3-Symbol, das Ihr Startprogramm vom Standardsymbol abhebt, und speichern Sie es in ~/.local/share/icons/Android-studio-3.png. Oder Sie können den von mir hergestellten verwenden, indem Sie ein Stück Käse über das Original reiben (~/opt/Android-studio-3/bin/studio.png):

     Android-studio-3.png

  4. Erstellen Sie eine Launcherdatei für Android Studio 3, indem Sie diese kopieren und in eine Shell einfügen:

    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. Mach es ausführbar:

    chmod +x ~/.local/share/applications/Android-studio-3.desktop
    
  6. Nun zum kniffligen Teil. Idealerweise sollten Sie in der Lage sein, Shorts für Android Studio 3 im Dash zu finden, zu starten und zu erstellen:

 For your pleasure

Ich persönlich habe fast immer Probleme, Ubuntu dazu zu bringen, meine neuen oder geänderten .desktop-Dateien zu erkennen. Eine Lösung besteht darin, sich ab- und wieder anzumelden. Wenn jemand weiß, wie man einen Rescan forciert, lass es mich wissen!

B) Reparieren des Startskripts für Android Studio

Hier ist eine einfache, elegante und semi-permanente Lösung: Ändern Sie das Gebietsschema von Android Studio nur durch Ändern des Startskripts:

  1. Bearbeiten Sie studio.sh, z. ~/opt/Android-studio/bin/studio.sh oder was auch immer Ihr Installationspfad sein mag.

  2. Fügen Sie am oberen Rand der Datei unterhalb von #!/bin/sh und vor den ersten Codezeilen Folgendes hinzu: 

    LC_NUMERIC="en_US.UTF-8"

    Hier ist der obere Teil meines studio.sh zur Vollständigkeit:

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

Ein Hinweis zum Aktualisieren von Android Studio oder Gradle

Bei einem späteren Upgrade Ihrer Android Studio-Installation wird festgestellt, dass Sie studio.sh geändert haben. Sie sollten das Installationsprogramm die Datei ersetzen lassen und anschließend den Patch wie oben beschrieben erneut durchführen. Starten Sie Android Studio neu und Sie sind wieder bereit. Die anderen Lösungen sind davon nicht betroffen.

C) Fixieren der Schale; Gradle, Jenkins, das alles

Das Erstellen aus der Shell mithilfe von gradlew erfordert auch, dass der Fix angewendet wird. Dies betrifft nur die Shell und nicht Android Studio. Wähle eins:

  1. Geben Sie den Fix für jeden Aufruf wie folgt an:

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

  2. Um dies für das Projekt dauerhaft zu machen, bearbeiten Sie die gradlew-Datei im Stammverzeichnis des Projekts und fügen Sie an der Oberseite Folgendes hinzu:

    LC_NUMERIC="en_US.UTF-8"

    Wie hier:

    #!/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. Sie können natürlich auch einen globalen und dauerhaften Fix hinzufügen, indem Sie einen Aliasnamen verwenden: 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
    

    Beachten Sie, dass bash-Shell-Aliase unter Ubuntu hinzugefügt werden. Wenn Sie ein anderes Betriebssystem verwenden, sollten Sie stattdessen an ~/.bashrc oder ~/.profile anhängen.

    Starten Sie dann eine neue Shell und verwenden Sie statt des Aufrufs von ./gradlew den neuen Alias ​​gr:

    gr clean assDebug

Der klare Nachteil von # 2 besteht darin, dass dies manuell auf alle Projekte angewendet werden muss. Der Vorteil, denke ich, ist, dass dies automatisch überschrieben wird, wenn ein neuer Gradlew installiert wird, ähnlich wie studio.sh ersetzt wird. Sie können also testen, ob der Fehler behoben wurde =).

D) APPT2 alle zusammen deaktivieren

Persönlich würde ich das nicht tun, aber ich habe es der Vollständigkeit halber hinzugefügt, da es definitiv ein Weg ist, appt2 dazu zu bringen, Fehler zu machen. Fügen Sie diese Zeile Ihrem gradle.properties hinzu: Android.enableAapt2=false

106

Ich habe dieses Problem durch Hinzufügen der folgenden Zeile zu den Dateien gradle.properties gelöst

Android.enableAapt2=false
33
H.S.H

Dieses Problem wurde im neuesten Android Studio-Stall behoben. Ein Upgrade Ihres Android Studios auf 3.0 sollte dieses Problem für Sie lösen (auch müssen Sie AAPT2 nicht deaktivieren).

1

Stellen Sie sicher, dass Sie keine Einheiten (dp) hinzufügen, wenn Sie format="float" verwenden.

Ich war mit dem gleichen Problem konfrontiert, weil ich Dimensionen mithilfe von Extract dimen resource automatisch mit Android Studio generiert und dabei den Einheitentyp hinzugefügt habe: 

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

Es sollte sein:

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

0
Max