IT

덱스를 병합 할 수 없습니다

lottoking 2020. 3. 19. 08:28
반응형

덱스를 병합 할 수 없습니다


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


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

  1. 깨끗한
  2. 재건

나는 위의 모든 것을 시도했지만 그들 중 누구도 도움이되지 않았다.

app / build.gradle :

android {
    defaultConfig {
       multiDexEnabled true
    }
}

경고에주의하십시오!

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


모듈 수준 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'

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


필자의 경우 불행하게도 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 버튼을 누릅니다.

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


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

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

노트

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

나는 다른 모든 해결책을 시도했지만 아무도 나를 위해 일하지 않았다. 결국, 나는 편집하여 동일한 종속성 버전을 사용하여 해결했습니다 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'
          }
      }
}

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

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

프로젝트보기로 전환


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

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

로 변경 :

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

일했다.


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'

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


안녕하세요. 동일한 문제로 거의 모든 것을 시도했습니다. 그래서 마침내 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. 사용

    defaultConfig {multiDexEnabled true}

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

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


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에서 작동합니다 . 자세한 설명 답변을 참조하십시오 .


Android Studio 3.0 안정적인 빌드 사용 아래 단계는 저에게 효과적이었습니다.

  1. SdkManager-> Android SDK-> SDK 도구로 이동하여 Google Play 서비스를 최신 버전으로 46으로 업데이트하십시오.
  2. 프로젝트를 정리하고 프로젝트를 다시 빌드하십시오.

[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. 프로젝트 재 구축


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

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

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

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


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

android {
...

    dexOptions {

        jumboMode true
        javaMaxHeapSize "4g"

    }
}

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

android {
    defaultConfig {
        multiDexEnabled true
        }
}

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


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로 돌아가거나 광고를 추가하고 즉시 실행을 비활성화하십시오. 그것이 도움이된다면 내가 찾은 것입니다.


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

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

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


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


나도 문제가 있었다.

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


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


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

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

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

가능한 근본 원인 중 하나 : 다중 모듈 프로젝트의 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')
 }

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

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

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


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

다음은 몇 가지 디버깅 팁입니다. 이 샘플 코드에서는 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 파일을 열고 충돌하는 클래스 이름이 있는지 확인하십시오. 그렇다면 새 클래스 이름으로 항아리를 다시 작성하거나 음영을 조사해야 할 것입니다 .

배경 읽기 더 :


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

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

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


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

참고 URL : https://stackoverflow.com/questions/46267621/unable-to-merge-dex

반응형