2013-11-15 2 views
5

'com.android.tools.build:gradle:0.6.+'을 사용하여 안드로이드 응용 프로그램을 만듭니다.Android Gradle 의존성을 관리하는 가장 좋은 방법은

Android dex에는 동일한 라이브러리의 다른 버전이 포함될 수 없다는 것은 알려진 사실입니다. 그러나 Maven 종속성을 사용하고자 할 때 상황을 어떻게 처리 할 것인지는 이미 사용하고있는 라이브러리가 필요하지만 다른 버전 일뿐입니다. 예. 는 build.gradle 파일에 다음 데 :이 오류는 다음과 같은 이유로 발생

UNEXPECTED TOP-LEVEL EXCEPTION: 
    java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/FragmentManager$OnBackStackChangedListener; 
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
    at com.android.dx.dex.file.DexFile.add(DexFile.java:163)... 

가 : http://search.maven.org/remotecontent?filepath=com/github/chrisbanes/bitmapcache/library/2.3/library-2.3.pom이 com.google.android:support-v4

을 필요로

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile 'com.github.chrisbanes.bitmapcache:library:2.3' 
} 

하는 것은 오류 발생 com.android.support:appcompat-v7:+에 이미 com.google.android:support-v4가 포함되어있어 동일한 클래스 파일을 두 번 포함하게됩니다.

지금과 같은 답을 찾고 있어요 : 'libs와'폴더에 사용 개미 다운로드 모든 종속 파일 ('...') 등

변경 포함 주문 olso하지 않는 컴파일 사용 도움.

견고하고 편리한 솔루션을 찾고 있습니다. maven 의존성을 사용하고 위에서 설명한 예외가없는 방법? 아이디어? 얼마나 성숙 안드로이드 개발자가 이것을 관리합니까?

답변

10

:이 문제에 대해 저자에게 통지 또는뿐만 아니라 풀 요청을 생성해야하므로

dependencies { 
    compile 'com.android.support:appcompat-v7:19.0.0' 
    compile ("com.github.chrisbanes.bitmapcache:library:2.3"){ 
     exclude group: 'com.google.android', module: 'support-v4' 
    } 
} 

이 라이브러리를 opensourced된다.

2

문제는 bitmapcache가 지원 라이브러리의 r7 + 버전을 허용하는 대신 지원 라이브러리의 r7이 필요하다는 것입니다. 따라서 appcompat는 bitmapcache의 필수 r7과 충돌하는 최신 (r19)을 가져 오려고 시도합니다.

ActionBarSherlock은 예를 들어 its pom file에 따라 지원 라이브러리의 버전을 지정하지 않으므로 지원 라이브러리 버전과 함께 사용할 수 있습니다.

가장 쉬운 해결책은 bitmapcache가 최신 버전의 지원 라이브러리를 허용하도록 업데이트하는 것입니다. 그렇지 않으면 종속성을 프로젝트의 추가 모듈로 로컬로 다운로드하고 관리해야합니다. 당신은 exclude transitive dependencies을 할 수

+0

그렇다면 올바르게 설명하면 문제가 Maven 저장소에있는 버그이며 Maven POM을 수정하면 문제가 해결 될 것이라고 생각하십니까? –

+0

@ xp-vit - 특정 버전이 필요한 POM에 문제가 있습니다. 예. – ianhanniballake

관련 문제