Не удалось выполнить компиляцию AAPT2: неверный размер на Android 3.0 Canary 1

Я играю с 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>

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

Ответ 1

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

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

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

Ответ 2

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

A) Исправление Android Studio с помощью Ubuntu.desktop launcher file

Это альтернатива 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.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. Одним из решений является выход из системы и повторный вход. Если кто-нибудь знает, как заставить повторное сканирование, пожалуйста, дайте мне знать!

B) Исправление запуска Android Studio script

Здесь простое, элегантное и полупостоятельное исправление: измените локаль самой Android-студии, изменив ее запуск script:

  • Изменить 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, и вы снова будете готовы. Другие решения не зависят от этого.

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

Построение из оболочки с помощью 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
    

    Обратите внимание, что в Ubuntu добавлены псевдонимы оболочки bash; если вы находитесь на другой ОС, возможно, вам следует добавить в ~/.bashrc или ~/.profile.

    Затем запустите новую оболочку и теперь вместо вызова ./gradlew используйте новый псевдоним gr:

    gr clean assDebug

Очевидным недостатком № 2 является то, что это нужно применять ко всем проектам вручную. Преимущество, я думаю, в том, что это будет автоматически перезаписано при установке нового gradlew, так же как studio.sh заменяется, поэтому вы можете проверить, исправлена ​​ли ошибка =)

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

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

Ответ 3

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

android.enableAapt2=false

Ответ 4

Добавление android.enableAapt2 = false в gradle.properties работал у меня.

Ответ 5

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

Ответ 6

Необходимые библиотеки для 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

Ответ 7

добавить

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

для хранилищ для меня