Bawię się aplikacjami błyskawicznymi na Androida, zainstalowałem wszystkie poprawne pakiety i byłem zmęczony tworzeniem nowej aplikacji z obsługą aplikacji błyskawicznej (zaznaczone pole dla aplikacji błyskawicznej podczas tworzenia nowej aplikacji). Problem w tym, że zawsze mam problem z narzędziami do kompilacji. Czy ktoś inny ma ten problem i był w stanie znaleźć jakieś obejście.
Moje otoczenie:
- Android Studio 3.0 Canary 1
- Skompiluj SDK: 25
- Narzędzia kompilacji: „26.0.0 rc2”
- Wtyczka Gradle: 3.0.0-alpha1
- Gradle: wypróbowałem oba poziomy gradle-4.0-milestone1 i 2
- Java 1.8 / 1.7
- System operacyjny: wypróbowano zarówno system Windows 10, jak i Linux Ubuntu 16.4 LTS
Błąd:
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
Przedmiotowa linia zawiera (520):
<item format="float" name="abc_disabled_alpha_material_dark" type="dimen">0.30</item>
Mam nadzieję, że dostarczyłem Ci wystarczająco dużo informacji, aby rozwiązać problem. Dziękuję Ci.
Odpowiedzi:
Sposób obejścia problemu polega na przełączeniu maszyny deweloperskiej na ustawienia regionalne, które używają „.” jako znak dziesiętny.
Można to zmienić w następujący sposób:
źródło
Poniżej wymieniono cztery różne rozwiązania: A, B, C i D; wybierz taki, który Ci odpowiada:
A) Naprawianie Android Studio za pośrednictwem pliku uruchamiania Ubuntu .desktop
Jest to tylko dla Ubuntu alternatywa dla ogólnego podejścia do naprawy Android Studio (patrz poniżej). Zwróć uwagę, że nadal możesz chcieć zaimplementować część dotyczącą naprawiania powłoki , a może nawet cofnąć wszelkie modyfikacje, aby
studio.sh
w pełni potwierdzić tę poprawkę.Zmęczyło mnie łatanie mojej
studio.sh
dla każdej aktualizacji kanarka, więc wymyśliłem lepsze rozwiązanie, które eliminuje ten krok. Działa na Ubuntu i po prostu polega na utworzeniu programu uruchamiającego .desktop, który ustawia zmienną środowiskową, o której mowa.Zanotuj, gdzie jest zainstalowane Twoje Android Studio 3, np
~/opt/android-studio-3
.Przygotuj lokalną ikonę i katalog aplikacji, na wypadek gdyby te jeszcze nie istniały:
mkdir -vp ~/.local/share/icons ~/.local/share/applications
Utwórz ikonę Android Studio 3, która wyróżni Twój program uruchamiający na tle domyślnej ikony i zapisz go w
~/.local/share/icons/android-studio-3.png
. Lub możesz użyć tego, który zrobiłem, pocierając kawałek sera o oryginał (~/opt/android-studio-3/bin/studio.png
):Utwórz plik programu uruchamiającego Android Studio 3, kopiując i wklejając go do powłoki:
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
Spraw, aby był wykonywalny:
chmod +x ~/.local/share/applications/android-studio-3.desktop
Teraz trudniejsza część. Idealnie byłoby, gdybyś był w stanie znaleźć, uruchomić i stworzyć krótkie spodenki dla Android Studio 3 z poziomu Dash:
Ale osobiście prawie zawsze mam problem z wykrywaniem przez Ubuntu moich nowych lub zmienionych plików .desktop. Jednym z rozwiązań jest wylogowanie się i ponowne zalogowanie. Jeśli ktoś wie, jak wymusić ponowne skanowanie, daj mi znać!
B) Naprawianie skryptu startowego Android Studio
Oto łatwa, elegancka i półtrwała poprawka: Zmień ustawienia regionalne samego Androida Studio, modyfikując jego skrypt startowy:
Edytuj
studio.sh
np.~/opt/android-studio/bin/studio.sh
Lub jakąkolwiek ścieżkę instalacji.Gdzieś na górze pliku, poniżej
#!/bin/sh
i przed pojawieniem się pierwszych linii kodu, dodaj to:LC_NUMERIC="en_US.UTF-8"
.Oto górna część mojego
studio.sh
dla kompletności:#!/bin/sh # # --------------------------------------------------------------------- # Android Studio startup script. # --------------------------------------------------------------------- # LC_NUMERIC="en_US.UTF-8" message() { TITLE="Cannot start Android Studio" ...
Uruchom ponownie Android Studio
Uwaga dotycząca aktualizacji Android Studio lub Gradle
Kiedy później zaktualizujesz instalację Android Studio, wykryje, że dokonałeś modyfikacji
studio.sh
. Powinieneś pozwolić instalatorowi zastąpić plik, a następnie ponownie wykonać poprawkę, jak opisano powyżej. Na koniec uruchom ponownie Android Studio, a będziesz gotowy ponownie. Nie ma to wpływu na inne rozwiązania.C) Mocowanie powłoki; Gradle, Jenkins i to wszystko
Budowanie ze stanu surowego
gradlew
również wymaga zastosowania poprawki. Dotyczy to tylko powłoki, a nie Android Studio. Wybierz jedno:Albo określ poprawkę przy każdym wywołaniu w następujący sposób:
LC_NUMERIC="en_US.UTF-8" ./gradlew clean assDebug
Lub, aby uczynić to stałym dla projektu , edytuj
gradlew
plik w katalogu głównym projektu i gdzieś na górze dodaj to:LC_NUMERIC="en_US.UTF-8"
Jak tutaj:
#!/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" ...
Lub możesz oczywiście dodać globalną i trwałą poprawkę za pomocą aliasu
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
Zauważ, że w ten sposób aliasy powłoki bash są dodawane w systemie Ubuntu; jeśli korzystasz z innego systemu operacyjnego, być może powinieneś dołączyć do ~ / .bashrc lub ~ / .profile.
Następnie uruchom nową powłokę i zamiast wywoływać
./gradlew
użyj nowego aliasugr
:gr clean assDebug
Wyraźną wadą # 2 jest to, że musi to być stosowane do wszystkich projektów ręcznie. Myślę, że zaletą jest to, że zostanie to automatycznie nadpisane po zainstalowaniu nowego gradlewu, podobnie jak
studio.sh
zostanie zastąpione, więc możesz sprawdzić, czy błąd został naprawiony =)D) Całkowite wyłączenie APPT2
Osobiście nie zrobiłbym tego, ale dodałem to dla kompletności, ponieważ zdecydowanie jest to sposób, aby appt2 przestał dawać błędy. Dodaj tę linię do
gradle.properties
:android.enableAapt2=false
źródło
android.enableAapt2
(lub podobnie)false
w moimgradle.properties
. I tak bardzo dziękuję za pomocną odpowiedź :)Rozwiązałem ten problem, dodając następujący wiersz do plików gradle.properties
android.enableAapt2=false
źródło
export LC_NUMERIC="en_US.UTF-8"
do swojego .bashrc który działał jak urok dla mnieTen problem został rozwiązany w najnowszej stabilnej wersji Android Studio. Aktualizacja Android Studio do 3.0 powinna rozwiązać ten problem (również nie ma potrzeby wyłączania AAPT2).
źródło
Upewnij się, że nie dodajesz żadnych jednostek (dp) podczas używania
format="float"
Miałem ten sam problem, ponieważ automatycznie wygenerowałem wymiary za pomocą Android Studio przy użyciu
Extract dimen resource
i dodałem typ jednostki, taki jak:<item name="margin_top" type="dimen" format="float">51.75dp</item>
Powinno być:
<item name="margin_top" type="dimen" format="float">51.75</item>
źródło
Dodaj
maven{ url 'https://maven.google.com' }
repozytoria działają dla mnie
źródło
Wymagane biblioteki dla maszyn 64-bitowych:
Jeśli używasz 64-bitowej wersji Ubuntu, musisz zainstalować niektóre biblioteki 32-bitowe za pomocą następującego polecenia:
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
Jeśli używasz 64-bitowej Fedory, polecenie brzmi:
sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686
źródło