덱스를 병합 할 수 없습니다
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
. 이것은 나를 위해 해결했습니다.
- 깨끗한
- 재건
나는 위의 모든 것을 시도했지만 그들 중 누구도 도움이되지 않았다.
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 를 사용 하는 것이 오히려 컴파일하는 것이 좋습니다.
컴파일 을 구현으로 대체 하고 debugCompile 을 debugImplementation으로 , testCompile 을 testImplementation으로 , androidtestcompile 을 androidTestImplementation 으로 대체하십시오.
예를 들어 : 대신
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 버튼을 누릅니다.
그것이 도움이되기를 바랍니다!
.gradle
디렉토리를 삭제하십시오 .앱을 다시 실행하십시오.
노트
.gradle
디렉토리는 프로젝트의 루트 폴더에 있습니다. (숨겨진 파일을 먼저 표시해야 할 수도 있습니다.)- Android 3.0을 사용하여 종속성 모듈을 업데이트 할 때 마다이 작업을 수행해야합니다. (Android Studio 3의 최신 릴리스는 문제를 해결 한 것으로 보입니다.)
나는 다른 모든 해결책을 시도했지만 아무도 나를 위해 일하지 않았다. 결국, 나는 편집하여 동일한 종속성 버전을 사용하여 해결했습니다 build.gradle
. 지원 또는 Google 라이브러리의 다른 종속성 버전을 사용하는 라이브러리를 gradle에 추가 할 때이 문제가 발생한다고 생각합니다.
빌드 gradle 파일에 다음 코드를 추가하십시오. 그런 다음 clean
및 rebuild
프로젝트.
추신 : 그것은 오래된 솔루션이므로 다음 라이브러리의 업데이트 버전을 사용해야합니다.
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'
}
}
}
.gradle
Suragch가 제안한대로 삭제 하는 것만으로는 충분하지 않습니다. 또한을 수행해야했습니다 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. multiDexEnabled
build.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 서비스를 지원합니다.
누군가가 시간을 절약하기를 바랍니다.
위의 솔루션에 추가하기 만하면됩니다.
여러 위치 (또는 동일한 파일)에서 서로 다른 버전을 가리키는 중복 종속성이 없는지 확인하십시오.
사용
defaultConfig {multiDexEnabled true}
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 안정적인 빌드 사용 아래 단계는 저에게 효과적이었습니다.
- SdkManager-> Android SDK-> SDK 도구로 이동하여 Google Play 서비스를 최신 버전으로 46으로 업데이트하십시오.
- 프로젝트를 정리하고 프로젝트를 다시 빌드하십시오.
[DEX 병합 할 수 없음] 몇 시간의 스택 오버플로 후 "병합 할 수없는 DEX 오류"
- gradle의 모든 com.android.support 라인을 v27.1.0으로 업데이트하십시오.
원인-Android는 지원 라이브러리를 v27.1.0으로 업데이트 했으므로 gradle 파일의 모든 Android 지원 줄을 26.1.0에서 27.1.0으로 변경해야합니다
저장소 섹션에 " 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.jar
libs 디렉토리에서를 삭제 하고 모든 것이 정상으로 돌아 왔습니다.
아래 명령을 추가하십시오 :
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'로 변경할 수도 있습니다 .
나도 문제가 있었다.
나는 변경하여 해결할 수 있었다 compileSdkVersion
및 targetSdkVersion
최신 버전으로.
프로젝트를 위해 실수로 같은 항아리를 다른 이름으로 두 번 추가했습니다. 그중 하나를 제거하면 문제가 해결되었습니다.
나를 위해 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
문제가되는 라이브러리입니다.
솔루션을 확인하기 위해 수정할 때마다 항상 청소하고 다시 만드십시오!
--stacktrace
자세한 내용 은 플래그를 켜서 빌드하십시오 . 도서관을 찾는 수업, 구글 수업에 대해 불평합니다. 플래그 가 항상 gradle을 실행하도록 Android 스튜디오를 설정하는 방법은 다음과 같습니다--stacktrace
.View > Tool Windows > Gradle Console
빌드 후 Android Studio의 Gradle 콘솔을 한 눈에 살펴보십시오.를 실행하여 반복되는 종속성을 확인하십시오
./gradlew -q app:dependencies
. build.gradle을 수정할 때마다이를 다시 실행할 수 있습니다.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' } } }
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' } }
build.gradle에서
android { ... configurations.all { resolutionStrategy { // Completely exclude the library. Works for transitive // dependencies. exclude group: 'com.google.code.findbugs' } } }
일부 종속성이 jar 파일에있는 경우 jar 파일을 열고 충돌하는 클래스 이름이 있는지 확인하십시오. 그렇다면 새 클래스 이름으로 항아리를 다시 작성하거나 음영을 조사해야 할 것입니다 .
배경 읽기 더 :
- Android-gradle 종속성 이해 및 지배
- Gradle 문서 : Java 프로젝트의 종속성 관리
- Gradle 설명서 : ResolutionStrategy
- StackOverflow : 오류 : 종속성 'com.google.code.findbugs : jsr305'와 충돌
- StackOverflow : Gradle을 사용할 때 전이 종속성의 모든 인스턴스를 어떻게 제외합니까?
- 모든 관련 질문에 대한 Google 검색 StackOverflow
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
'IT' 카테고리의 다른 글
반응 형 레이아웃에서 요소를 숨기시겠습니까? (0) | 2020.03.19 |
---|---|
오류 2006 (HY000) : MySQL 서버가 사라졌습니다 (0) | 2020.03.19 |
응용 프로그램 식별자 권한으로 인해 앱 설치에 실패했습니다 (0) | 2020.03.19 |
Entity Framework에서 여러 행을 삭제하는 방법 (foreach 제외) (0) | 2020.03.19 |
안드로이드 머티리얼 디자인 버튼 스타일 (0) | 2020.03.19 |