AAPT2-Kompilierung fehlgeschlagen: Ungültiges Dimen auf Android 3.0 Canary 1

88

Ich spiele mit Instant Apps für Android herum. Ich habe alle richtigen Pakete installiert und bin müde, eine neue Anwendung mit Instant App-Unterstützung zu erstellen (aktiviert das Kontrollkästchen für Instant App, wenn eine neue Anwendung erstellt wird). Das Problem ist, dass ich immer auf ein Problem mit Kompilierungswerkzeugen stoße. Hat jemand anderes dieses Problem und konnte eine Problemumgehung 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: hat sowohl Gradle-4.0-Meilenstein1 als auch 2 ausprobiert
  • Java 1.8 / 1.7
  • Betriebssystem: Windows 10 und Linux Ubuntu 16.4 LTS ausprobiert

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 Ihnen genügend Informationen zur Verfügung gestellt, um das Problem zu beheben. Danke dir.

sposnjak
quelle
4
Um dieses Problem zu umgehen, habe ich derzeit das aapt2 deaktiviert und es funktioniert zum Testen des Builds. Sie können dies tun, indem Sie in Ihrer Datei gradle.properties android.enableAapt2 = false festlegen. Ich denke, es könnte ein Studio-Fehler sein, nicht sicher ...
BruceWayne
Eine andere Lösung ist stackoverflow.com/a/33943562/5125608. Es funktioniert für mich.
Anlijudavid
5
Zu Ihrer Information, der
Infinite Loops

Antworten:

57

Die Problemumgehung besteht darin, Ihren Entwicklungscomputer auf ein Gebietsschema umzustellen, das "." als Dezimalstelle.

Es kann folgendermaßen geändert werden:

Geben Sie hier die Bildbeschreibung ein

Saturov
quelle
6
Das hat bei mir funktioniert. Eine systemweite Anwendung war nicht erforderlich. Ein Neustart von Android-Studio reicht jedoch nicht aus. Sie müssen sich abmelden und erneut anmelden (oder Ihr System neu starten), um die Änderungen für den Gradle-Build zu aktivieren.
Salim
14
Es klappt! Für Linux sollten Sie Folgendes tun: exportiere LC_NUMERIC = "en_US.UTF-8" und starte dann Android Studio in derselben Eingabeaufforderung
sposnjak
17
Ich habe export LC_NUMERIC = "en_US.UTF-8" am Anfang meiner studio.sh hinzugefügt und es funktioniert einwandfrei. Ich würde mein systemweites Gebietsschema sicherlich nicht ändern, nur um einen Fehler zu umgehen.
Rzehan
7
... wat? Es ist verrückt, jemandem zu empfehlen, sein systemweites Gebietsschema nur wegen eines Fehlers in einer App zu ändern. Dies wirkt sich darauf aus, wie Ihr Datum formatiert wird, z. B. in E-Mail-Clients, sogar in der Sprache und so ziemlich allem anderen.
Stephan Henningsen
2
Nun, ich bin an Fenstern. Irgendwelche Vorschläge?
user2520215
106

Nachfolgend sind vier verschiedene Lösungen aufgeführt: A, B, C und D; Wählen Sie eine, die zu Ihnen passt:

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

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

Ich hatte es satt, meine studio.shfür jedes kanarische Update zu patchen , und fand eine bessere Lösung, die diesen Schritt eliminiert. Es funktioniert unter Ubuntu und umfasst lediglich das Erstellen eines .desktop-Starters, der die betreffende Variable für die kranke Umgebung 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 das noch nicht vorhanden ist:

    mkdir -vp ~/.local/share/icons ~/.local/share/applications
  3. Erstellen Sie ein Android Studio 3-Symbol, mit dem sich Ihr Launcher vom Standardsymbol abhebt, und speichern Sie es in ~/.local/share/icons/android-studio-3.png. Oder Sie können die verwenden, die ich gemacht habe, indem Sie ein Stück Käse auf das Original gerieben haben ( ~/opt/android-studio-3/bin/studio.png):

    android-studio-3.png

  4. Erstellen Sie eine Launcher-Datei 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. Machen Sie es ausführbar:

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

Zu ihrem Vergnügen

Aber 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 abzumelden und wieder anzumelden. Wenn jemand weiß, wie man einen erneuten Scan erzwingt, lass es mich wissen!

B) Behebung des Startskripts für Android Studio

Hier ist eine einfache, elegante und semi-permanente Lösung: Ändern Sie das Gebietsschema von Android Studio selbst nur, indem Sie das Startskript ändern:

  1. Bearbeiten Sie studio.shzB ~/opt/android-studio/bin/studio.shoder was auch immer Ihr Installationspfad sein mag.

  2. Fügen Sie irgendwo oben in der Datei, unterhalb #!/bin/shund bevor die ersten Codezeilen angezeigt werden, Folgendes hinzu:

    LC_NUMERIC="en_US.UTF-8".

    Hier ist der obere Teil meiner studio.shVollstä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

Wenn Sie Ihre Android Studio-Installation später aktualisieren, wird festgestellt, dass Sie Änderungen vorgenommen haben studio.sh. Sie sollten das Installationsprogramm die Datei ersetzen lassen und anschließend den Patch wie oben beschrieben erneut ausführen. Starten Sie schließlich Android Studio neu und Sie sind wieder bereit. Die anderen Lösungen sind davon nicht betroffen.

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

Für das gradlewErstellen aus der Shell mit muss auch der Fix angewendet werden. 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 gradlewDatei im Stammverzeichnis des Projekts und fügen Sie 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 Alias ​​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 auf Ubuntu auf diese Weise Bash-Shell-Aliase 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 jetzt anstelle des Aufrufs ./gradlewden neuen Alias gr:

    gr clean assDebug

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

D) APPT2 insgesamt deaktivieren

Persönlich würde ich das nicht tun, aber ich habe es der Vollständigkeit halber hinzugefügt, da es definitiv eine Möglichkeit ist, appt2 dazu zu bringen, keine Fehler mehr zu geben. Fügen Sie diese Zeile zu Ihrem hinzu gradle.properties:android.enableAapt2=false

Stephan Henningsen
quelle
10
Dies scheint eine viel bessere Lösung zu sein als die akzeptierte Antwort
Lelloman
2
Aus irgendeinem Grund funktioniert das bei mir nicht. Ich habe Android Studio 3.0 Canary 3 und nach all dem bleibt das Zusammenführungsproblem bestehen. Mein Gebietsschema ist en_US.UTF-8
vladaman
1
Ich habe gerade auf Kanarienvogel 3 aktualisiert und bin hierher zurückgekommen, um erneut zu kopieren und
einzufügen.
1
@vladaman Dies behebt den offensichtlichen Gleitkomma-Fehler, jedoch ist Android Studio 3.0 Canary 3 immer noch strenger als zuvor, und einige Fehler in Ihren Ressourcendateien, die zuvor akzeptiert wurden, verursachen jetzt einen Zusammenführungsfehler. Beachten Sie, dass ab heute die Vorschau der
Designbibliothek fehlerhaft
1
@Stephan Henningsen ist sich nicht sicher, was ich falsch gemacht haben könnte, obwohl ich tatsächlich das SDK, die Tools und die Bibliotheken in Version 26.X verwende. Ich habe den Fehler bereits selbst behoben, indem ich aapt2 einfach deaktiviert habe, indem ich android.enableAapt2(oder ähnliches) auf falsein eingestellt habe gradle.properties.
Trotzdem
33

Ich habe dieses Problem gelöst, indem ich den gradle.properties-Dateien die folgende Zeile hinzugefügt habe

android.enableAapt2=false
Hoshouns
quelle
2
Ich denke, diese Antwort verdient ihre Erklärung.
ksugiarto
Diese Antwort hat geholfen, aber das Problem nicht gelöst. Schaltet einfach das Gradle-Modul aus, das es verursacht hat. Wenn Sie das aapt2 benötigen, fügen Sie es definitiv export LC_NUMERIC="en_US.UTF-8"zu Ihrem .bashrc hinzu, was für mich wie ein Zauber funktioniert hat
lukassos
1
Was ist mit MAC OS-Benutzern?
HendraWD
Ich entwickle in einer Windows-Umgebung. Welche Änderung benötige ich dafür?
Mehbube Arman
android.enableAapt2 = false ist veraltet und wird bis Ende 2018 entfernt.
XurajB
1

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

Izabela Orlowska
quelle
0

Stellen Sie sicher, dass Sie bei der Verwendung keine Einheiten (dp) hinzufügen format="float"

Ich hatte das gleiche Problem, weil ich mit Android Studio automatisch Dimensionen generiert habe Extract dimen resourceund den Einheitentyp wie folgt 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>

Max
quelle
-6

hinzufügen

maven{
 url 'https://maven.google.com'
}

zu Repositories arbeiten für mich

Romuald DANSOU
quelle
@ EugenPechanec Ja
Romuald DANSOU
Das macht keinen Sinn. Wenn Sie das Repository bei Bedarf vermissen würden, würden Sie nicht so weit kommen, Ressourcen zusammenzuführen. Die Erstellung würde mit fehlenden Abhängigkeiten fehlschlagen. Wenn Sie das Repository nicht benötigen, ändert es nichts, wenn Sie es angeben. OP würde im Build-Prozess nicht so weit kommen, wenn sie die Google Maven Repo-Referenz nicht bereits in ihr Projekt aufgenommen hätten. Ihre Antwort bietet keine Lösung für das vorliegende Problem. Sie müssen auch andere Änderungen vorgenommen haben.
Eugen Pechanec
-6

Erforderliche Bibliotheken für 64-Bit-Computer:

Wenn Sie eine 64-Bit-Version von Ubuntu ausführen, müssen Sie einige 32-Bit-Bibliotheken mit dem folgenden Befehl installieren:

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386

Wenn Sie 64-Bit-Fedora ausführen, lautet der Befehl:

sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686
Linh Nguyễn Thế
quelle
Ich sehe nicht ein, wie die Installation dieser Pakete das Problem im OP beheben sollte. Wie hängt dieses Problem mit einer Deflate-Komprimierungsmethode zusammen? Ich habe lib32z1 nicht einmal selbst installiert und meine Installation funktioniert nach dem Anwenden dieses stackoverflow.com/a/44304075/2412477 ; Ich empfehle jedem, dies zu versuchen, bevor Sie möglicherweise unnötige Pakete installieren.
Stephan Henningsen