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

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>

문제를 해결하기 위해 충분한 정보를 제공했기를 바랍니다. 감사합니다.



답변

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

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

여기에 이미지 설명 입력


답변

아래에는 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


답변

gradle.properties 파일에 다음 줄을 추가하여이 문제를 해결했습니다.

android.enableAapt2=false


답변

이 문제는 안정적인 최신 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