Ошибка компиляции AAPT2: неверный размер на Android 3.0 Canary 1

Я играю с Instant Apps для Android. Я установил все правильные пакеты и устал создавать новое приложение с поддержкой Instant App (установил флажок для Instant App при создании нового приложения). Проблема в том, что я всегда сталкиваюсь с проблемой с инструментами компиляции. У кого-нибудь еще есть эта проблема и смог найти какое-либо обходное решение.

Моя среда:

  • Android Studio 3.0 Канарейка 1
  • Скомпилировать SDK: 25
  • Инструменты сборки: "26.0.0 rc2"
  • Плагин Gradle: 3.0.0-alpha1
  • Gradle: пробовал как gradle-4.0-milestone1, так и 2
  • Ява 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>

Надеюсь, я предоставил вам достаточно информации для решения проблемы. Спасибо.


person sposnjak    schedule 26.05.2017    source источник
comment
В качестве обходного пути для запуска сборки я в настоящее время отключил aapt2, и он работает для тестирования сборки... вы можете сделать это, установив android.enableAapt2=false в файле gradle.properties. Я думаю, что это может быть баг студии, не уверен ...   -  person BruceWayne    schedule 27.05.2017
comment
Другое решение: stackoverflow.com/a/33943562/5125608 Это работает для меня.   -  person anlijudavid    schedule 29.05.2017
comment
К вашему сведению, выпущена последняя сборка canary, 5, и Google упомянул ниже, что у них все еще есть проблема с этим AAPT2, как показано ниже, AAPT2. Мы продолжаем стабилизировать AAPT2, который обеспечивает добавочную обработку ресурсов. Если ваша сборка не удалась из-за проблемы с обработкой ресурсов, отправьте нам отчет об ошибке. Чтобы временно отключить AAPT, установите android.enableAapt2=false в файле gradle.properties. Roboelectric в настоящее время не совместим с AAPT2   -  person Infinite Loops    schedule 04.07.2017


Ответы (7)


Обходной путь — переключить ваш компьютер для разработки на локаль, которая использует «.» как десятичный знак.

Его можно изменить следующим образом:

введите описание изображения здесь

person saturov    schedule 26.05.2017
comment
Это сработало для меня. Применять общесистемные не было необходимости. Но перезапуска Android-Studio недостаточно. Вам нужно выйти и снова войти в систему (или перезагрузить систему), чтобы сделать изменения активными для сборки gradle. - person Salim; 27.05.2017
comment
Оно работает! Для Linux вы должны сделать: экспортировать LC_NUMERIC=en_US.UTF-8, а затем запустить Android Studio в том же приглашении - person sposnjak; 30.05.2017
comment
Я добавил export LC_NUMERIC=en_US.UTF-8 в начало файла studio.sh, и он отлично работает. Я, конечно, не стал бы менять общесистемную локаль только для того, чтобы обойти какую-то ошибку. - person rzehan; 31.05.2017
comment
...Wat? Рекомендовать кому-то изменить общесистемную локаль только из-за одной ошибки в одном приложении — это сумасшествие. Это повлияет на то, как форматируется ваша дата, например. в почтовых клиентах, даже язык и почти все остальное тоже. - person Stephan Henningsen; 01.06.2017
comment
@StephanHenningsen, чего вы ожидали от альфа-релиза? это просто обходной путь, если вам очень нужно использовать эту версию IDE - person saturov; 01.06.2017
comment
Ты не понял; Я не комментирую саму ошибку; Я комментирую обходной путь. - person Stephan Henningsen; 01.06.2017
comment
Ну я на окнах. Какие-либо предложения? - person user2520215; 05.06.2017
comment
Как насчет Mac OSX - person toobsco42; 22.06.2017
comment
@toobsco42 Вы пробовали это stackoverflow.com/a/44430789/2412477? Обратите внимание, что я не на Mac, поэтому я не знаю, сработает ли это для вас. - person Stephan Henningsen; 04.07.2017
comment
Там инструкции для Ubuntu. Я не знаю, какие шаги вам нужно предпринять для Mac OSX - person toobsco42; 04.07.2017
comment
Вы пытались найти studio.sh и изменить его? - person Stephan Henningsen; 07.07.2017
comment
Это все еще происходит в моей AS 3 beta2, и добавление export LC_NUMERIC=en_US.UTF-8 в начало сценария оболочки иногда не работает, вероятно, дело в кеше. - person comodoro; 28.08.2017
comment
метод LC_NUMERIC="en_US.UTF-8" работает и с дженкинсами - person xdevs23; 05.09.2017
comment
Это может показаться глупым, но как мне получить эти настройки в Android Studio 3.2.1? - person samuel owino; 28.12.2018

Ниже перечислены четыре различных решения: A, B, C и D; выберите тот, который подходит вам:

A) Исправление Android Studio через файл запуска Ubuntu .desktop

Это альтернатива общему подходу Исправление Android Studio только для Ubuntu (см. ниже). Обратите внимание, что вы все еще можете реализовать часть, посвященную исправлению оболочки, и, возможно, даже отменить все изменения до studio.sh, чтобы полностью подтвердить это исправление.

Я устал исправлять свой studio.sh для каждого канареечного обновления, поэтому я придумал лучшее решение, исключающее этот шаг. Он работает в Ubuntu и просто включает в себя создание лаунчера .desktop, который устанавливает соответствующую больную переменную среды.

  1. Запишите, где установлена ​​ваша Android Studio 3, например. ~/opt/android-studio-3.

  2. Подготовьте локальный значок и каталог приложений, если они еще не существуют:

    mkdir -vp ~/.local/share/icons ~/.local/share/applications
    
  3. Создайте значок Android Studio 3, который выделит ваш лаунчер из значка по умолчанию, и сохраните его в ~/.local/share/icons/android-studio-3.png. Или вы можете использовать тот, который я сделал, натерев кусок сыра на оригинал (~/opt/android-studio-3/bin/studio.png):

    android-studio-3.png

  4. Создайте файл запуска 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
    
  5. Сделайте его исполняемым:

    chmod +x ~/.local/share/applications/android-studio-3.desktop
    
  6. Теперь о сложной части. В идеале вы должны иметь возможность находить, запускать и создавать шорты для Android Studio 3 из Dash:

Для вашего удовольствия

Но лично у меня почти всегда возникают проблемы с обнаружением Ubuntu моих новых или измененных файлов .desktop. Одно из решений — выйти и снова войти. Если кто-нибудь знает, как заставить пересканировать, пожалуйста, дайте мне знать!

Б) Исправление сценария запуска Android Studio

Вот простое, элегантное и полупостоянное исправление: измените языковой стандарт самой Android Studio, изменив его сценарий запуска:

  1. Изменить studio.sh, например. ~/opt/android-studio/bin/studio.sh или любой другой путь установки.

  2. Где-то вверху файла, ниже #!/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"
    ...
    
  3. Перезапустите Android-студию.

Примечание об обновлении Android Studio или Gradle

Когда вы позже обновите свою установку Android Studio, она обнаружит, что вы изменили файл studio.sh. Вы должны позволить установщику заменить файл, а затем снова выполнить исправление, как описано выше. Наконец, перезапустите Android Studio, и вы снова будете готовы. На другие решения это не влияет.

C) Фиксация оболочки; Грейдл, Дженкинс, все такое

Сборка из оболочки с использованием gradlew также требует применения исправления. Это влияет только на оболочку, а не на Android Studio. Выбери один:

  1. Либо укажите исправление при каждом вызове следующим образом:

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

  2. Или, чтобы сделать это постоянным для проекта, отредактируйте файл 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"
    ...
    
  3. Или, конечно, вы также можете добавить глобальное и постоянное исправление, используя псевдоним 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, поэтому вы можете проверить, исправлена ​​​​ли ошибка =)

D) Отключение APPT2 вместе

Лично я бы не стал этого делать, но я добавил его для полноты картины, поскольку это определенно способ заставить appt2 перестать выдавать ошибки. Добавьте эту строку в свой gradle.properties: android.enableAapt2=false

person Stephan Henningsen    schedule 01.06.2017
comment
это кажется гораздо лучшим обходным путем, чем принятый ответ - person lelloman; 02.06.2017
comment
По какой-то причине это не работает для меня. Я получил Android Studio 3.0 Canary 3, и после установки всего этого проблема слияния сохраняется. Моя локаль en_US.UTF-8 - person vladaman; 05.06.2017
comment
Я только что обновился до canary 3 и вернулся сюда, чтобы снова скопировать и вставить, у меня все еще работает - person lelloman; 06.06.2017
comment
@vladaman Это исправляет очевидную ошибку с плавающей запятой, однако Android Studio 3.0 canary 3 по-прежнему строже, чем раньше, и некоторые ошибки в ваших файлах ресурсов, которые ранее принимались, теперь вызывают ошибку слияния. Обратите внимание, что на сегодняшний день предварительный просмотр библиотеки дизайна содержит ошибки и не будет строиться на Android Studio 3.0 canary 3. - person aberaud; 06.06.2017
comment
Все еще происходит на канарейке 4, и, поскольку я использую библиотеку дизайна, это также происходит с исправлением. - person Maxr1998; 16.06.2017
comment
@Maxr1998 Maxr1998 Это странно ... Я только что обновился до canary 4, применил исправление, и моя Android Studio может успешно перестроить мое приложение с dependencies { ... compile 'com.android.support:design:25.4.0' ... }, потому что оно использует android.support.design.widget.TextInputLayout. Я также могу пересобрать из оболочки, но помните, что исправление должно быть применено и здесь, то есть: LC_NUMERIC="en_US.UTF-8" ./gradlew clean assDebug. - person Stephan Henningsen; 19.06.2017
comment
Я также добавил новый раздел по исправлению оболочки. - person Stephan Henningsen; 19.06.2017
comment
@Stephan Henningsen не уверен, что я мог сделать неправильно, хотя на самом деле я использую SDK, инструменты и библиотеки в версии 26.X. Я уже сам исправил ошибку, просто отключив aapt2, установив android.enableAapt2 (или аналогичный) на false в моем gradle.properties. В любом случае большое спасибо за полезный ответ :) - person Maxr1998; 20.06.2017
comment
Всем пользователям Ubuntu: я добавил новый подход, который, по моему мнению, может быть лучшим. Это работает на моей машине, но дайте мне знать, что вы думаете и есть ли какие-либо ошибки. - person Stephan Henningsen; 03.08.2017
comment
Более простое решение для программы запуска .desktop: пусть Studio сделает большую часть работы за вас. Выполнить Инструменты -> Создать запись рабочего стола, выйти из студии, открыть ~/.local/share/applications/jetbrains-studio.desktop, добавить env LC_NUMERIC="en_US.UTF-8" в начало строки Exec. - person devconsole; 21.08.2017
comment
@devconsole Да, это файл, с которого я начал, но мне нравится, когда все явно, поэтому я переименовал его и изменил имя и значок. Причина этого в том, что у меня одновременно установлены Android Studio 2 и 3, и если вы создадите файл .dekstop из IDE, вы не сможете отличить Android Studio 2 и 3 друг от друга... и один, вероятно, перезапишет файл .desktop другого =\ - person Stephan Henningsen; 21.08.2017
comment
Как исправить это в MacOS, не отключая AAPT2? - person HendraWD; 27.10.2017
comment
@HendraWD У меня нет Macintosh, но я предполагаю, что решение C должно работать на всех unix-подобных системах. Но это не так? Как насчет установки LC_ALL вместо этого? - person Stephan Henningsen; 27.10.2017

Я решил эту проблему, добавив следующую строку в файлы gradle.properties

android.enableAapt2=false
person Hoshouns    schedule 18.07.2017
comment
Я думаю, что этот ответ заслуживает своего объяснения. - person ksugiarto; 18.08.2017
comment
этот ответ помог, но не решает проблему, просто отключает вызвавший ее модуль gradle, если вам нужен aapt2, обязательно добавьте export LC_NUMERIC="en_US.UTF-8" в свой .bashrc, который сработал для меня как шарм - person lukassos; 19.08.2017
comment
как насчет пользователей MAC OS? - person HendraWD; 27.10.2017
comment
Я разрабатываю в среде Windows, какие изменения мне нужны для этого? - person Mehbube Arman; 28.03.2018
comment
android.enableAapt2=false устарело и будет удалено к концу 2018 года. - person XurajB; 27.09.2018

Эта проблема была исправлена ​​в новейшей стабильной версии Android Studio. Обновление Android Studio до версии 3.0 должно решить эту проблему (также нет необходимости отключать AAPT2).

person Izabela Orlowska    schedule 30.10.2017

Убедитесь, что вы не добавляете никаких юнитов (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>

person Max    schedule 04.09.2018

Добавить

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

чтобы репозитории работали у меня

person Romuald DANSOU    schedule 27.05.2017
comment
@EugenPechanec Да - person Romuald DANSOU; 12.06.2017
comment
Это не имеет никакого смысла. Если бы вам не хватало репозитория, когда он вам был нужен, вы бы не дошли до слияния ресурсов. Сборка завершится ошибкой с отсутствующими зависимостями. Если вам не нужен репозиторий, его указание ничего не изменит. OP не зайдет так далеко в процессе сборки, если они еще не включили ссылку на репозиторий Google Maven в свой проект. Ваш ответ не дает решения проблемы. Вы, должно быть, внесли и другие изменения. - person Eugen Pechanec; 12.06.2017

Необходимые библиотеки для 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
person Linh Nguyễn Thế    schedule 08.06.2017
comment
Я не понимаю, как установка этих пакетов должна решить проблему в OP. Как эта проблема связана с методом сжатия deflate? У меня даже не установлен lib32z1, и моя установка работает после применения этого stackoverflow.com/a/44304075/2412477 ; Я рекомендую всем попробовать это перед установкой потенциально ненужных пакетов. - person Stephan Henningsen; 17.06.2017