부모 프로젝트에서 참조 라이브러리 (속성/Android/라이브러리)를 사용하고 있습니다. 참조 된 라이브러리는 화면/레이아웃 파일 중 하나에서 색상/투명을 사용합니다. 상위 프로젝트에는 색상/투명도가 있지만 참조 된 라이브러리의 색상/투명도와 다른 값을 사용합니다. 참조 된 라이브러리의 코드는 상위 프로젝트의 값을 사용합니다. android : background = "# 000000"을 통해 참조 된 라이브러리의 값을 특정 값으로 하드 코딩해야했습니다. 참조 된 라이브러리가 동일한 명명 된 속성에 대한 부모 프로젝트의 값을 상속하는 대신 자체 색상 값을 사용하도록하는 방법이 있습니까?부모 프로젝트의 색상 속성과 이름이 같은 경우 참조 된 라이브러리의 색상 속성에 액세스하는 방법
답변
이것은 Android Library Project가 Android SDK에서 작동하도록 설계된 방법입니다. 안드로이드 라이브러리 프로젝트는 직접 제작되지 않으며, 종속 메인 프로젝트가 빌드 될 때 간접적으로 구축되며, SDK가 메인 프로젝트를 컴파일/빌드 할 때 라이브러리 프로젝트의 소스와 리소스가 필터링되어 메인 프로젝트로 병합됩니다. 메인 프로젝트와 라이브러리 프로젝트 모두에서 동일한 리소스 이름이 정의되면 메인 프로젝트의 리소스 이름이 항상 우선 순위를 갖습니다.
체크 아웃 official dev guide는 :
그러나, 라이브러리 프로젝트는 자신의 .apk에 직접 컴파일하고 안드로이드 장치에서 실행되지 않을 수있는 표준 안드로이드 응용 프로그램 프로젝트 다르다. 마찬가지로, 실제 라이브러리와 마찬가지로 라이브러리 프로젝트를 독립형 JAR 파일로 내보낼 수 없습니다. 대신 종속 응용 프로그램에서 라이브러리를 참조하고 해당 응용 프로그램을 빌드하여 간접적으로 라이브러리를 컴파일해야합니다.
라이브러리 프로젝트에 종속 된 응용 프로그램을 빌드하면 SDK 도구가 라이브러리를 임시 JAR 파일로 컴파일하고 기본 프로젝트에서 사용하고 그 결과를 사용하여 .apk를 생성합니다. 리소스 ID가 응용 프로그램과 라이브러리 모두에 정의 된 경우 도구는 응용 프로그램에 선언 된 리소스가 우선 순위를 갖도록하고 라이브러리 프로젝트의 리소스가 응용 프로그램 .apk로 컴파일되지 않도록합니다. 이를 통해 응용 프로그램은 모든 라이브러리에 정의 된 자원 동작 또는 값을 사용하거나 재정의 할 수있는 유연성을 제공합니다.
해결책은 주 프로젝트의 자원 이름을 color/transparent2와 같은 이름으로 변경합니다. 희망이 도움이됩니다.
답변 해 주셔서 감사합니다. 불행히도 내가 듣기를 희망하는 것이 아니라 행동을 설명합니다. 도서관 프로젝트는 와플 하우스 (Waffle House) 가정 쓰레기와 같습니다 : 그들과 함께 살 수 없으며, 그들 없이는 살 수 없습니다. – charlest