덱스를 병합 할 수 없습니다


307

Android Studio Beta가 있습니다. 이전 모듈을 컴파일하여 새 프로젝트를 만들었지 만 앱을 시작하려고 할 때 메시지와 함께 시작되지 않았습니다.

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

com.android.builder.dexing.DexArchiveMergerException : 덱스를 병합 할 수 없습니다

그러나이 오류를 해결하는 방법을 모르겠습니다. 나는 이것을 몇 시간 동안 봤지만 성공하지 못했습니다.

내 프로젝트 gradle :

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-beta6'
        classpath "io.realm:realm-gradle-plugin:3.7.1"
        classpath 'com.google.gms:google-services:3.1.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

내 앱 gradle :

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "parad0x.sk.onlyforyou"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
        }
    }
    compileOptions {
        targetCompatibility 1.7
        sourceCompatibility 1.7
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    lintOptions {
        checkReleaseBuilds false
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    //noinspection GradleCompatible
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile project(path: ':loginregisterview')


}

그리고 내 모듈 gradle :

    apply plugin: 'com.android.library'
apply plugin: 'realm-android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.2'
    compile 'com.android.support:support-v4:26.1.0'
    compile 'com.github.bumptech.glide:glide:4.0.0'
    testCompile 'junit:junit:4.12'
    compile project(path: ':parser')

}

내 두 번째 모듈 :

     apply plugin: 'com.android.library'
apply plugin: 'realm-android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    realm {
        syncEnabled = true
    }
    useLibrary 'org.apache.http.legacy'

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile 'junit:junit:4.12'
    //  compile 'com.android.support:appcompat-v7:23.1.0'

    //   compile 'com.fasterxml.jackson.core:jackson-core:2.9.0'
 //   compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.0'
 //   compile 'com.fasterxml.jackson.core:jackson-databind:2.9.0'
    compile 'com.google.code.gson:gson:2.6.2'
}

____________발견_________

두 번째 모듈 (파서)을 가져 오지 않으면 응용 프로그램이 dex에서 충돌하지 않았지만 모듈을 가져 오지 않은 경우 응용 프로그램이 작동하지 않았습니다. : D : D


6
누구나 Android Studio 3.0 Stable 버전에서 동일한 문제가 발생하면 stackoverflow.com/questions/46949761/… 답변을 검토하고 도움이되는지 확인하십시오.
Bhavesh Patadiya

1
나는 같은 문제가 있었고이 페이지에 언급 된 모든 방법을 따랐지만 도움이되지 않았으므로 gradle로 가서 각 라이브러리에서 커서를 잡고 새 버전이 있는지 확인하십시오. 새로운 버전을 가진 사람들은 업데이트하고 gradle을 동기화하고 실행합니다. 효과가있었습니다.
Shahzad Afridi

답변:


293

에서 com.google.android.gms:play-services:11.2.2로 업데이트 할 때 동일한 문제가 발생 했습니다 com.google.android.gms:play-services:11.4.0. 이것은 나를 위해 그것을 해결했다.

  1. 깨끗한
  2. 재건

해당 솔루션의 실제 문제 만 지연시킵니다. 아마도 11.4.0 버전에는 더 적은 방법이 포함되어 있습니다. 아래 답변을 참조하십시오. 다음 의존성에서이 오류가 발생합니다.
itzhar

2
이것은 multiDexEnabled true혼자서하지 않은 내 문제를 해결합니다
유리 Brigance

28
com.google.android.gms : play-services-location : 11.6.0과 동일한 isse ... 이것은 유효한 해결책이 아닙니다
issamux

3
이 솔루션은 Google 분석 라이브러리를 사용하여 호환성 문제가 발생했을 때 효과적이었습니다. AS에서 Android 프로젝트 탐색기 분할 창을 "프로젝트"로 표시하면 "외부 라이브러리"가 표시되어야합니다. 외부 라이브러리를 확장하면 프로젝트를 컴파일하는 데 사용 된 모든 jar 및 모듈이 표시됩니다. 호환되지 않는 모듈 조합을 식별하는 데 도움이됩니다.
angryITguy

3
"compileSdkVersion 26"의 경우 위의 코드가 작동하지 않으면 다음을 시도하십시오.-build.gradle (Module : app)-defaultConfig 범주에서 "multiDexEnabled true"추가 및 마지막 단계 File | 설정 | 빌드, 실행, 배포 | 즉시 실행 및 활성화 / 비활성화
Sux Saxena

325

나는 위의 모든 것을 시도했지만 그들 중 누구도 도움이되지 않습니다. 마지막으로, 나는이 일을 위해 나를 찾습니다 :

app / build.gradle :

android {
    defaultConfig {
       multiDexEnabled true
    }
}

11
감사. 문제는 대부분의 답변이 다시 빌드 할 수없는 다른 소스의 JAR 파일을 포함하지 않는 것이라고 생각합니다. multiDex는 호환되지 않는 코드를 결합 할 수있는 것으로 보입니다.
Brendon Whateley

2
이 솔루션은 나를 위해 일하지만, 또, 명시 적으로 API에 대한 multidex 수 있도록 <= 21 있었다 developer.android.com/studio/build/multidex.html
hamou92을

2
허용 된 답변보다 관련성이 높음에도 불구하고 여전히 "덱스를 병합 할 수 없습니다"라는 메시지가 표시됨
John

13
나를 위해 작동하지 않았다. 이 변경으로 다른 오류가 발생했습니다 : 작업 ': app : transformClassesWithMultidexlistForDebug
Atul

1
그렇습니다 5 시간 동안 나는 완전히 다른 대답과 함께 머물고 있었다. 그러나 어떻게 든 그것이 Multidex 문제라는 것을 깨달았고 여기에 도착했습니다. 나는 사실이었다. 감사 사람
sud007

59

경고에주의하십시오!

때로는 경고 만 제거 하면 오류 가 자동으로 사라집니다. 아래의 특별한 경우를보십시오 :


모듈 수준 build.gradle파일 에 다음 두 가지 종속성이 있습니다.

implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

스튜디오 ( 덱스 병합 문제 외에도) 경고했습니다 .

모든 com.android.support라이브러리는 정확히 동일한 버전 사양을 사용해야합니다 (버전을 혼합하면 런타임 충돌이 발생할 수 있음). 찾을 버전 27.0.2, 21.0.3. 예를 들면 다음 com.android.support:animated-vector-drawable:27.0.2과 같습니다.com.android.support:support-v4:21.0.3

내가 명시 적으로 버전 결정 그래서com.android.support:support-v4 (참조 여기에 대한 자세한 내용은) 두 문제 (경고 및 병합 덱스와 관련된 것) 해결을 :

implementation 'com.android.support:support-v4:27.0.2'  // Added this line (according to above warning message)
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

다른 유사한 상황에 대해서는 아래 주석을 참조하십시오.


1
감사합니다.이 문제가 해결되었습니다. 1.3.4 : androidviewmodel : 원래는 eu.inloop 추가로 발생했다
lsrom

1
정확히, 나는 단지 오류가 더 정확했을 수 있기를 바랍니다.
Amin Keshavarzian

1
고마워 나는 같은 문제가 있었다. v26을 사용하고 SDK 27로 업데이트되어 문제를 해결했습니다.
Johnny

2
이것이 정답이어야합니다. 에 대한 종속성이있는 하나의 라이브러리 (airbnb / epoxy)를 추가 한 후 빌드가 작동을 멈췄 support:design:26.1.0지만 아직 그 종속성이 없었습니다. 내 다른 지원 라이브러리 버전은 27.1.0이었습니다. 버전 support:design과의 종속성을 추가 한 후 27.1.0내 문제가 해결되었습니다.
alashow

2
감사합니다. 당신은 내 하루를 저장합니다.
Nithinjith

37

필자의 경우 불행히도 Michel과 Suragch의 솔루션은 모두 나를 위해 일하지 않았다.

그래서 다음을 수행 하여이 문제를 해결했습니다.

에서 Gradle을 : 3.0 컴파일 구성이되지 않으며 교체해야합니다 구현 또는 API를 . 자세한 내용은 여기 를 참조하십시오 . Gradle Build Tool 에서 공식 문서를 읽을 수 있습니다

컴파일 구성은 여전히 ​​존재하지만 API 및 구현 구성이 제공한다는 보장을 제공하지 않으므로 사용해서는 안됩니다.

구현 또는 API 를 사용 하는 것이 오히려 컴파일하는 것이 좋습니다

컴파일구현으로 대체 하고 debugCompiledebugImplementation으로 , testCompiletestImplementation으로 , androidtestcompileandroidTestImplementation 으로 대체하십시오.

예를 들어 : 대신

compile 'com.android.support:appcompat-v7:26.0.2'
compile 'com.android.support:support-v4:26.1.0'
compile 'com.github.bumptech.glide:glide:4.0.0'

이런 식으로 사용

implementation 'com.android.support:appcompat-v7:26.0.2'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.github.bumptech.glide:glide:4.0.0'

그 후

  • 프로젝트 내부의 .gradle 폴더를 삭제하십시오 (.gradle을 보려면 왼쪽 상단의 네비게이터에서 "프로젝트"보기로 전환해야 함)
  • 모든 빌드 폴더 와 gradle 캐시를 삭제하십시오 .
  • 빌드 메뉴에서 프로젝트 정리 버튼을 누릅니다.
  • 작업이 완료되면 Build 메뉴에서 Rebuild Project 버튼을 누릅니다.

그것이 도움이되기를 바랍니다!


2
고맙게도, 컴파일을 구현으로 변경하고 성공적으로 빌드했기 때문에 다른 단계를 완료 할 필요가 없었습니다. 나는 페이스 북 SDK 업데이트 후 빌드가 실패 시작
Shayno

2
나를 위해 일한 이유-왜 그런지에 대한 통찰력?
Alex

1
삭제할 폴더는 다음 .gradle과 같아야합니다../gradle
Gary Bak

1
실제로 나를 위해 일한 유일한 대답. 감사!
Michael Richardson

1
감사합니다. 가장 멋진 답변입니다. 검색 맨 위에 있어야합니다. 나를 위해 일했다.
위험

27
  1. .gradle디렉토리를 삭제하십시오 .

  2. 앱을 다시 실행하십시오.

노트

  • .gradle디렉토리는 프로젝트의 루트 폴더에 있습니다. (숨겨진 파일을 먼저 표시해야 할 수도 있습니다.)
  • Android 3.0을 사용하여 종속성 모듈을 업데이트 할 때 마다이 작업을 수행해야합니다. (Android Studio 3의 최신 릴리스는 문제를 해결 한 것으로 보입니다.)

4
이것은 또한 Invalidate Cache를 수행하고 다시 시작할 때 도움이되었습니다.
Vasili Fedotov

이 문제가 해결되었을 때 나는 불신했다.. 나는 모든 컴파일 키워드를 제거하고, 의심스러운 ilb 버전을 업데이트하려고 시도했다.. 내가 마침내 이것을했을 때, 그것은 효과가 있었다 ..
hanzolo

당신은 내 생명을 구했습니다! 감사
Masterfego

24

.gradleSuragch가 제안한대로 삭제 하는 것만으로는 충분하지 않습니다. 또한을 수행해야했습니다 Build > Clean Project.

를 보려면 .gradle왼쪽 상단의 네비게이터에서 "프로젝트"보기로 전환해야합니다.

프로젝트보기로 전환


23

나는 다른 모든 해결책을 시도했지만 아무도 나를 위해 일하지 않았다. 결국, 나는 편집하여 동일한 종속성 버전을 사용하여 해결했습니다 build.gradle. 지원 또는 Google 라이브러리의 다른 종속성 버전을 사용하는 라이브러리를 gradle에 추가 할 때이 문제가 발생한다고 생각합니다.

빌드 gradle 파일에 다음 코드를 추가하십시오. 그런 다음 cleanrebuild프로젝트.

추신 : 그것은 오래된 솔루션이므로 다음 라이브러리의 업데이트 버전을 사용해야합니다.

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '26.1.0'
        }
    } else if (requested.group == "com.google.android.gms") {
        details.useVersion '11.8.0'
        } else if (requested.group == "com.google.firebase") {
            details.useVersion '11.8.0'
          }
      }
}

5
다른 모든 솔루션을 시도했지만 결국이 도움이되었습니다 : /
Ante

@ Ali Gurelli 감사합니다. 많은 솔루션을 시도했지만이 작업 만 가능합니다.
Bipin Bharti

고맙지 만 나를 위해 Version details.useVersion '15 .0.0 '을 사용합니다
Elsunhoty

솔루션 주셔서 감사합니다. 나에게도 같은 문제가 발생했습니다. 구글 탭앤 페이는 10.0.0이고 나머지 모든 라이브러리는 최신 버전입니다
R World

순조롭게 감사했습니다
Sankalp

14

if (1. 청소 및 재건 노력) 좋은 경우

그렇지 않으면 (2. gradle work 제거 시도) 좋은 경우

else-> 3. grade.properties를 추가하십시오.

android.enableD8 = false

else-> 4. multiDexEnabledbuild.gradle에 true 추가

android {
    compileSdkVersion 26
    defaultConfig {
      ...
        minSdkVersion 15
        targetSdkVersion 26
        multiDexEnabled true
     ...
    }
}

의존성을 추가하십시오

dependencies {
    compile 'com.android.support:multidex:1.0.1'}

첫 번째는 u 등에서 작동하지만 실제로는 예를 들어 문제의 본질에 달려 있습니다.

이 라이브러리를 추가하면 오류가 발생합니다

implementation 'com.jjoe64:graphview:4.2.2'

나중에이를 확인해야하며 동일한 버전의 지원 라이브러리를 추가해야합니다. 그래서 다른 버전을 시도해야합니다

compile 'com.jjoe64:graphview:4.2.1'

문제를 해결합니다. 그러니주의하십시오.


3
이 문제에 가장 유용한 방법입니다. 여기서 언급하고 싶은 것은 자세한 내용은 'gradlew app : transformDexArchiveWithExternalLibsDexMergerForDebug --stacktrace'cmd를 사용할 수 있다는 것입니다. 멀티 덱스를 활성화해야한다는 것을 알았습니다. 도움이 되길 바랍니다.
팬더

13

제 경우에는 방 도서관 때문에 문제가 발생했습니다.

compile 'android.arch.persistence.room:runtime:1.0.0-alpha1'

로 변경 :

compile 'android.arch.persistence.room:runtime:1.0.0'

일했다.


정말 고마워요, 이것은 많은 도움이되었습니다!
Phil

이 답변을 찾아서 기쁩니다. 감사!
callOfCode

12

위의 솔루션에 추가하기 만하면됩니다.

여러 위치 (또는 동일한 파일)에서 서로 다른 버전을 가리키는 중복 종속성이 없는지 확인하십시오.


multiDexEnabled true를 추가하고 다른 답변을 시도하기 전에 이것이 먼저 확인되어야한다고 생각합니다. 감사!
Aleksandr A

11

안녕하세요. 동일한 문제로 거의 모든 것을 시도했습니다. 그래서 마침내 6 시간 동안 어려움을 겪고 모든 것을 한 줄씩 디버깅하여 해결했습니다.

classpath 'com.google.gms:google-services:3.0.0'

Google 서비스 3.0 playServiceVersion : 11.6.0 이하의 Studio 3.0에서는 firebase를 지원하지 않습니다.

implementation "com.google.firebase:firebase-messaging:$rootProject.ext.playServiceVersion"
implementation "com.google.firebase:firebase-core:$rootProject.ext.playServiceVersion"
implementation "com.firebase:firebase-jobdispatcher-with-gcm-dep:$rootProject.ext.jobdispatcherVersion"

해결책 :

Google 서비스 를 다음으로 변경 했습니다.

classpath 'com.google.gms:google-services:3.1.1'

그리고 그것은 firebase 서비스를 지원합니다.

누군가가 시간을 절약하기를 바랍니다.


1
playServiceVersion을 11.4.0 구현 "com.google.firebase : firebase-core : 11.4.0"으로 사용하던 것과 동일한 문제가 구현 "com.google.firebase : firebase-core : 11.6.2"로 변경되었습니다. 문제. 따라서 다른 lib에 대한 버전 의존성을 확인하십시오
durgeshtrivedi

9
  1. 사용

    defaultConfig {multiDexEnabled true}

  2. 1 단계가 작동하지 않으면

    프로젝트 구조로 이동하여 다른 버전을 사용하는 외부 라이브러리를 찾으십시오. 그것을 두 번 클릭하고 jar 파일을 삭제하십시오. 프로젝트를 닫고 다시 열면 Android Studio가 프로젝트를 다시 빌드합니다. 문제는 없어져야합니다.


+1-지원 lib, rxjava 및 타사 종속성 (13k 줄)이 있습니다. 분석법의 수를 보았을 때 눈이 거의 튀었습니다.
snodnipper

6

가능성 중 하나는 : 동일한 라이브러리가 있지만 종속성에 다른 버전이있는 것 입니다.

gradle 파일의 다음 줄 에서이 문제가 발생했습니다.

  • compile fileTree(include: ['*.jar'], dir: 'libs')
  • compile 'com.google.code.gson:gson:2.8.2'

gson 라이브러리는 내 libs 디렉토리에 있었지만 이전 버전이었습니다. gson-2.3.1.jarlibs 디렉토리에서를 삭제 하고 모든 것이 정상으로 돌아 왔습니다.


compile fileTree(include: ['*.jar'], dir: 'libs')나도 고정 제거 .. 감사합니다 (y)
Dinuka Salwathura

5

kotlin 지원을 포함시킨 후에이 오류가 발생하고 다른 솔루션이 작동하지 않으면 앱 모듈의 kotlin 종속성을 다음과 같이 변경하십시오 build.gradle.

implementation ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") {
    exclude group: 'org.jetbrains', module: 'annotations'
}

이것은 Android Studio 3.0 Beta 6에서 작동합니다 . 자세한 설명 은 답변을 참조하십시오 .


그러나 주석이 제외되지 않으면 Kotlin 도입으로 인해 빌드가 중단 될 수 있습니다.
Stoycho Andreev

감사. 이것은 나를위한 수정이었습니다. 내 문제를 파악하기 위해 3 일 동안 어려움을 겪고 있습니다.
Naveen Kumar M

대신 Kotlin 플러그인 버전 1.2.30으로 업그레이드하십시오 (방금 출시). 이제 인스턴트 실행도 다시 활성화 할 수 있습니다!
KTCO


5

[DEX 병합 할 수 없음] 몇 시간의 스택 오버플로 후 "병합 할 수없는 DEX 오류"

  1. gradle의 모든 com.android.support 라인을 v27.1.0으로 업데이트하십시오.

원인-Android는 지원 라이브러리를 v27.1.0으로 업데이트 했으므로 gradle 파일의 모든 Android 지원 줄을 26.1.0에서 27.1.0으로 변경해야합니다

  1. 저장소 섹션에 " https://maven.google.com "엔드 포인트가 있는 maven 섹션이 포함되어 있는지 확인하십시오 . 예를 들면 다음과 같습니다.

    allprojects {리포지토리 {jcenter () maven {url " https://maven.google.com "}}}

원인 :-Android는 SDK 관리자에서 지원 라이브러리를 업데이트 할 수 없으며 이제 maven.google.com을 사용하여 업데이트하므로 27.1.0 지원 라이브러리를 사용하려면 이것을 포함해야합니다

변경 후 버전 : 1. 프로젝트 정리 2. 프로젝트 재 구축


4

아래 명령을 추가하십시오 :

android {
...

    dexOptions {

        jumboMode true
        javaMaxHeapSize "4g"

    }
}

4

Google Play 서비스 (최신 버전) 설치 + 포함

android {
    defaultConfig {
        multiDexEnabled true
        }
}

build.gradle에서 나를 위해 문제를 해결하고 프로젝트를 정리하고 다시 빌드하십시오!


3

내 경우 에는 프로젝트의 libs 폴더에 추가 한 gson-2.8.1.jar 입니다 . 그러나 참조는 이미 SDK에 의해 존재했습니다. 따라서 libs 폴더에 gson-2.8.1.jar 를 추가 할 필요가 없었습니다 .

내가 그것을 꺼내면 gson-2.8.1.jar 프로젝트는이 오류없이 컴파일됩니다.

따라서 libs 폴더와 종속성 을 수정하십시오 .


3

Chris-Jr에 동의합니다. Firebase를 사용하여 AdMob 광고를 임베드하는 경우 (또는 그렇지 않은 경우에도) play-services-analytics에는 play-services-ads가 포함되지만 종속성으로 추가하지는 않습니다. 분석에 11.4.0이 아닌 10.0.1 버전의 광고가 포함되어 있기 때문에 Google은 11.4.0 롤아웃에서 실수를 저지른 것입니다 (gradle의 마우스 오버 힌트가 이것을 보여줍니다).

작동하는 맨 위에 컴파일 'com.google.android.gms : play-services-ads : 11.4.0' 을 수동으로 추가 했지만 인스턴트 실행을 비활성화 한 후에 만 http://stackoverflow.com/a/35169716/530047

따라서 10.0.1로 돌아가거나 광고를 추가하고 즉시 실행을 비활성화하십시오. 그것이 도움이된다면 내가 찾은 것입니다.


OP가 Play 서비스에 대해 언급 했습니까?
IgorGanapolsky

승인 된 답변이 그랬습니다. 이 문제가 해당 시나리오없이 떠오르면 모르겠습니다!
Jonathan

2

나는 같은 문제가 발생하여 내 사건에 대한 진정한 이유를 발견했습니다. 이전에는 모든 이전 답변을 다시 시도했지만 문제가 해결되지 않았습니다. 내 마모 앱 프로젝트에는 다음과 같이 두 개의 모듈과 build.gradle이 있습니다.

마모 모듈의 build.gradle :

implementation project(':common')
implementation files('libs/farmer-motion-1.0.jar')

공통 모듈의 build.gradle :

implementation files('libs/farmer-motion-1.0.jar')

gradle 3.x로 업그레이드하기 전에 '구현'은 모두 '컴파일'입니다.

--stacktrace 옵션으로 gradlew를 실행하여 스택 추적을 가져옵니다.이 문제가 발생하면 gradle 콘솔 창에서 이것을 클릭하면됩니다. 그리고 jar 패키지에 대한 종속성이 반복됨을 발견했습니다.

Caused by: com.android.dex.DexException: Multiple dex files define Lcom/farmer/motion/common/data/pojo/SportSummary$2;

farmer-motion-1.0.jar 패키지의 SportSummary 클래스는 공식 마이그레이션 안내서를 읽은 후 build.gradle을 다음과 같이 변경했습니다.

마모 모듈의 build.gradle :

implementation project(':common')
// delete dependency implementation files('libs/farmer-motion-1.0.jar')

일반적인 module 的 build.gradle :

api files('libs/farmer-motion-1.0.jar') // change implementation to api

이제 wear 모듈은 공통 모듈에 의한 farmer-motion-1.0.jar 내보내기의 종속성을 갖습니다. 런타임 동안 jar 패키지에 대한 종속성이없는 경우 jar 패키지의 ' 구현 '종속성 을 'compileOnly'로 변경할 수도 있습니다 .


2

나도 문제가 있었다.

나는 변경하여 해결할 수 있었다 compileSdkVersiontargetSdkVersion최신 버전으로.


2

프로젝트를 위해 실수로 같은 항아리를 다른 이름으로 두 번 추가했습니다. 그중 하나를 제거하면 문제가 해결되었습니다.


이것은 내 문제를 해결했습니다. 나는 내부 안드로이드 라이브러리 프로젝트를 만들고 있었고 그 libs폴더 아래에 두 개의 jar 파일이 있었고 그중 하나는 다른 파일의 백업 일 뿐이지 만 다른 파일 이름을 사용했습니다.
hopia

2

이것은 귀하의 문제가 아닐 수 있지만 실수로 프로젝트의 dependencies {} 섹션에 두 개의 동일한 (그러나 다른 이름을 가진) 라이브러리를 실수로 포함 시켰을 때이 오류가 발생했습니다.


1

나를 위해 app \ build.gradle에서 firebase 메시지를 업데이트하고 있었습니다.

compile 'com.google.firebase:firebase-messaging:10.0.1'

compile 'com.google.firebase:firebase-messaging:11.4.2'

1

가능한 근본 원인 중 하나 : 다중 모듈 프로젝트의 Android Studio 가져 오기에서 올바르게 처리되지 않은 일시적인 종속성이 중복되었습니다. 목록을 확인하고 제거하십시오. 나를 위해 수정은 말 그대로 다음과 같습니다.

--- a/project/module/build.gradle
+++ b/project/module/build.gradle
@@ -21,5 +21,4 @@ android {
 dependencies {
     implementation project(':upstream-dependency-project')
     implementation 'com.android.support:support-v4:18.0.0'
-    implementation files('libs/slf4j-android-1.6.1-RC1.jar')
 }

1

내 프로젝트 에서이 문제의 이유를 찾습니다. build.gradle에서 하나의 종속성이 두 번 추가되었습니다 . 종속성을 추가하여 한 번, jar 종속성을 추가하여 다시 한 번 :

'org.achartengine : achartengine : 1.2.0'
...
구현 파일 컴파일 ( '../achartengine-1.2.0.jar')

해결 된 첫 번째 줄 문제를 제거한 후.


1

최고 답변이 효과가없는 경우, 동일한 라이브러리에 종속 된 여러 종속성이있을 수 있습니다.

다음은 몇 가지 디버깅 팁입니다. 이 샘플 코드 com.google.code.findbugs:jsr305:3.0.0에서 문제가되는 라이브러리입니다.

솔루션을 확인하기 위해 수정할 때마다 항상 청소하고 다시 만드십시오!

  1. 로 구축 --stacktrace자세한 내용 플래그를 . 도서관을 찾는 수업, 구글 수업에 대해 불평합니다. 플래그 로 항상 gradle을 실행하도록 Android 스튜디오를 설정하는 방법은 다음과 같습니다--stacktrace .

  2. View > Tool Windows > Gradle Console빌드 후 Android Studio의 Gradle 콘솔을 한 눈에 살펴보십시오

  3. 를 실행하여 반복되는 종속성을 확인하십시오 ./gradlew -q app:dependencies. build.gradle을 수정할 때마다이를 다시 실행할 수 있습니다.

  4. build.gradle에서

    android {
            ...
            configurations.all {
                resolutionStrategy {
                    // Force a particular version of the library 
                    // across all dependencies that have that dependency
                    force 'com.google.code.findbugs:jsr305:3.0.0'
                }
            }
    }
  5. build.gradle에서

    dependencies {
        ...
        implementation('com.google.auth:google-auth-library-oauth2-http:0.6.0') {
            // Exclude the library for this particular import
            exclude group: 'com.google.code.findbugs'
        }
    }
  6. build.gradle에서

    android {
        ...
        configurations.all {
            resolutionStrategy {
                // Completely exclude the library. Works for transitive
                // dependencies.
                exclude group: 'com.google.code.findbugs'
            }
        }
    }
  7. 일부 종속성이 jar 파일에있는 경우 jar 파일을 열고 충돌하는 클래스 이름이 있는지 확인하십시오. 그렇다면 새로운 클래스 이름으로 항아리를 다시 작성하거나 조사해야 할 것입니다. 음영을 .

배경 읽기 더 :


1
android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

2
좀 더 자세히 설명해 주시겠습니까?
sg7

나는 또한 같은 문제가 있었지만 그 순간 내 문제를 해결한다는 것을 깨달았지만 향후 업데이트에서는 실제로 상황이 바뀔 수 있음을 깨달았습니다.
Eben Watts

1

내 경우에는 라이브러리 가이 문제를 일으키고 라이브러리가 프로젝트에 성공적으로 추가되었지만 내 앱을 실행하면이 오류가 표시됩니다. 따라서이 문제가 발생하면 github로 이동하여 문제를 확인하거나 새로운 문제를 제기 할 수 있습니다. 라이브러리와 관련된 해결책을 찾지 못하면 교체하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.