2011-08-07 3 views
0

둘 이상의 프로젝트 (주 또는 라이브러리)가 동일한 리소스를 정의하는 경우 Android 라이브러리를 사용할 때 우선 순위가 높은 프로젝트의 복사본이 사용되어 이전 복사본을 대체합니다.라이브러리 이름 충돌을 피하기위한 사용자 빌드 스크립트?

재사용 가능한 라이브러리를 작성할 때 이것은 충돌을 피하기 위해 모든 자원 이름의 접두어를 붙이기 때문에 문제가됩니다. 주제에 대한 자세한 내용은 Android Parcel Project을 참조하십시오.

이제는 컴파일하기 전에 모든 라이브러리의 모든 리소스 이름에 패키지 이름을 붙이는 스크립트를 작성하려고합니다. 이를 위해 나는 생성 된 ant 빌드 스크립트를 사용하여 사용자 정의 단계를 추가하려고합니다.

가능한지 알고 계십니까? 이 문제를 해결할 더 좋은 해결책이 있습니까?

답변

1

가능한지 알고 계십니까?

라이브러리에 대한 소스 코드가있는 경우이 작업을 수행 할 수 있습니다. 리소스 ID를 동적으로 참조하는 모든 장소 (반사, getIdentifier() 등)는 수동으로 조정해야합니다. 그리고 코드를 수정했다면 도서관 저자에게 도움을받을 수 없을 수도 있습니다.

저는 또한 라이브러리 작성자가 향후 라이브러리 버전에 리소스 접두사를 추가하도록 설득하는 데 노력할 것입니다.

+0

저는 플러그 형 "모듈"(각 하나가 Android 라이브러리 임)을 사용하여 확장 가능한 앱을 만들고 있습니다. 그래서 제 경우에는 모듈 작성자에게 반사 등을 사용하지 말 것을 요청할 수 있습니다. 그런 다음 ParcelHelper와 비슷한 것을 만들지 만 ID를 찾을 때 패키지 이름이 자동으로 추가됩니다. 이 방법으로 모듈 개발자는 충돌 문제를 완전히 무시할 수 있습니다. – MasterScrat

+0

모듈 개발자는 Ant 스크립트를 사용하지 않는 한 접두사 자체를 처리 할 수 ​​밖에 없습니다. 결국 그들은 모듈을 테스트해야합니다. – CommonsWare

+0

물론 그렇습니다.하지만 Ant 스크립트를 필수로 만드는 것은 SDK에 문제가되지 않습니다. 나는 접두어를 사용하는 것보다 이렇게 편리하다고 생각합니다. – MasterScrat

관련 문제