AAPT2 컴파일 실패 : Android 3.0 Canary 1에서 유효하지 않은 치수


88

Android 용 인스턴트 앱을 가지고 놀고 있는데 올바른 패키지를 모두 설치했고 인스턴트 앱 지원이 포함 된 새 애플리케이션을 만드는 데 지쳤습니다 (새 애플리케이션을 만들 때 인스턴트 앱 확인란을 선택 함). 문제는 항상 컴파일 도구에 문제가 있다는 것입니다. 다른 사람이이 문제를 가지고 있고 해결 방법을 찾을 수 있습니까?

내 환경 :

  • 안드로이드 스튜디오 3.0 카나리아 1
  • SDK 컴파일 : 25
  • 빌드 도구 : "26.0.0 rc2"
  • Gradle 플러그인 : 3.0.0-alpha1
  • Gradle : gradle-4.0-milestone1 및 2를 모두 시도했습니다.
  • 자바 1.8 / 1.7
  • OS : 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를 비활성화했으며 빌드 테스트를 위해 작동합니다. gradle.properties 파일에서 android.enableAapt2 = false를 설정하여 수행 할 수 있습니다. 확실하지 않은 스튜디오 버그 일 수 있다고 생각합니다.
BruceWayne

다른 솔루션은 stackoverflow.com/a/33943562/5125608 입니다.
anlijudavid

5
참고로 최신 카나리아 빌드 5가 출시되었으며 Google은 AAPT2와 같이이 AAPT2에 여전히 문제가 있다고 아래에 언급 했습니다. 점진적 리소스 처리를 가능하게하는 AAPT2를 지속적으로 안정화하고 있습니다. 리소스 처리 문제로 인해 빌드가 실패하면 버그 보고서를 보내주세요. AAPT를 일시적으로 비활성화하려면 gradle.properties 파일에서 android.enableAapt2 = false를 설정합니다. Roboelectric는 AAPT2와 현재 호환되지 않습니다
무한 루프

답변:


57

해결 방법은 개발 머신을 "."를 사용하는 로케일로 전환하는 것입니다. 소수점으로.

다음과 같은 방법으로 변경할 수 있습니다.

여기에 이미지 설명 입력


6
이것은 나를 위해 일했습니다. 시스템 전체에 적용 할 필요가 없습니다. 그러나 Android-Studio를 다시 시작하는 것만으로는 충분하지 않습니다. 로그 아웃했다가 다시 로그인 (또는 시스템을 다시 시작)해야 Gradle 빌드에 대한 변경 사항을 적용 할 수 있습니다.
Salim

14
효과가있다! Linux의 경우 다음을 수행해야합니다. LC_NUMERIC = "en_US.UTF-8"을 내 보낸 다음 동일한 프롬프트에서 Android Studio를 시작합니다
sposnjak

17
내 studio.sh 시작 부분에 export LC_NUMERIC = "en_US.UTF-8"을 추가했는데 제대로 작동합니다. 버그를 해결하기 위해 시스템 전체 로케일을 변경하지는 않을 것입니다.
rzehan

7
... 왓? 하나의 앱에서 하나의 버그로 인해 시스템 전체 로케일을 변경하도록 누군가에게 추천하는 것은 미친 짓입니다. 이메일 클라이언트, 심지어 언어 및 기타 거의 모든 것에서도 날짜 형식이 지정되는 방식에 영향을 미칩니다.
Stephan Henningsen

2
나는 창문에있다. 어떤 제안?
user2520215

106

아래에는 A, B, C 및 D의 가지 솔루션 이 언급되어 있습니다 . 귀하에게 적합한 것을 선택하십시오.

A) Ubuntu .desktop 런처 파일을 통해 Android Studio 수정

이는 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. 이제 까다로운 부분입니다. 이상적으로는 Dash에서 Android Studio 3 용 반바지를 찾고, 시작하고, 만들 수 있어야합니다.

당신의 즐거움을 위해

그러나 개인적으로 저는 거의 항상 Ubuntu가 내 새롭거나 변경된 .desktop 파일을 감지하는 데 어려움을 겪습니다. 한 가지 해결책은 로그 아웃했다가 다시 로그인하는 것입니다. 재검색을 강제하는 방법을 아는 사람이 있으면 알려주세요!

B) Android Studio 시작 스크립트 수정

다음은 쉽고 우아하며 반영구적 인 수정입니다. 시작 스크립트를 수정하여 Android 스튜디오 자체의 로케일 만 변경하세요.

  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를 다시 시작하면 다시 준비됩니다. 다른 솔루션은 이에 영향을받지 않습니다.

C) 쉘 고정; Gradle, Jenkins, 모든 것

를 사용하여 셸에서 빌드 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 셸 별칭이 추가되는 방법입니다. 다른 OS를 사용하고 있다면 ~ / .bashrc 또는 ~ / .profile에 대신 추가해야합니다.

    그런 다음 새 셸을 시작하고 지금 호출 ./gradlew하는 대신 새 별칭을 사용합니다 gr.

    gr clean assDebug

# 2의 분명한 단점은 모든 프로젝트에 수동으로 적용해야한다는 것입니다. 장점은 새 gradlew가 설치 될 때 자동으로 덮어 써진다는 것입니다. studio.sh교체되는 것과 같이 버그가 수정되었는지 테스트 할 수 있습니다 =)

D) APPT2 모두 비활성화

개인적으로 나는 이것을하지 않을 것이지만, appt2가 오류를주는 것을 멈추게하는 방법이기 때문에 완전성을 위해 추가했습니다. 다음 줄을 추가하십시오 gradle.properties.android.enableAapt2=false


10
이 허용 대답보다 훨씬 더 나은 해결 보인다
lelloman

2
어떤 이유로 이것은 나를 위해 작동하지 않습니다. Android Studio 3.0 Canary 3을 얻었고이 모든 설정 후에도 병합 문제가 지속됩니다. 내 로케일은 en_US.UTF-8입니다
vladaman

1
나는 여전히 나를 위해 일하고, 단지 카나리아 3으로 업데이트하고 다시 붙여 복사 다시 여기에 온
lelloman

1
@vladaman 이것은 명백한 부동 소수점 버그를 수정하지만 Android Studio 3.0 카나리아 3은 이전보다 여전히 엄격하며 이전에 수락 된 리소스 파일의 일부 버그로 인해 이제 병합 오류가 발생합니다. 오늘부터 디자인 라이브러리 미리보기는 버그가 있으며 Android Studio 3.0 canary 3에서 빌드되지 않습니다.
aberaud

1
@Stephan Henningsen은 실제로 버전 26.X에서 SDK, 도구 및 라이브러리를 사용하고 있지만 내가 뭘 잘못했는지 확신하지 못했습니다. 이미 단지 설정에 의해 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 OS 사용자는 어떻습니까?
HendraWD

Windows 환경에서 개발 중입니다.이를 위해 어떤 변경이 필요합니까?
Mehbube Arman 2018

android.enableAapt2 = 거짓이 중단되고 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 repo 참조를 아직 포함하지 않은 경우 빌드 프로세스에서이 정도까지 얻을 수 없습니다. 귀하의 답변은 당면한 문제에 대한 해결책을 제공하지 않습니다. 다른 변경도 했어야합니다.
Eugen Pechanec

-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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.