Я играю с Instant Apps для Android. Я установил все правильные пакеты и устал создавать новое приложение с поддержкой Instant App (при создании нового приложения поставил флажок для Instant App). Проблема в том, что у меня всегда возникают проблемы с инструментами компиляции. Есть ли у кого-нибудь еще эта проблема и смог ли ее найти решение?
Моя среда:
- Android Studio 3.0 Canary 1
- Скомпилировать SDK: 25
- Инструменты сборки: «26.0.0 rc2»
- Плагин Gradle: 3.0.0-alpha1
- Gradle: пробовал как gradle-4.0-milestone1, так и 2
- Java 1.8 / 1.7
- ОС: пробовал как Windows 10, так и Linux Ubuntu 16.4 LTS
Ошибка:
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
Рассматриваемая строка содержит (520):
<item format="float" name="abc_disabled_alpha_material_dark" type="dimen">0.30</item>
Надеюсь, я предоставил вам достаточно информации для решения проблемы. Спасибо.
Ответы:
Обходной путь - переключить вашу машину разработки на локаль, которая использует "." как десятичный знак.
Его можно изменить следующим образом:
источник
Ниже указаны четыре различных решения: A, B, C и D; выберите тот, который вам подходит:
A) Исправление Android Studio через файл запуска Ubuntu .desktop
Это альтернатива только для Ubuntu общему подходу к исправлению Android Studio (см. Ниже). Обратите внимание, что вы все равно можете реализовать часть об Исправлении оболочки и, возможно, даже отменить любые изменения,
studio.sh
чтобы полностью подтвердить это исправление.Мне надоело патчить мой
studio.sh
для каждого обновления канарейки, поэтому я придумал лучшее решение, которое устраняет этот шаг. Он работает в Ubuntu и просто включает в себя создание программы запуска .desktop, которая устанавливает соответствующую переменную среды.Запишите, где установлена ваша Android Studio 3, например
~/opt/android-studio-3
.Подготовьте локальный значок и каталог приложений, если они еще не существуют:
mkdir -vp ~/.local/share/icons ~/.local/share/applications
Создайте значок Android Studio 3, который выделит вашу программу запуска по сравнению со значком по умолчанию, и сохраните его в формате
~/.local/share/icons/android-studio-3.png
. Или вы можете использовать тот, который я сделал, натерев кусок сыра о оригинал (~/opt/android-studio-3/bin/studio.png
):Создайте файл запуска Android Studio 3, скопировав его и вставив в оболочку:
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
Сделайте его исполняемым:
chmod +x ~/.local/share/applications/android-studio-3.desktop
А теперь самое сложное. В идеале вы должны уметь находить, запускать и создавать шорты для Android Studio 3 из Dash:
Но лично у меня почти всегда возникают проблемы с тем, чтобы Ubuntu обнаруживал мои новые или измененные файлы .desktop. Одно из решений - выйти и снова войти. Если кто-нибудь знает, как принудительно выполнить повторное сканирование, дайте мне знать!
Б) Исправление скрипта запуска Android Studio
Вот простое, элегантное и полупостоянное исправление: измените локаль только самой Android Studio, изменив ее сценарий запуска:
Отредактируйте,
studio.sh
например,~/opt/android-studio/bin/studio.sh
или другой путь установки.Где-нибудь в верхней части файла, ниже
#!/bin/sh
и до появления первых строк кода добавьте следующее:LC_NUMERIC="en_US.UTF-8"
.Вот моя верхняя часть
studio.sh
для полноты:#!/bin/sh # # --------------------------------------------------------------------- # Android Studio startup script. # --------------------------------------------------------------------- # LC_NUMERIC="en_US.UTF-8" message() { TITLE="Cannot start Android Studio" ...
Перезагрузите Android Studio
Примечание об обновлении Android Studio или Gradle
Когда вы позже обновите установку Android Studio, она обнаружит, что вы изменили
studio.sh
. Вы должны позволить программе установки заменить файл, а затем снова выполнить исправление, как описано выше. Наконец перезапустите Android Studio, и вы снова будете готовы. На другие решения это не влияет.В) Крепление корпуса; Грейдл, Дженкинс, все это
Построение из оболочки с использованием
gradlew
также требует применения исправления. Это влияет только на оболочку, а не на Android Studio. Выбери один:Либо укажите исправление при каждом вызове следующим образом:
LC_NUMERIC="en_US.UTF-8" ./gradlew clean assDebug
Или, чтобы сделать это постоянным для проекта , отредактируйте
gradlew
файл в корне проекта и где-нибудь вверху добавьте следующее:LC_NUMERIC="en_US.UTF-8"
Как здесь:
#!/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" ...
Или, конечно, вы также можете добавить глобальное и постоянное исправление, используя псевдоним
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
Обратите внимание, как псевдонимы оболочки bash добавляются в Ubuntu; если вы используете другую ОС, возможно, вам следует вместо этого добавить в ~ / .bashrc или ~ / .profile.
Затем запустите новую оболочку и теперь вместо вызова
./gradlew
используйте новый псевдонимgr
:gr clean assDebug
Явным недостатком №2 является то, что его нужно применять ко всем проектам вручную. Преимущество, я думаю, в том, что это будет автоматически перезаписано при установке нового gradlew, как и при
studio.sh
замене, поэтому вы можете проверить, исправлена ли ошибка =)Г) Отключение APPT2 все вместе
Лично я бы этого не делал, но я добавил это для полноты, поскольку это определенно способ заставить appt2 перестать выдавать ошибки. Добавьте эту строку в свой
gradle.properties
:android.enableAapt2=false
источник
android.enableAapt2
(или аналогично)false
в mygradle.properties
. В любом случае большое спасибо за полезный ответ :)Я решил эту проблему, добавив следующую строку в файлы gradle.properties
android.enableAapt2=false
источник
export LC_NUMERIC="en_US.UTF-8"
в свой .bashrc, который работал для меня как шармЭта проблема исправлена в последней стабильной версии Android Studio. Обновление Android Studio до 3.0 должно решить эту проблему для вас (также нет необходимости отключать AAPT2).
источник
Убедитесь, что вы не добавляете никаких единиц (dp) при использовании
format="float"
Я столкнулся с той же проблемой, потому что я автоматически сгенерировал размеры с помощью Android Studio,
Extract dimen resource
и он добавил тип блока, например:<item name="margin_top" type="dimen" format="float">51.75dp</item>
Должен быть:
<item name="margin_top" type="dimen" format="float">51.75</item>
источник
Добавить
maven{ url 'https://maven.google.com' }
чтобы репозитории работали у меня
источник
Необходимые библиотеки для 64-битных машин:
Если вы используете 64-битную версию Ubuntu, вам необходимо установить некоторые 32-битные библиотеки с помощью следующей команды:
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
Если вы используете 64-битную Fedora, команда будет такой:
sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686
источник