问题
I have Android Studio Beta. I created a new project with compile my old modules but when I tried launching the app it did not launch with the message:
Error:Execution failed for task \':app:transformDexArchiveWithExternalLibsDexMergerForDebug\'.
com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
But I don\'t know how to solve this error. I googled this for hours but with no success.
My project 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
}
My app 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\')
}
And my module 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\')
}
My second module:
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\'
}
____________finding_________
When I did not import the second module (parser) the app did not crash on dex but when the module was not imported app did not work. :D :D
回答1:
I had the same problem when I update from com.google.android.gms:play-services:11.2.2
to com.google.android.gms:play-services:11.4.0
. This solved it for me:
- clean
- rebuild
回答2:
I tried all the above and none of them helps. finally, I find this work for me:
app/build.gradle:
android {
defaultConfig {
multiDexEnabled true
}
}
回答3:
Pay attention to Warnings!
Sometimes you only need to eliminate warnings and the error will be disappeared automatically. See below special case:
I had these two dependencies in my module-level build.gradle
file:
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'
and Studio had warned (in addition to dex merging problem):
All
com.android.support
libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions27.0.2
,21.0.3
. Examples includecom.android.support:animated-vector-drawable:27.0.2
andcom.android.support:support-v4:21.0.3
So I explicitly determined the version of com.android.support:support-v4
(see here for details) and both problems (the warning and the one related to dex merging) solved:
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'
See below comments for other similar situations.
回答4:
In my case, Unfortunately, neither Michel's nor Suragch's solutions worked for me.
So I solved this issue by doing the following:
In gradle:3.0 the compile configuration is now deprecated and should be replaced by implementation or api. For more information you can read here You can read the official docs at Gradle Build Tool
The compile configuration still exists but should not be used as it will not offer the guarantees that the api and implementation configurations provide.
it's better to use implementation or api rather compile
just replace compile with implementation, debugCompile with debugImplementation, testCompile with testImplementation and androidtestcompile with androidTestImplementation
For example: Instead of this
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'
use like this
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'
After that
- Delete the .gradle folder inside your project ( Note that, in order to see .gradle, you need to switch to the "Project" view in the navigator on the top left )
- Delete all the build folders and the gradle cache.
- From the Build menu, press the Clean Project button.
- After task completed, press the Rebuild Project button from the Build menu.
Hope it will helps !
回答5:
Delete the
.gradle
directory.Run your app again.
Notes
- The
.gradle
directory is in your project's root folder. (You may have to show hidden files first.) - I have to do this every time I update a dependency module using Android 3.0. (More recent releases of Android Studio 3 seem to have resolved the problem.)
回答6:
Deleting .gradle
as suggested by Suragch wasn't enough for me. Additionally, I had to perform a Build > Clean Project
.
Note that, in order to see .gradle
, you need to switch to the "Project" view in the navigator on the top left:
回答7:
I tried every other solution, but no one worked for me. At the end, i solved it by using same dependency version by editing build.gradle
. I think this problem occurres when adding a library into gradle which uses different dependency version of support or google libraries.
Add following code to your build gradle file. Then clean
and rebuild
project.
ps: that was old solution for me so you should use updated version of following libraries.
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'
}
}
}
回答8:
if(1. Try to clean and rebuild work ) then good
else if (2. Try to remove gradle work ) then good
else-> 3. Try to add in grade.properties
android.enableD8 = false
else-> 4. Add multiDexEnabled
true to your build.gradle
android {
compileSdkVersion 26
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
...
}
}
and add the dependency
dependencies {
compile 'com.android.support:multidex:1.0.1'}
It may the first one works for u and so on but it really depends on the nature of your problem for me for example
I got the error once I have added this library
implementation 'com.jjoe64:graphview:4.2.2'
and later I discovered that I have to check that and I have to add the same version of the support libraries. So I have to try another version
compile 'com.jjoe64:graphview:4.2.1'
and it fixes the problem. So pay attention for that.
回答9:
In my case issue was because of the room library:
compile 'android.arch.persistence.room:runtime:1.0.0-alpha1'
Changing it to:
compile 'android.arch.persistence.room:runtime:1.0.0'
worked.
回答10:
Hi I have same issue tried almost everything. So, finally i resolved after 6 hour long struggle by debugging everything line by line.
classpath 'com.google.gms:google-services:3.0.0'
Google-services 3.0 Doesn't support firebase with Studio 3.0 with playServiceVersion: 11.6.0 or less.
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"
Solution :
I have change google services to
classpath 'com.google.gms:google-services:3.1.1'
And it support firebase services.
Hopefully somebody save his/her time.
回答11:
Just to add to the above solutions:
Make sure that you don't have duplicate dependencies pointing to different versions of them, in multiple places (or even in the same file).
回答12:
Enable
defaultConfig { multiDexEnabled true }
If step 1 doesn't work then
Go to project structure and find out the external library which is using a different version. Double click on it and delete its jar file. Close the project and open again android studio will rebuild the project. The problem should be gone.
回答13:
If this error appeared for you after including kotlin support, and none of the other solutions work, try changing the kotlin dependency of app module's build.gradle
to:
implementation ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") {
exclude group: 'org.jetbrains', module: 'annotations'
}
This works for me on Android Studio 3.0 Beta 6. See this answer for further explanation.
回答14:
With Android Studio 3.0 stable build Below steps worked for me:
- Got to SdkManager-->Android Sdk --> Sdk Tools and Update Google play services to latest version to 46.
- Clean project and rebuild project.
回答15:
[ UNABLE TO MERGE DEX SOLVED ] After hours of stack overflowing I resolved the " UNABLE TO MERGE DEX ERROR "
- Update all the com.android.support lines in your gradle to v27.1.0
Cause - Android has updated it support libraries to v27.1.0, so you have to change all the android support lines in your gradle file to 27.1.0 from 26.1.0
Make sure that the repositories section includes a maven section with the "https://maven.google.com" endpoint. For example:
allprojects { repositories { jcenter() maven { url "https://maven.google.com" } } }
Cause :- Android cannot update the support libraries in the SDK manager and now it uses maven.google.com to update , so you have to include this to use 27.1.0 support libraries
After Change Version: 1. Clean Project 2. Rebuild Project
回答16:
One of the possibilities is: the presence of the same library but with different versions in the dependencies.
I had this problem with the following lines in gradle file:
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.google.code.gson:gson:2.8.2'
The gson library was in my libs directory but with a previous version.
I deleted the gson-2.3.1.jar
from the libs directory and everything is back to normal.
回答17:
add commands below:
android {
...
dexOptions {
jumboMode true
javaMaxHeapSize "4g"
}
}
回答18:
Installing Google play services (latest version) + including
android {
defaultConfig {
multiDexEnabled true
}
}
in build.gradle solved the issue for me, make sure to clean and rebuild project!
回答19:
I agree with Chris-Jr. If you are using Firebase to embed your AdMob ads (or even if you are not) the play-services-analytics includes the play-services-ads even though you don't add that as a dependency. Google have obviously made a mistake in their 11.4.0 roll-out as the analytics is including version 10.0.1 of ads, not 11.4.0 (the mouse over hint in the gradle shows this).
I manually added compile 'com.google.android.gms:play-services-ads:11.4.0' at the top which worked, but only after I disabled Instant Run: http://stackoverflow.com/a/35169716/530047
So its either regress to 10.0.1 or add the ads and disable Instant Run. That's what I found if it helps any.
回答20:
In my case it was gson-2.8.1.jar which I have added to libs folder of the project. But the reference was already there by SDK. So it was not necesary to add gson-2.8.1.jar to libs folder.
When I took it out th gson-2.8.1.jar project compiles without this wiered error.
So try to revise libs folder and dependencies.
回答21:
I encountered the same problem and found the real reason for my case. Previously, I also tried all the previous answers again, but it did not solve the problem. I have two module in my wear app project, and the build.gradle as follows:
wear module's build.gradle:
implementation project(':common')
implementation files('libs/farmer-motion-1.0.jar')
common module's build.gradle:
implementation files('libs/farmer-motion-1.0.jar')
Before upgrade to gradle 3.x, 'implementation' are all 'compile'.
I run gradlew with --stacktrace option to get the stack trace, you can just click this on gradle console window when this problem arises. And found that dependency to the jar package repeated:
Caused by: com.android.dex.DexException: Multiple dex files define Lcom/farmer/motion/common/data/pojo/SportSummary$2;
Class SportSummary in the farmer-motion-1.0.jar package, after read the official migration guide, i changed my build.gradle to follows:
wear module's build.gradle:
implementation project(':common')
// delete dependency implementation files('libs/farmer-motion-1.0.jar')
common module的build.gradle:
api files('libs/farmer-motion-1.0.jar') // change implementation to api
Now wear module will has the dependency of farmer-motion-1.0.jar export by common module. If there has no dependency on jar package during runtime, 'implementation' dependency of jar package can also be change to 'compileOnly'.
回答22:
I also had the problem.
I was able to solve by changing compileSdkVersion
and targetSdkVersion
to latest version.
回答23:
For our project, we accidentally added same jar two times with different name. Removing one of them solved the issue.
回答24:
For me it was updating the firebase messaging in app\build.gradle:
compile 'com.google.firebase:firebase-messaging:10.0.1'
to
compile 'com.google.firebase:firebase-messaging:11.4.2'
回答25:
One of possible root causes: duplicate transient dependencies that weren't properly handled by Android Studio import of multi-module projects. Check your list and remove them. For me, the fix was literally this:
--- 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')
}
回答26:
I find out the reason of this problem for my project. I was added one dependency twice in build.gradle. One time by adding dependency and one time again by adding jar dependency:
compile 'org.achartengine:achartengine:1.2.0'
...
implementation files('../achartengine-1.2.0.jar')
after remove the first line problem solved.
回答27:
In case the top answers haven't worked for you, your issue may be that you have multiple dependencies that depend on the same library.
Here are some debugging tips. In this sample code, com.google.code.findbugs:jsr305:3.0.0
is the offending library.
Always clean and rebuild every time you modify to check your solution!
Build with the
--stacktrace
flag on for more detail. It will complain about a class, Google that class to find the library. Here's how you can set up Android studio to always run gradle with the --stacktrace flag.Take a glance at the Gradle Console in Android Studio
View > Tool Windows > Gradle Console
after a buildCheck for repeated dependences by running
./gradlew -q app:dependencies
. You can re-run this each time you modify the your build.gradle.In 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' } } }
In 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' } }
In build.gradle,
android { ... configurations.all { resolutionStrategy { // Completely exclude the library. Works for transitive // dependencies. exclude group: 'com.google.code.findbugs' } } }
If some of your dependencies are in jar files, open up the jar files and see if there are any conflicting class names. If they are, you will probably have to re-build the jars with new class names or look into shading.
Some more background reading:
- Android - Understanding and dominating gradle dependencies
- Gradle Documentation: Dependency Management for Java Projects
- Gradle Documentation: ResolutionStrategy
- StackOverflow: Error:Conflict with dependency 'com.google.code.findbugs:jsr305'
- StackOverflow: How do I exclude all instances of a transitive dependency when using Gradle?
- Google search StackOverflow for all related questions
回答28:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
回答29:
This may not be your problem, but I got this error when I accidentally included two identical (but differently named) libraries in the dependencies{} section of the project.
回答30:
In my case a library makes this problem, library was successfully added to project but when i run my app it shows me this error. So if this happens to you too, you can go to github and check issues or raise new issue. If you do not find any solution regarding the library i suggest you to replace it.
来源:https://stackoverflow.com/questions/46267621/unable-to-merge-dex