빌드 타임 PNG 생성에서 다른 리소스에 대한 참조는 지원되지 않습니다


130

AndroidStudio 3.0 / Android Gradle 플러그인 3.0

<vector>
  <path android:fillColor="@color/image_button_disabled"/>
</vector>

이 오류가 발생합니다.

빌드 타임 PNG 생성에서 다른 리소스에 대한 참조는 지원되지 않습니다

문제를 해결할 수 있습니까? 더 이상 사용되지 않는 솔루션입니까?


관련 스레드 -Android Studio를 3.0으로 업데이트했으며이 문제가 발생했습니다 . 솔루션은 정확히 동일하지만.
RBT

답변:


315

API SDK <24를 지원하려면 앱에 다음 줄을 추가하십시오 build.gradle.

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

minSdkVersion이 24 이상인 경우 VectorDrawables가이 API부터 완전히 지원하므로 문제가 자체적으로 해결됩니다.

자세한 내용은 Android 개발자 : 벡터 드로어 블 이전 버전과의 호환성 솔루션 을 참조하십시오.


4
그러나 왜 문제가 발생하고 위의 해결책이 빠른 해결책입니까, 아니면 좋은 전략입니까?
Pranaysharma

@Pranaysharma 자세한 내용은 Android 개발자 : 벡터 드로어 블 이전 버전과의 호환성 솔루션 을 참조하십시오.
PointedEars

1
참고 : useSupportLibrary는 나를 위해 잘못된 솔루션입니다 (최소 SDK 16, 대상 26). 앱 시작시 충돌합니다. 이것을 제거하고 벡터에서 @color를 제거하고 모든 android : fillColor = 조각을 수동으로 검색하고 교체해야했습니다. 실제로 매우 빠릅니다. 10 초가 걸립니다
djdance

이 줄을 어디에 추가합니까?
Roymunson

안드로이드 키 안에 @Roymunson. 이 스레드 자체 에서 Wonil의 답변 을 보십시오 .
RBT

14

리소스를 직접 참조하지 않고 16 진 코드를 사용해야합니다.

<vector
  <path
    android:fillColor="#FFF"/></vector>

1
그것은 회귀 버전입니다 ... 색상을 변경하려면 하나씩 변경할 수 있습니다 ... 컬러 파일에서 참조를 만들고 변경하는 것이 더 쉽습니다.
langme

불행히도 이것이 앱을 작동시키는 유일한 방법이거나 gradle 버전을 다운 그레이드해야합니다.
Oussema Aroua

3
나도 같은 문제가 있습니다. 이전에는 정상적으로 작동하던 기능이 비활성화되는 이유는 무엇입니까? 이게 버그일까요?
joaomgcd

방금 AS3으로 업데이트 했으며이 문제가 발생했습니다. 왜 그 기능이 제거됩니까?
Marty

1
이 해결 방법으로 작동하지만 "오른쪽"대답은 mwa91의 대답 @입니다 추가하는 vectorDrawables.useSupportLibrary = true당신에게 build.gradle.
Sean Barbeau

9

이 오류에 대한 컨텍스트가 조금 더 있습니다.

  • Android 5.0 (API 레벨 21)은 공식적으로 벡터 드로어 블을 지원하는 첫 번째 버전입니다.
  • minSdkVersion을 20 미만으로 사용하면 벡터 드로어 블에 대한 두 가지 솔루션이 있습니다.
    • Android Studio의 Vector Asset Studio는 PNG를 생성합니다. Android Studio 문서를 살펴보십시오 . 그러나 빌드 타임 PNG 생성에서는 다른 리소스에 대한 참조가 지원되지 않습니다.
    • 지원 라이브러리 사용
  • 또는 minSdkVersion에 21 이상을 사용하십시오.

지원 라이브러리의 경우 build.gradle 파일에 명령문을 추가하십시오.

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile 'com.android.support:appcompat-v7:23.2.0'
}

@MikeHanafey 왜 minSdkVersion이 24 여야하는지 의사에게 알려 주시겠습니까? 감사.
Wonil

minSdkVersion이 24로 증가하지 않으면 아래 메시지가 나타납니다. 설명이 없으며, gradle 빌드가 성공할 때까지 단순히 값을 증가 시켜서 찾았습니다. 오류 : java.lang.RuntimeException : java.lang.RuntimeException : ./src/main/res/drawable/ic_selection_right_widen.xml 처리 중 오류 : android : fillColor = "@ color / kb_key_long_press_available"속성을 처리 할 수 ​​없음 : 다른 참조 빌드 시간 PNG 생성에서는 리소스를 지원하지 않습니다. 자세한 내용은 developer.android.com/tools/help/vector-asset-studio.html 을 참조하십시오.
Mike Hanafey

3
@MikeHanafey minSdkVersion은 android : filltype을 사용하는 경우에만 24 여야하며, 때로는 Android Vector Asset이 자동으로 삽입됩니다. 제거하십시오.
Simone

1
@Simone 제안 해 주셔서 감사합니다. 그것은 내 경우의 문제였습니다.
압둘 레만 야와 르 칸

기본값 fillType은 특정 nonZero상황에서만 다릅니다 evenOdd. w3.org/TR/SVG/painting.html#FillRuleProperty
hmac

4

벡터 드로어 블의 fillColor 속성에서 colorReference를 사용하지 말고 헥사 코드를 사용하십시오.

이런 식으로 사용

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
<path
    android:fillColor="#1abc9c"
    android:pathData="M9,11L7,11v2h2v-2zM13,11h-2v2h2v-2zM17,11h-2v2h2v-2zM19,4h-1L18,2h-2v2L8,4L8,2L6,2v2L5,4c-1.11,0 -1.99,0.9 -1.99,2L3,20c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.9,-2 -2,-2zM19,20L5,20L5,9h14v11z"/>

이 대신

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
<path
    android:fillColor="@color/colorPrimary"
    android:pathData="M9,11L7,11v2h2v-2zM13,11h-2v2h2v-2zM17,11h-2v2h2v-2zM19,4h-1L18,2h-2v2L8,4L8,2L6,2v2L5,4c-1.11,0 -1.99,0.9 -1.99,2L3,20c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.9,-2 -2,-2zM19,20L5,20L5,9h14v11z"/>


2
이것은 패치이며 모든 드로어 블을 복제하지 않고 앱을 다시 테마로 만들고 싶고 벡터화를 유지하는 대신 png를 만들고 싶습니다. 사람들은 @ mwa91의 솔루션을 사용해야합니다.
키키와


0

다음을 수행 하여이 문제를 해결할 수있었습니다.

  1. drawable-v21 폴더를 만들고 거기에 변수를 사용하는 모든 drawable xml을 복사하십시오.
  2. 원본 드로어 블 폴더에서 모든 아이콘을 정적 색상으로 변경하십시오.

이렇게하면 컴파일러가 작동합니다


1
API 21은 기본적으로 벡터 드로어 블을 지원하는 Android 5.0 (Lollipop)을 지원하기 때문에 가능합니다. 그러나 이전 버전의 장치에는 적절한 이미지가 없을 수 있습니다. developer.android.com/guide/topics/graphics/…
PointedEars

0

android:fillColor="@color/image_button_disabled"벡터 드로어 블 에이 코드를 사용 하고 있다고 생각합니다 .

// image_button_disabled.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/circular_image_color_pressed" android:state_pressed="true" />
    <item android:color="@color/circular_image_color_normal" />
</selector>

지원되지 않습니다.

그냥 교체하십시오 android:fillColor="#c4ca5e"


0

@ mwa91 까지 추가하려면 answer .

드로어 블의 동적 테마가 필요하지만 레이아웃을 업데이트하고 @ mwa91 응답으로 이동하여 모든 android:src="@drawable/..."속성을로 변경할 시간이없는 경우 app:srcCompat="@drawable/..."언제든지 16 진수 색상 값을 드로어 블에 사용하고 나중에 드로어 블을 ImageView에서 색조를 지정할 수 있습니다.

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/your_drawable"
      android:tint="@color/image_button_disabled"
      />
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.