android - No se puede fusionar dex
android-studio-3.0 (30)
Tengo Android Studio Beta. Creé un nuevo proyecto con la compilación de mis módulos anteriores, pero cuando intenté iniciar la aplicación, no se inició con el mensaje:
Error:Execution failed for task '':app:transformDexArchiveWithExternalLibsDexMergerForDebug''.
com.android.builder.dexing.DexArchiveMergerException: no se puede combinar dex
Pero no sé cómo resolver este error. Busqué en Google esto durante horas pero sin éxito.
Mi proyecto 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
}
Mi aplicación 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'')
}
Y mi módulo 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'')
}
Mi segundo modulo:
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''
}
____________hallazgo_________
Cuando no importé el segundo módulo (analizador), la aplicación no se bloqueó en dex, pero cuando el módulo no se importó, la aplicación no funcionó. : D: D
¡Presta atención a las advertencias!
A veces solo necesita eliminar las advertencias y el error desaparecerá automáticamente. Ver abajo caso especial:
Tenía estas dos dependencias en mi archivo
build.gradle
nivel de
build.gradle
:
implementation ''com.android.support:appcompat-v7:27.0.2''
implementation ''com.android.support:recyclerview-v7:27.0.2''
y Studio había advertido ( además del problema de fusión de dex ):
Todas las bibliotecas
com.android.support
deben usar exactamente la misma especificación de versión (mezclar versiones puede provocar fallas en el tiempo de ejecución). Versiones encontradas27.0.2
,21.0.3
. Los ejemplos incluyencom.android.support:animated-vector-drawable:27.0.2
ycom.android.support:support-v4:21.0.3
Así que determiné explícitamente la versión de
com.android.support:support-v4
(vea
here
para más detalles)
y ambos problemas
(la advertencia y el relacionado con la fusión de dex) se
resolvieron
:
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''
Vea los comentarios a continuación para otras situaciones similares.
-
Elimine el directorio
.gradle
. -
Ejecute su aplicación nuevamente.
Notas
-
El directorio
.gradle
está en la carpeta raíz de su proyecto. (Es posible que primero tenga que mostrar los archivos ocultos). - Tengo que hacer esto cada vez que actualizo un módulo de dependencia con Android 3.0. (Las versiones más recientes de Android Studio 3 parecen haber resuelto el problema).
-
Habilitar
defaultConfig {multiDexEnabled true}
-
Si el paso 1 no funciona, entonces
Vaya a la estructura del proyecto y descubra la biblioteca externa que está utilizando una versión diferente. Haga doble clic en él y elimine su archivo jar. Cierre el proyecto y vuelva a abrir Android Studio reconstruirá el proyecto. El problema debería desaparecer.
Descubro la razón de este problema para mi proyecto. Me agregaron una dependencia dos veces en build.gradle . Una vez agregando dependencia y otra vez agregando dependencia jar:
compile ''org.achartengine: achartengine: 1.2.0''
...
archivos de implementación (''../ achartengine-1.2.0.jar'')
Después de eliminar el problema de la primera línea resuelto.
En caso de que las respuestas principales no le hayan funcionado, su problema puede ser que tenga varias dependencias que dependan de la misma biblioteca.
Aquí hay algunos consejos de depuración.
En este código de muestra,
com.google.code.findbugs:jsr305:3.0.0
es la biblioteca infractora.
¡Siempre limpie y reconstruya cada vez que modifique para verificar su solución!
-
Construya con la bandera
--stacktrace
para más detalles. Se quejará de una clase, Google esa clase para encontrar la biblioteca. Así es como puedes configurar Android Studio para que siempre se ejecute gradle con el indicador--stacktrace
. -
Eche un vistazo a Gradle Console en Android Studio
View > Tool Windows > Gradle Console
después de una compilación -
Verifique las dependencias repetidas ejecutando
./gradlew -q app:dependencies
. Puede volver a ejecutar esto cada vez que modifique su build.gradle. -
En 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'' } } }
-
En 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'' } }
-
En build.gradle,
android { ... configurations.all { resolutionStrategy { // Completely exclude the library. Works for transitive // dependencies. exclude group: ''com.google.code.findbugs'' } } }
-
Si algunas de sus dependencias están en archivos jar, abra los archivos jar y vea si hay algún nombre de clase en conflicto. Si lo son, probablemente tendrá que reconstruir los frascos con nuevos nombres de clase o buscar shading .
Un poco más de lectura de fondo:
- Android: comprender y dominar las dependencias de gradle
- Documentación de Gradle: Gestión de dependencias para proyectos Java
- Documentación de Gradle: estrategia de resolución
- : Error: conflicto con la dependencia ''com.google.code.findbugs: jsr305''
- : ¿Cómo excluyo todas las instancias de una dependencia transitiva cuando uso Gradle?
- Google busca para todas las preguntas relacionadas
En mi caso fue gson-2.8.1.jar que he agregado a la carpeta libs del proyecto. Pero la referencia ya estaba allí por SDK. Por lo tanto, no era necesario agregar gson-2.8.1.jar a la carpeta libs.
Cuando lo saqué, el proyecto gson-2.8.1.jar compila sin este error errado.
Intente revisar la carpeta y las dependencias de libs .
En mi caso, desafortunadamente, ni las soluciones de Michel ni las de Suragch funcionaron para mí.
Así que resolví este problema haciendo lo siguiente:
En gradle: 3.0, la configuración de compilación ahora está en desuso y debe reemplazarse por implementación o api . Para obtener más información, puede leer aquí Puede leer los documentos oficiales en Gradle Build Tool
La configuración de compilación todavía existe, pero no debe utilizarse, ya que no ofrecerá las garantías que proporcionan la API y las configuraciones de implementación.
es mejor usar implementación o api en lugar de compilar
simplemente reemplace compilar con implementación , debugCompile con debugImplementation , testCompile con testImplementation y androidtestcompile con androidTestImplementation
Por ejemplo: en lugar de esto
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''
usar así
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''
Después de esto
- Elimine la carpeta .gradle dentro de su proyecto (tenga en cuenta que, para ver .gradle, debe cambiar a la vista "Proyecto" en el navegador en la parte superior izquierda)
- Elimine todas las carpetas de compilación y el caché de gradle.
- Desde el menú Generar, presione el botón Limpiar proyecto .
- Después de completar la tarea, presione el botón Reconstruir proyecto en el menú Generar.
Espero que ayude!
En mi caso, el problema se debió a la biblioteca de la sala:
compile ''android.arch.persistence.room:runtime:1.0.0-alpha1''
Cambiándolo a:
compile ''android.arch.persistence.room:runtime:1.0.0''
trabajó.
En mi caso, una biblioteca causa este problema, la biblioteca se agregó correctamente al proyecto, pero cuando ejecuto mi aplicación me muestra este error. Entonces, si esto le sucede a usted también, puede ir a github y verificar problemas o plantear un nuevo problema. Si no encuentra ninguna solución con respecto a la biblioteca, le sugiero que la reemplace.
Encontré el mismo problema y encontré la verdadera razón de mi caso. Anteriormente, también intenté todas las respuestas anteriores nuevamente, pero no resolvió el problema. Tengo dos módulos en mi proyecto de aplicación de desgaste, y el build.gradle de la siguiente manera:
desgaste del módulo build.gradle:
implementation project('':common'')
implementation files(''libs/farmer-motion-1.0.jar'')
módulo común build.gradle:
implementation files(''libs/farmer-motion-1.0.jar'')
Antes de actualizar a gradle 3.x, ''implementación'' son todas ''compiladas''.
Ejecuto gradlew con la opción --stacktrace para obtener el seguimiento de la pila, puede hacer clic en esto en la ventana de la consola de gradle cuando surja este problema. Y descubrí que la dependencia del paquete jar repite:
Caused by: com.android.dex.DexException: Multiple dex files define Lcom/farmer/motion/common/data/pojo/SportSummary$2;
Class SportSummary en el paquete farmer-motion-1.0.jar, después de leer la guía oficial de migración , cambié mi build.gradle a lo siguiente:
desgaste del módulo build.gradle:
implementation project('':common'')
// delete dependency implementation files(''libs/farmer-motion-1.0.jar'')
módulo común 的 build.gradle:
api files(''libs/farmer-motion-1.0.jar'') // change implementation to api
Ahora el módulo de desgaste tendrá la dependencia de la exportación de granjero-motion-1.0.jar por módulo común. Si no hay dependencia del paquete jar durante el tiempo de ejecución , la dependencia '' implementación '' del paquete jar también se puede cambiar a ''compileOnly'' .
Estoy de acuerdo con Chris-Jr. Si está utilizando Firebase para incrustar sus anuncios de AdMob (o incluso si no lo está), play-services-analytics incluye play-services-ads aunque no lo agregue como una dependencia. Obviamente, Google ha cometido un error en su implementación 11.4.0, ya que el análisis incluye la versión 10.0.1 de los anuncios, no 11.4.0 (el mouse sobre la pista en el gradle lo muestra).
Agregué manualmente la compilación ''com.google.android.gms: play-services-ads: 11.4.0'' en la parte superior que funcionó, pero solo después de deshabilitar Instant Run: http://.com/a/35169716/530047
Por lo tanto, puede retroceder a 10.0.1 o agregar los anuncios y desactivar la ejecución instantánea. Eso es lo que encontré si ayuda.
Hola, tengo el mismo problema, probé casi todo. Entonces, finalmente resolví después de una lucha de 6 horas depurando todo línea por línea.
classpath ''com.google.gms:google-services:3.0.0''
Google-services 3.0 no es compatible con firebase con Studio 3.0 con playServiceVersion: 11.6.0 o menos.
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"
Solución:
He cambiado los servicios de google a
classpath ''com.google.gms:google-services:3.1.1''
Y es compatible con los servicios de Firebase.
Esperemos que alguien ahorre su tiempo.
Instalación de los servicios de Google Play (última versión) + incluyendo
android {
defaultConfig {
multiDexEnabled true
}
}
en build.gradle me resolvió el problema, ¡asegúrese de limpiar y reconstruir el proyecto!
Intenté con cualquier otra solución, pero nadie trabajó para mí.
Al final, lo resolví usando la misma versión de dependencia editando
build.gradle
.
Creo que este problema se produce al agregar una biblioteca a gradle que utiliza diferentes versiones de soporte o bibliotecas de google.
Agregue el siguiente código a su archivo de construcción gradle.
Luego
clean
y
rebuild
proyecto.
ps: esa era una solución antigua para mí, por lo que debe usar la versión actualizada de las siguientes bibliotecas.
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''
}
}
}
Intenté todo lo anterior y ninguno de ellos ayuda, finalmente, encuentro este trabajo para mí:
app / build.gradle:
android {
defaultConfig {
multiDexEnabled true
}
}
Para mí, estaba actualizando la mensajería firebase en app / build.gradle:
compile ''com.google.firebase:firebase-messaging:10.0.1''
a
compile ''com.google.firebase:firebase-messaging:11.4.2''
Para nuestro proyecto, agregamos accidentalmente el mismo jar dos veces con un nombre diferente. Eliminar uno de ellos resolvió el problema.
Puede que este no sea su problema, pero recibí este error cuando accidentalmente incluí dos bibliotecas idénticas (pero con nombres diferentes) en la sección de dependencias {} del proyecto.
Si apareció este error después de incluir el soporte de kotlin, y ninguna de las otras soluciones funciona, intente cambiar la dependencia de kotlin del build.gradle del módulo de la
build.gradle
a:
implementation ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") {
exclude group: ''org.jetbrains'', module: ''annotations''
}
Esto funciona para mí en Android Studio 3.0 Beta 6. Consulte this respuesta para obtener más explicaciones.
Solo para agregar a las soluciones anteriores:
Asegúrese de no tener dependencias duplicadas que apuntan a diferentes versiones de ellas, en varios lugares (o incluso en el mismo archivo).
También tuve el problema.
Pude resolver cambiando
compileSdkVersion
y
targetSdkVersion
a la última versión.
Tuve el mismo problema cuando actualicé desde
com.google.android.gms:play-services:11.2.2
a
com.google.android.gms:play-services:11.4.0
.
Esto lo resolvió para mí:
- limpiar
- reconstruir
Una de las posibilidades es: la presencia de la misma biblioteca pero con diferentes versiones en las dependencias .
Tuve este problema con las siguientes líneas en el archivo gradle:
-
compile fileTree(include: [''*.jar''], dir: ''libs'')
-
compile ''com.google.code.gson:gson:2.8.2''
La biblioteca gson estaba en mi directorio libs pero con una versión anterior.
gson-2.3.1.jar
del directorio libs y todo volvió a la normalidad.
Una de las posibles causas raíz: dependencias transitorias duplicadas que no fueron manejadas adecuadamente por la importación de proyectos de múltiples módulos de Android Studio. Verifique su lista y elimínelos. Para mí, la solución fue literalmente esto:
--- 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'')
}
[NO SE PUEDE MEZCLAR DEX SOLUCIONADO] Después de horas de desbordamiento de la pila, resolví el "ERROR DE NO SE PUEDE MEZCLAR"
- Actualice todas las líneas com.android.support en su gradle a v27.1.0
Causa: Android ha actualizado sus bibliotecas de soporte a v27.1.0, por lo que debe cambiar todas las líneas de soporte de Android en su archivo gradle a 27.1.0 de 26.1.0
-
Asegúrese de que la sección de repositorios incluya una sección de Maven con el punto final " https://maven.google.com ". Por ejemplo:
todos los proyectos {repositorios {jcenter () maven {url " https://maven.google.com "}}}
Causa: - Android no puede actualizar las bibliotecas de soporte en el administrador del SDK y ahora usa maven.google.com para actualizar, por lo que debe incluir esto para usar las bibliotecas de soporte 27.1.0
Después de cambiar la versión: 1. Proyecto limpio 2. Proyecto de reconstrucción
agregue comandos a continuación:
android {
...
dexOptions {
jumboMode true
javaMaxHeapSize "4g"
}
}
si (1. Intenta limpiar y reconstruir el trabajo) entonces bueno
si no (2. Intente eliminar el trabajo de gradle) entonces bueno
else-> 3. Intenta agregar en grade.properties
android.enableD8 = false
else-> 4. Agregue
multiDexEnabled
true a su build.gradle
android {
compileSdkVersion 26
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
...
}
}
y agregue la dependencia
dependencies {
compile ''com.android.support:multidex:1.0.1''}
Puede que el primero funcione para usted y así sucesivamente, pero realmente depende de la naturaleza de su problema para mí, por ejemplo
Recibí el error una vez que agregué esta biblioteca
implementation ''com.jjoe64:graphview:4.2.2''
y luego descubrí que tengo que verificar eso y tengo que agregar la misma versión de las bibliotecas de soporte. Entonces tengo que probar otra versión
compile ''com.jjoe64:graphview:4.2.1''
Y soluciona el problema. Así que presta atención a eso.
Con la versión estable de Android Studio 3.0 Los siguientes pasos me funcionaron:
- Llegué a SdkManager -> Android Sdk -> Sdk Tools y Actualice los servicios de Google Play a la última versión a 46.
- Proyecto limpio y proyecto de reconstrucción.
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile ''com.android.support:multidex:1.0.1''
}