Помилка компіляції AAPT2: недійсний розмір на Android 3.0 Canary 1


88

Я бавлюся з миттєвими програмами для Android. Я встановив усі правильні пакети і втомився створювати нову програму з підтримкою миттєвої програми (поставте прапорець біля миттєвої програми під час створення нової програми) Проблема в тому, що я завжди стикаюся з проблемою інструментів компіляції. Хто-небудь ще мав цю проблему і зумів знайти якийсь обхідний шлях.

Моє оточення:

  • 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>

Сподіваюся, я надав вам достатньо інформації для вирішення проблеми. Дякую.


4
Як обхідний шлях для роботи збірки, я наразі вимкнув aapt2, і він працює для тестування збірки ... ви можете це зробити, встановивши android.enableAapt2 = false у вашому файлі gradle.properties. Я думаю, це може бути помилка студії, не впевнений ...
BruceWayne

Іншим рішенням є stackoverflow.com/a/33943562/5125608 Це працює для мене.
anlijudavid

5
Випущено останню збірку канарок FYI, 5, і Google зазначав нижче, що вони все ще мають проблему з цим AAPT2, як показано далі
нескінченні петлі

Відповіді:


57

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

Його можна змінити наступним чином:

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


6
Це спрацювало для мене. Застосовувати загальносистемну не було необхідності. Але перезапустити Android-Studio недостатньо. Вам потрібно вийти і ввійти знову (або перезапустити систему), щоб зробити зміни активними для побудови gradle.
Салім

14
Це працює! Для Linux вам слід зробити: експортувати LC_NUMERIC = "en_US.UTF-8", а потім запустити Android Studio в тому ж
запиті

17
Я додав експорт LC_NUMERIC = "en_US.UTF-8" на початок мого studio.sh, і він працює нормально. Я, звичайно, не міняв би мою локальну систему, просто щоб усунути якусь помилку.
Ржехан

7
... ват? Рекомендувати комусь змінити локальну систему просто через одну помилку в одному додатку - божевільно. Це вплине на форматування дати, наприклад, у поштових клієнтах, навіть на мові та майже на всьому іншому.
Стефан Хеннінгсен,

2
Ну я на вікнах. Будь-які пропозиції?
user2520215

106

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

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

Це лише альтернатива Ubuntu загальному підходу до виправлення Android Studio (див. Нижче). Зверніть увагу, що вам все-таки може знадобитися реалізувати частину про виправлення оболонки , і, можливо, навіть скасувати будь-які зміни, 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 Studio

Примітка щодо оновлення Android Studio або Gradle

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

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

Для побудови з оболонки 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
    

    Зверніть увагу, що таким чином в Ubuntu додаються псевдоніми оболонки bash; якщо ви перебуваєте в іншій ОС, можливо, вам слід додати файл ~ / .bashrc або ~ / .profile.

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

    gr clean assDebug

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

D) Вимкнення APPT2 разом

Особисто я б не робив цього, але додав це для повноти, оскільки це, безумовно, спосіб зробити так, щоб appt2 припинив видавати помилки. Додайте цей рядок до свого gradle.properties:android.enableAapt2=false


10
це здається набагато кращим
обхідним шляхом,

2
Чомусь це у мене не працює. Я отримав Android Studio 3.0 Canary 3, і після встановлення всього цього проблема злиття зберігається. Мій регіон en_US.UTF-8
vladaman

1
Я щойно оновився до canary 3 і повернувся сюди, щоб знову скопіювати вставку, вона все ще працює для мене
lelloman

1
@vladaman Це виправляє очевидну помилку з плаваючою комою, однак Android Studio 3.0 canary 3 все ще суворіший, ніж раніше, а деякі помилки у ваших файлах ресурсів, які там, де раніше було прийнято, тепер спричинять помилку злиття. Зауважте, що на сьогоднішній день попередній перегляд бібліотеки дизайну
виправлено помилками

1
@Stephan Henningsen не впевнений, що я міг зробити неправильно, хоча насправді я використовую SDK, інструменти та бібліотеки у версії 26.X. Я вже виправив помилку сам, просто вимкнувши aapt2, встановивши android.enableAapt2(або подібний) на falseв моєму gradle.properties. Дуже дякую за корисну відповідь :)
Maxr1998

33

Я вирішив цю проблему, додавши наступний рядок до файлів gradle.properties

android.enableAapt2=false

2
Думаю, ця відповідь заслуговує на своє пояснення.
ksugiarto

ця відповідь допомогла, але не вирішила проблему, просто вимикає модуль gradle, який її спричинив, якщо вам потрібен aapt2, тоді однозначно додайте export LC_NUMERIC="en_US.UTF-8"до свого .bashrc, який спрацював для мене як шарм
lukassos

1
а як щодо користувачів ОС MAC?
HendraWD

Я розробляю в середовищі Windows, які зміни мені потрібні для цього?
Mehbube Arman

android.enableAapt2 = false припинено та буде вилучено до кінця 2018 року
XurajB,

1

Цю проблему вирішено в найновішій стабільній версії Android Studio. Оновлення Android Studio до 3.0 має вирішити цю проблему для вас (також не потрібно вимикати AAPT2).


0

Переконайтеся, що ви не додаєте одиниць (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>


-6

додати

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

щоб сховища працювали для мене


@EugenPechanec Так
Ромуальд ДАНСОУ

Це не має жодного сенсу. Якби вам не вистачало сховища, коли вам це було потрібно, ви не дійшли б до об’єднання ресурсів. Збірка не вдалася б із відсутніми залежностями. Якщо вам не потрібне сховище, його вказівка ​​нічого не змінить. OP не зайшов би так далеко в процесі збірки, якщо вони ще не включили репо-посилання google maven у свій проект. Ваша відповідь не забезпечує вирішення проблеми. Ви, мабуть, теж внесли інші зміни.
Євген Печанець

-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

Я не розумію, як встановлення цих пакунків має вирішити проблему, що виникає в OP. Як ця проблема пов’язана з методом стискання дефляту? У мене навіть не встановлено lib32z1, і моя установка працює після застосування цього stackoverflow.com/a/44304075/2412477 ; Я рекомендую будь-кому спробувати це перед установкою потенційно непотрібних пакетів.
Stephan Henningsen,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.