여러 개의 덱스 파일은 Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat를 정의합니다. at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)

gradle assembleDebug명령 줄에서 실행하면 갑자기이 오류가 발생합니다.

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
    at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
    at com.android.dx.command.dexer.Main.run(Main.java:232)
    at com.android.dx.command.dexer.Main.main(Main.java:174)
    at com.android.dx.command.Main.main(Main.java:91)

v4를 grep하면 빌드 폴더 안에 두 개의 파일이 있습니다.

Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches

내 gradle 파일에는 다음 지원 라이브러리 만 포함되어 있습니다.

compile 'com.android.support:support-v13:19.0.0'

어떻게 든 r7 라이브러리가 어떻게 포함되어 있는지에 대해 생각합니다. 나는 실행 gradle clean했고 assembleDebug를 다시 실행할 때 항상 나타납니다.

빌드 디렉토리 내부에서 r7을 grep하면 파일 내부에서 볼 수 있습니다.

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

v13을 포함시키지 않으면 다른 것들이 컴파일되지 않습니다.

그러나 v13에는 v4 지원 라이브러리가 포함되어 있지 않습니까?

Play 서비스 AAR 번들과 v13 라이브러리가 호환되지 않습니까?

gradleplease.appspot.com에서 gradle 파일을 가져 왔습니다.

플레이 서비스를 제거해도 문제가 해결되지 않습니다. 같은 오류.

build.gradle 내부의 종속성 :

 dependencies {


 // Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'

// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}


답변

종속성 보고서를 생성하려면 gradle -q dependencies(또는 gradle -q :projectName:dependencies)을 실행하십시오 . r7다음과 같이 어디에서 왔는지 볼 수 있습니다.

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

그런 다음 exclude지시문을 사용하여 해당 종속성을 차단하십시오. 필자의 경우 CWAC-Camera 라이브러리에서 제공되므로 다음을 사용합니다.

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(두 번째 compile진술은 실제로 원하는 버전을 나타냅니다)

의존성 보고서를 다시 실행하면 다음과 같이 문제가 해결됩니다.

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

답변

안드로이드 블록 내의 build.gradle 파일에 다음 코드 조각을 추가하여 비슷한 오류를 해결했습니다 .

android {
    dexOptions {
        preDexLibraries = false
    }
}

답변

그림은 천 단어의 가치가 있기 때문에

나와 같은 초보자들과 함께이 작업을보다 쉽고 빠르게 수행 할 수 있습니다. 이것은 나를 위해 일한 @ edsappfactory.com 에 의해 게시 된 답변을 보여주는 스크린 샷입니다 .

먼저 Androidstudio의 오른쪽에있는 Gradle보기를 열고 앱 항목으로 이동 TasksAndroid다음 마우스 오른쪽 버튼을 클릭하고 androidDependencies다음을 선택하십시오 Run.

두 번째로 다음과 같이 보일 것입니다.

내가 이것을 게시 한 주된 이유는 gradle작업을 어디에서 실행 할지 또는 위에 게시 된 명령 을 쉽게 알 수 없기 때문 입니다. 그래서 여기에서도 그것들을 표현할 수 있습니다.

gradle 명령을 실행하려면 다음을 수행하십시오.

먼저:

둘째:

그대로입니다.

그게 다야.

감사합니다.


답변

또한 Android Studio Gradle보기로 이동하여 대상 “androidDependencies”를 선택하여 Android 종속성을 볼 수 있습니다.

팁 하나 더 : 프로젝트와 관련 모듈 / 라이브러리 프로젝트의 libs 폴더에서 v4 지원 라이브러리를 제거 할 때까지이 문제가 발생했습니다.


답변

ButterKnife 8.5.1로 업그레이드 할 때이 오류가 발생하기 시작했습니다. 여기에 다른 답변들 중 어느 것도 나를 위해 일하지 않았습니다.

나는 gradle -q :app:dependencies나무를 보았고 충돌을 발견 할 때까지 jar 파일을 살펴 보았습니다. 충돌은 butterknife의 종속성에 com.android.support:support-compat:25.1.0접근성 클래스 버전과 클래스 com.android.support:support-v4:23.1.1가 포함되어 있다는 것입니다.

종속성을 다음과 같이 변경하여 해결했습니다.

compile 'com.jakewharton:butterknife:8.5.1'

이에:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

지금까지 ButterKnife의 작동에는 영향을 미치지 않는 것 같습니다.

편집 : ButterKnife와 일치하도록 내 안드로이드 지원 라이브러리를 업그레이드하는 더 나은 솔루션이 있습니다.

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'

답변

CommonsWare 의 답변 을 안드로이드 라이브러리 프로젝트에 적용 할 수 없다는 것을 알고 있다면 여기에 해결해야 할 스 니펫이 있습니다.

컴파일 (project ( ‘: yourAndroidLibrary’)) {모듈 제외 : ‘support-v13’}

당신은 문제를 찾을 수 있습니다

지원되지 않는 Gradle DSL 메소드가 발견되었습니다 : ‘exclude ()’

compile project ( ‘: yourAndroidLibrary’) 를 사용하는 경우 {모듈 제외 : ‘support-v13’}

차이점은 “project” 앞 의 팔찌 “(““) 입니다.


답변

exclude module: 'support-v4'

프로젝트 의존성으로 작동하지 않으면 다음과 같은 구문을 사용하는 것이 유일한 방법입니다.

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

여기서 : Android-SDK는 프로젝트 이름입니다.