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:
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.
Nachfolgend werden vier verschiedene Lösungen erwähnt: A, B, C und D; Wählen Sie eine aus, die zu Ihnen passt:
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.
Notieren Sie sich, wo Ihr Android Studio 3 installiert ist, z. ~/opt/Android-studio-3
.
Bereiten Sie Ihr lokales Symbol und Ihr Anwendungsverzeichnis vor, falls noch nicht vorhanden:
mkdir -vp ~/.local/share/icons ~/.local/share/applications
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
):
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
Mach es ausführbar:
chmod +x ~/.local/share/applications/Android-studio-3.desktop
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:
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!
Hier ist eine einfache, elegante und semi-permanente Lösung: Ändern Sie das Gebietsschema von Android Studio nur durch Ändern des Startskripts:
Bearbeiten Sie studio.sh
, z. ~/opt/Android-studio/bin/studio.sh
oder was auch immer Ihr Installationspfad sein mag.
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"
...
Starten Sie Android Studio neu
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.
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:
Geben Sie den Fix für jeden Aufruf wie folgt an:
LC_NUMERIC="en_US.UTF-8" ./gradlew clean assDebug
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"
...
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 =).
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
Ich habe dieses Problem durch Hinzufügen der folgenden Zeile zu den Dateien gradle.properties gelöst
Android.enableAapt2=false
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).
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>