android dex android-studio-3.0

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 encontradas 27.0.2 , 21.0.3 . Los ejemplos incluyen com.android.support:animated-vector-drawable:27.0.2 y com.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.


  1. Elimine el directorio .gradle .

  2. 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).

  1. Habilitar

    defaultConfig {multiDexEnabled true}

  2. 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.


Eliminar .gradle como lo sugirió Suragch no fue suficiente para mí. Además, tuve que realizar un Build > Clean Project .

Tenga en cuenta que, para ver .gradle , debe cambiar a la vista "Proyecto" en el navegador en la parte superior izquierda:


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!

  1. 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 .

  2. Eche un vistazo a Gradle Console en Android Studio View > Tool Windows > Gradle Console después de una compilación

  3. Verifique las dependencias repetidas ejecutando ./gradlew -q app:dependencies . Puede volver a ejecutar esto cada vez que modifique su build.gradle.

  4. 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'' } } }

  5. 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'' } }

  6. En build.gradle,

    android { ... configurations.all { resolutionStrategy { // Completely exclude the library. Works for transitive // dependencies. exclude group: ''com.google.code.findbugs'' } } }

  7. 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:


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í:

  1. limpiar
  2. 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"

  1. 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

  1. 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.



android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 26 multiDexEnabled true } ... } dependencies { compile ''com.android.support:multidex:1.0.1'' }