여러 개의 덱스 파일은 Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat를 정의합니다.


212

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'
}

1
모든 솔루션을 시도했지만 모두 작동하지 않았습니다. 방금 같은 이름으로 새 프로젝트를 만들고 이전 프로젝트의 모든 파일을 복사했습니다. 그리고 그것은 지금 잘 작동합니다. 도움이 되길 바랍니다.
Sam003

support-v13의 구성 요소 에서이 문제가 발생했습니다. 많은 디버깅을 시도하고 모든 대답을 쓸모없는 시도를 한 후, kotlin을 기존 Java 프로젝트 인 프로젝트에 통합하려고 시도했을 때 소개되었습니다. 나는 kotlin 표준 라이브러리와 다른 kotlin 라이브러리를 제거했으며 괜찮 았습니다. 여전히 kotlin으로 문제를 해결하려고 시도하지만 지금은 일해야합니다. 어떤 정보도 도움이 될 것입니다. 정말로 kotlin을 좋아합니다.
clementiano

답변:


304

종속성 보고서를 생성하려면 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

3
Maven에서 사용할 수없는 .jar 종속성에서 모듈을 검사 / 제외하는 방법이 있습니까? gradle dependencies님이 추가 한 종속성을보고하지 않은 것 같습니다compile files('libs/example.jar')
dbro

3
libs/*.jar공통적 인 모듈에 대한 두 가지 종속성이 있고 아티팩트로 사용할 수 없다고 가정 해 봅시다 . 비슷한 종속성 검사 / 클래스 제외를 수행하는 방법이 있습니까?
dbro

2
@ dbro : 내가 아는 것이 아니라 다시는이 점을 연구하지 않았습니다. 커프를 벗어난 IMHO의 경우, JAR 파일 중 하나 또는 둘 다가 잘못 패키징 된 느낌이 듭니다. 공통 모듈은 자체 JAR에 포함되어야합니다.
CommonsWare

12
./gradlew -q : projectName : 종속성은 나를 위해 일했다
Defuera

15
당신은 당신의 설정해야 : 모듈 의존성에서 모듈을 exlucing 사람들을위한 빠른 팁 compile project(':foo')에를 compile(project(':foo')) { exclude module: 'support-v4' }. 괄호에 유의하십시오.
espinchi

122

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

android {
    dexOptions {
        preDexLibraries = false
    }
}

4
나를 위해 일했다! 이런 식으로하는 데 단점이 있습니까?
배리 갈 리츠 키

@BarrieGalitzky 나는 지금까지 어떤 문제도 발생하지 않았습니다
mike.tihonchik

3
고맙습니다. 문제를 해결하기 위해 완벽하게 작동했습니다! 어쨌든 부작용이 있다고 생각합니다. assembleDebug 작업이 3 배 느려졌습니다!
Marino

dexOptions를 찾을 수 없습니다.
Oliver Dixon

10
이것을 추가 한 후 "번역이 중단되었습니다"라는 오류가 발생합니다. CommonsWare 방법을 시도 해봐야 할 것 같습니다.
DroidHeaven

36

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

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

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

1 단계

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

2 단계

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

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

먼저:

먼저

둘째:

둘째

그대로입니다.

그게 다야.

감사합니다.


33

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

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


3
더 구체적인 지시? "androidDependencies"를 찾을 수 없습니다. Thx
CopperCash

Gradle보기로 이동 한 다음 모든 작업 제목을 찾고 앱 이름을 드릴 다운 한 다음 ": app"을 드릴 다운하면 거기에 "androidDependencies"가 있습니다.
AutoM8R

2
Gradle 뷰는 어디에 있습니까?
Paul Beusterien

4
@PaulBeusterien 창의 맨 오른쪽을 보면 Gradle로 표시된 측면 탭이 있습니다. 고정 된보기를 열려면 클릭하십시오. androidDependencies는 실제로 gradle 작업입니다
JCricket

고맙습니다, 나는 당신의 대답을 쉽게 설명하기 위해 스크린 샷을 게시했습니다.
MBH

11

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'

지원 버전을 동일하게 유지하면 간단한 솔루션이며 제외 모듈이 작동하지 않습니다.
Jay

두 번째 솔루션으로도 해결했습니다! 버터 나이프 버전 8.8.1과 동일하지만 충돌 예 : implementation ( 'com.jakewharton : butterknife : 8.8.1') {모듈 제외 : 'support-compat'} annotationProcessor 'com.jakewharton : butterknife-compiler : 8.8.1'
GFPF

9

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

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

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

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

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

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


감사합니다, 이중 괄호가 없습니다!
Marko

8
exclude module: 'support-v4'

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

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

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


8

나는 같은 문제가 있었고 라이브러리 때문에 내 앱에 너무 많은 메소드가있는 것 같습니다 : http://developer.android.com/tools/building/multidex.html

그것을 해결했다 :

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

추가 오류 : ': app : dexDebug'태스크에 대한 실행에 실패했습니다. > 0이 아닌 종료 값 2로 완료된 명령


1
멀티 덱싱을 사용하면 앱 시작 속도가 느려질 수 있으며 실제로 필요한 경우에만 사용하십시오.
James Goodwin

6

나는이 같은 오류가 있었지만 최근에 v4 사용에서 v13으로 변경했기 때문입니다. 그래서 내가해야 할 일은 프로젝트를 청소하는 것입니다.


1
intellij를 업그레이드 한 후 동일한 오류가 발생하여 프로젝트를 청소하면 문제가 해결되었습니다.
Vlad Spreys

5

레거시 프로젝트에서 동일한 오류가 발생했습니다. 내 잘못은 support-library가 두 번 포함되었다는 것입니다. google-play-services lib에 한 번, 독립형으로 한 번.

이것이 내가 고친 방법입니다.

나쁜 build.gradle :

dependencies {
   compile files('libs/android-support-v4.jar') 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

좋은 build.gradle :

dependencies {
   // compile files('libs/android-support-v4.jar')  // not needed 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

그것이 누군가를 돕기를 바랍니다 :-)


3

나는 사용 com.google.android.gms:play-services-analytics:8.3.0하고 android-support-v13.jar있고 exclude module: 'support-v4'일할 수 없었다 .

나를 위해 일한 android-support-v13것은 android-support-v13.jar파일 대신 인공물 을 사용하는 것이 었습니다 .

즉 대신

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')

}

나는 사용했다

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')

}


3

필자의 경우 버전 불일치 로 인해 문제가 발생했습니다 .

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

해결책은 간단했습니다. 모든 것을 25 버전으로 만드십시오.


3

유사한 덱스 문제 해결 방법

gradle.build에 포함 된 내용 :

compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'

내가 제거하면 문제가 해결되었습니다.

compile files('libs/httpclient-4.2.1.jar') 

내 gradle은 이제 다음과 같습니다.

apply plugin: 'com.android.application'

android {

compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
    applicationId "com.mmm.ll"
    minSdkVersion 16
    targetSdkVersion 24
    useLibrary  'org.apache.http.legacy'
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {

compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

JAR 파일과 컴파일 된 gradle 프로젝트에 중복 이있었습니다.

따라서 동일한 클래스를 가진 종속성 및 jar 파일을 예리하게 찾으십시오.

그리고 중복성을 제거하십시오.
이것은 나를 위해 일했습니다.


2

Eclipse 에서 프로젝트를 가져온 경우 .

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

Eclipse 프로젝트를 Android 스튜디오로 가져온 후 직면 한 시나리오.

도움이 되었기를 바랍니다..


2

이것은 성가신 문제이며 근본 사례를 찾는 데 시간이 걸릴 수 있습니다. 진행해야하는 방법은 @CommonsWare 답변입니다.

최근 에이 문제에 직면하여 해결하기가 어렵다는 것을 알았습니다.

내 문제는 build.gradle에 "+"버전으로 라이브러리를 포함시키는 것이 었습니다. 최신 버전의 라이브러리에는 이전 덱스 및 뱅 중 하나가 포함되어 있습니다.

이전 버전의 라이브러리로 되돌려 서 해결했습니다.

androidDependencies를 실행하고 실제로 일어나는 일을 보는 것이 좋습니다. 빌드 폴더에서 검색하는 것도 좋습니다.

무엇보다도 Android Studio 2.2 는이 문제를 추적 할 수있는 빌드 기능을 제공합니다.

행복한 코딩 녀석들


2

Android Studio에서 build.gradle (프로젝트 및 모듈 build.gradle 파일 모두 확인)로 이동하여 중복 종속성을 검색하십시오.

프로젝트에 필요하지 않은 것을 삭제하십시오.


2

Gradle 캐시에서 모든 파일을 삭제하면 문제가 해결되었습니다.

Linux에서 :

rm -rf ~/.gradle/caches/*

1

종속성에서 'com.android.support:support-v4:18.0.+'컴파일을 제거하고 작동합니다.


2
이것은 의견이거나 다른 방식으로 설명해야합니다.
Anirudh Sharma

1

반응 형 네이티브 프로젝트의 문제를 간단히 추가하여 해결할 수있었습니다.

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

내 android \ app \ build.gradle 파일의 끝에


0

마지막으로 모듈 gradle 파일에서 이러한 속성을 수정하여 해결했습니다.

  1. compileSdkVersion 25
  2. targetSdk 버전 25
  3. 'com.android.support:appcompat-v7:+'컴파일
  4. 'com.android.support:recyclerview-v7:+'컴파일

0

react-native-palette내 프로젝트에 추가 할 때도 같은 문제가 발생 했습니다. 여기에 종속성 트리가 있습니다.

./gradlew app:dependencies
+--- project :react-native-palette
|    +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1
|    |    |    \--- com.android.support:support-v4:23.0.1
|    |    |         \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
|    \--- com.android.support:palette-v7:24.+ -> 24.2.1
|         +--- com.android.support:support-compat:24.2.1
|         |    \--- com.android.support:support-annotations:24.2.1
|         \--- com.android.support:support-core-utils:24.2.1
|              \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)

에서 많은 솔루션을 시도했지만에서 com.android.support:appcompat버전을 변경할 때까지 문제를 해결할 수 없었습니다 android/app/build.gradle.

dependencies {
    compile project(':react-native-palette')
    compile project(':react-native-image-picker')
    compile project(':react-native-camera')
    compile fileTree(dir: "libs", include: ["*.jar"])
    // compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.android.support:appcompat-v7:24.2.1"
    compile "com.facebook.react:react-native:+"
}

여러 항목이 큰 문제가 아닌 것 같습니다. 버전이 일치하지 않습니다.


0

compile file('...')minSdkVersion을 21로 늘리고 멀티 덱스를 활성화 하여 충돌을 일으켰습니다. 그것이 최선의 해결책인지 확실하지 않지만 내 경우에 효과를 발휘할 수있는 유일한 방법입니다.

참고 : 옵션을 사용할 수 없도록 조항을 compile file('...')넣을 수없는 것 같습니다 exclude.


0

같은 문제가 발생하여 솔루션이 지원 버전 '27. + '(27.1.0)을 '27 .0.1'로 변경합니다.


0

나는 같은 문제가 있었다. 내 프로젝트에서 다음과 같은 종속성이있었습니다.

  • appcompat-v7
  • 안드로이드 지원 -v13

레거시 이유로 appcompat는 Google Maven 저장소에서 가져 왔지만 android-support는 로컬 .jar입니다.

이것을 알아 내고이 로컬 참조를 maven 참조로 바꾸면 빌드 문제가 해결되었습니다.

내 app / build.gradle의 차이점은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오


0

이것을 project.properties에 추가하여 모든 문제를 해결했습니다.

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0

0

다음과 같은 오류가 발생했습니다

태스크 ': app : transformDexArchiveWithDexMergerForDebug'에 대한 실행이 실패했습니다.

com.android.build.api.transform.TransformException : com.android.dex.DexException : 여러 덱스 파일이 Landroid / support / constraint / ConstraintSet $ ​​1을 정의 함

수정 : 빌드-> 프로젝트 정리로 이동하십시오.


안녕하세요 스택 오버플로에 오신 것을 환영합니다. 그러나 이미 24 개의 답변이있는 것 외에는 ashishduh가 이미 깨끗한 건물을 제공 한 것으로 답변을 반복하지 마십시오. 감사!
Elletlar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.