Varios archivos dex definen Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat

212

Si ejecuto gradle assembleDebugdesde la línea de comando, de repente recibo este error:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
    at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
    at com.android.dx.command.dexer.Main.run(Main.java:232)
    at com.android.dx.command.dexer.Main.main(Main.java:174)
    at com.android.dx.command.Main.main(Main.java:91)

Si grep para v4 veo dos archivos dentro de mi carpeta de compilación.

Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches

Mi archivo gradle incluye solo esta biblioteca de soporte:

compile 'com.android.support:support-v13:19.0.0'

Estoy perplejo en cuanto a cómo se incluye la biblioteca r7 de alguna manera. He ejecutado gradle cleany siempre aparece allí cuando vuelvo a ejecutar assembleDebug.

Si grep para r7 dentro del directorio de compilación, lo veo dentro del archivo:

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

Si no incluyo v13, entonces otras cosas no se compilan.

¿Pero no incluye v13 la biblioteca de soporte v4?

¿Es esto una incompatibilidad entre el paquete AAR de servicios de reproducción y la biblioteca v13?

Tomé el archivo gradle de gradleplease.appspot.com.

Eliminar los servicios de reproducción no lo arregla; mismo error.

Mis dependencias dentro de build.gradle:

 dependencies {


 // Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'

// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}
xrd
fuente
1
Probé todas las soluciones, y sucedió que todas no funcionaron. Luego, acabo de crear un nuevo proyecto con el mismo nombre y copié todos los archivos del proyecto anterior. Y funciona muy bien ahora. Espero eso ayude.
Sam003
Tuve este problema con un componente en support-v13. Después de mucho depurar y probar todas las respuestas en vano, descubrí que se introdujo cuando intenté integrar kotlin en el proyecto, que era un proyecto java emocionante. Eliminé la biblioteca estándar de kotlin y otras bibliotecas de kotlin y estuvo bien. Todavía intentaría solucionar el problema con Kotlin, pero por ahora, tengo que trabajar. Cualquier información también ayudaría, realmente amo a Kotlin.
clementiano

Respuestas:

304

Ejecute gradle -q dependencies(o gradle -q :projectName:dependencies) para generar un informe de dependencia. Debería ver de dónde r7viene, como:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

Luego, use la excludedirectiva para bloquear esa dependencia. En mi caso, proviene de mi biblioteca de cámaras CWAC, por lo que uso:

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(donde la segunda compiledeclaración indica qué versión realmente quieres)

Eso debería aclarar las cosas, como verá si vuelve a ejecutar el informe de dependencia:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0
CommonsWare
fuente
3
¿Existe algún método para inspeccionar / excluir módulos de dependencias .jar no disponibles en Maven? gradle dependenciesparece no informar dependencias agregadas concompile files('libs/example.jar')
dbro
3
Digamos que tengo dos libs/*.jardependencias con un módulo en común, ninguna está disponible como artefacto. ¿Alguna forma de realizar una inspección de dependencia / exclusión de clase similar?
dbro
2
@dbro: No que yo sepa, pero, de nuevo, no he investigado este punto. En mi humilde opinión, por fuera, uno o ambos de esos archivos JAR se sienten mal empaquetados, ya que el módulo en común debe factorizarse en su propio JAR.
CommonsWare
12
./gradlew -q: projectName: las dependencias me funcionaron
Defuera
15
Consejo rápido para aquellos que excluyen un módulo de una dependencia de módulo: debe convertirlo compile project(':foo')en compile(project(':foo')) { exclude module: 'support-v4' }. Tenga en cuenta el paréntesis.
espinchi
122

Resolví un error similar al agregar el siguiente fragmento de código a mi archivo build.gradle dentro del bloque de Android.

android {
    dexOptions {
        preDexLibraries = false
    }
}
mike.tihonchik
fuente
44
¡Trabajó para mi! ¿Hay alguna desventaja de hacerlo de esta manera?
Barrie Galitzky
@BarrieGalitzky No he tenido ningún problema hasta ahora
mike.tihonchik
3
Gracias hombre, ¡esto funcionó perfectamente para resolver el problema! De todos modos, creo que tiene algunos efectos secundarios. ¡La tarea assembleDebug se volvió 3 veces más lenta!
Marino
dexOptions no encontrado.
Oliver Dixon el
10
Después de agregar esto, recibí el error "La traducción ha sido interrumpida". Supongo que tengo que probar el método CommonsWare.
DroidHeaven
36

Como una imagen vale más que mil palabras

Para que sea más fácil y rápido hacer esta tarea con principiantes como yo. Estas son las capturas de pantalla que muestran la respuesta publicada por @ edsappfactory.com que funcionó para mí:

Primero abra la vista Gradle en el lado derecho de Androidstudio, en el elemento de su aplicación, vaya Tasks, Androidluego haga clic derecho y androidDependenciesluego elija Run:

paso 1

En segundo lugar verá algo como esto:

Paso 2

La razón principal por la que publiqué esto es que no era fácil saber dónde ejecutar una gradletarea o los comandos publicados anteriormente. Así que aquí también es donde ejecutarlos.

SO, para ejecutar el comando gradle:

Primero:

primero

Segundo:

segundo

Tan fácil como es.

Eso es.

Gracias.

MBH
fuente
33

También para tener en cuenta que puede ver sus dependencias de Android, yendo a su vista de Android Studio Gradle y seleccionando el objetivo "androidDependencies".

Un consejo más: estaba teniendo este problema, hasta que eliminé la v4 support lib de la carpeta libs tanto en el proyecto como en mi (s) proyecto (s) de módulo / biblioteca relacionados.

Ed Manners
fuente
3
¿Instrucciones más específicas? No se puede encontrar "androidDependencies". Thx
CopperCash
Vaya a la vista de Gradle, luego busque el encabezado Todas las tareas, profundice en el nombre de su aplicación, luego profundice en ": aplicación", allí encontrará "Dependencias de Android".
AutoM8R
2
¿Dónde está la vista de Gradle?
Paul Beusterien
44
@PaulBeusterien Si miras hacia el extremo derecho de la ventana, hay una pestaña lateral marcada como Gradle. Haga clic para abrir una vista anclada. AndroidDependencies es en realidad una tarea
sencilla
gracias hombre, publiqué capturas de pantalla explicando tu respuesta para que sea más fácil.
MBH
11

Comencé a recibir este error al actualizar a ButterKnife 8.5.1. Ninguna de las otras respuestas aquí funcionó para mí.

Solía gradle -q :app:dependenciesver el árbol, y luego miraba los archivos jar hasta encontrar el conflicto. El conflicto fue que la dependencia de butterknife en com.android.support:support-compat:25.1.0contiene una versión de la clase de accesibilidad, y com.android.support:support-v4:23.1.1también contiene la clase.

Lo resolví cambiando mi dependencia de esto:

compile 'com.jakewharton:butterknife:8.5.1'

a esto:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

Hasta el momento, no parece afectar la operación de ButterKnife.

Editar: hay una mejor solución, que era actualizar mis bibliotecas de soporte de Android para que coincidan con las de ButterKnife:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'
usuario3562927
fuente
mantener la versión de soporte para que sea la misma es una solución simple y excluir el módulo no me funciona.
Jay
¡Resolví con la segunda solución también! Mismo conflicto pero con Butter Knife versión 8.8.1 Ejemplo: implementación ('com.jakewharton: butterknife: 8.8.1') {excluir módulo: 'support-compat'} annotationProcessor 'com.jakewharton: butterknife-compiler: 8.8.1'
GFPF
9

En caso de que alguien descubra que la respuesta de CommonsWare no se pudo aplicar al proyecto de la biblioteca de Android, aquí está el fragmento para solucionar

compilar (proyecto (': yourAndroidLibrary')) {excluir módulo: 'support-v13'}

Encontrarás problemas

Método DSL de Gradle no compatible encontrado: 'exclude ()'

si utiliza el proyecto de compilación (': yourAndroidLibrary') {excluya el módulo: 'support-v13'}

Las diferencias son la pulsera "(" y ")" antes de "proyecto" .

Tony Thompson
fuente
Gracias, faltaba un paréntesis doble!
Marko
8
exclude module: 'support-v4'

No funcionaría para mí con una dependencia de proyecto, la única forma en que pude hacerlo funcionar fue a través de la siguiente sintaxis:

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

Dónde: Android-SDK es el nombre de tu proyecto.

Bolita
fuente
8

Tuve el mismo problema y parece que mi aplicación tenía demasiados métodos debido a las bibliotecas: http://developer.android.com/tools/building/multidex.html

Resuelto con:

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

Más aquí Error: Error en la ejecución de la tarea ': aplicación: dexDebug'. > el comando finalizó con un valor de salida distinto de cero 2

Giannis P
fuente
1
Multidexing puede hacer que su aplicación se inicie más lentamente, solo úsela si realmente tiene que hacerlo.
James Goodwin
6

Tuve este mismo error pero fue porque recientemente había cambiado de usar v4 a v13. Así que todo lo que tenía que hacer era limpiar el proyecto.

ashishduh
fuente
1
Tuve el mismo error después de actualizar intellij, la limpieza del proyecto solucionó el problema.
Vlad Spreys
5

Tuve el mismo error en un proyecto heredado. Mi culpa fue que la biblioteca de soporte se incluyó dos veces: una dentro de google-play-services lib y otra como independiente.

Así es como lo arreglé:

MALO build.gradle:

dependencies {
   compile files('libs/android-support-v4.jar') 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

BUEN build.gradle:

dependencies {
   // compile files('libs/android-support-v4.jar')  // not needed 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

Espero que ayude a alguien :-)

voghDev
fuente
3

Estoy usando com.google.android.gms:play-services-analytics:8.3.0y android-support-v13.jarno pude ir exclude module: 'support-v4'a trabajar.

Lo que funcionó para mí fue usar el android-support-v13artefacto en lugar del android-support-v13.jararchivo.

Es decir, en lugar de

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')

}

solía

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')

}

barry
fuente
3

En mi caso, el problema fue causado por la inconsistencia de la versión :

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

La solución fue simple: hacer que todo sea la versión 25

Jinete del viento
fuente
3

Un método similar de resolución de problemas de dex

gradle.build contenía:

compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'

El problema se resolvió cuando eliminé

compile files('libs/httpclient-4.2.1.jar') 

Mi gradle ahora se ve así:

apply plugin: 'com.android.application'

android {

compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
    applicationId "com.mmm.ll"
    minSdkVersion 16
    targetSdkVersion 24
    useLibrary  'org.apache.http.legacy'
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {

compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

Hubo una redundancia en el archivo JAR y el proyecto compilado de gradle

Por lo tanto, busque con atención las dependencias y los archivos jar que tengan las mismas clases.

Y eliminar la redundancia.
Esto funcionó para mí.

vn brillante
fuente
2

Si ha importado su proyecto desde Eclipse .

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

El escenario que he enfrentado después de importar el proyecto Eclipse al estudio de Android.

Espero que esto ayude..

MobileEvangelist
fuente
2

Este es un problema molesto, que puede llevar algún tiempo descubrir el caso raíz. La forma en que debe proceder es la respuesta @CommonsWare.

Recientemente me enfrenté a este problema y me resultó difícil resolverlo.

Mi problema fue que estaba incluyendo una biblioteca por versión "+" en build.gradle. La última versión de la biblioteca contenía una dex y bang anteriores.

Volví a la versión anterior de la biblioteca y la resolví.

Es bueno ejecutar sus AndroidDependencies y ver qué está sucediendo realmente. También es bueno buscar en su carpeta de compilación.

Sobre todo, Android Studio 2.2 proporciona funciones de compilación para rastrear este problema.

Happy Coding Guys

Arun C
fuente
2

En Android Studio, vaya a su build.gradle (verifique los archivos build.gradle del proyecto y de los módulos) y busque dependencias duplicadas.

Elimine aquellos que su proyecto no necesita.

KadoLakatt
fuente
2

Eliminar todos los archivos del caché de Gradle solucionó mi problema.

en Linux:

rm -rf ~/.gradle/caches/*
Yuliia Ashomok
fuente
1

Eliminé la compilación 'com.android.support:support-v4:18.0.+' en dependencias, y funciona

Albert
fuente
2
esto debería ser un comentario o de lo contrario deberías explicarlo de una mejor manera.
Anirudh Sharma
1

Pude resolver el problema en mi proyecto nativo reactivo simplemente agregando

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

al final de mi archivo android \ app \ build.gradle

Yusuf Khan
fuente
0

Finalmente, lo resolví modificando estos atributos en el archivo gradle del módulo

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. compile 'com.android.support:appcompat-v7:+'
  4. compile 'com.android.support:recyclerview-v7:+'
Val Martinez
fuente
0

Tuve el mismo problema al agregar react-native-palettea mi proyecto, aquí está mi árbol de dependencias:

./gradlew app:dependencies
+--- project :react-native-palette
|    +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1
|    |    |    \--- com.android.support:support-v4:23.0.1
|    |    |         \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
|    \--- com.android.support:palette-v7:24.+ -> 24.2.1
|         +--- com.android.support:support-compat:24.2.1
|         |    \--- com.android.support:support-annotations:24.2.1
|         \--- com.android.support:support-core-utils:24.2.1
|              \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)

Probé muchas soluciones y no pude solucionarlo, hasta que cambie la com.android.support:appcompatversión android/app/build.gradle, me gustaría que esto pueda ayudar:

dependencies {
    compile project(':react-native-palette')
    compile project(':react-native-image-picker')
    compile project(':react-native-camera')
    compile fileTree(dir: "libs", include: ["*.jar"])
    // compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.android.support:appcompat-v7:24.2.1"
    compile "com.facebook.react:react-native:+"
}

parece que múltiples entradas no es un gran problema, la versión no coincide

matriz
fuente
0

Lo compile file('...')hice funcionar para un conflicto al aumentar minSdkVersion a 21 y habilitar multidex. No estoy seguro de si esa es la mejor solución, pero la única forma en que podría hacerlo funcionar en mi caso.

Nota: porque compile file('...')parece que no puede poner una excludecláusula por lo que esa opción no estaba disponible.

Ben Kleywegt
fuente
0

Tuve el mismo problema y mi solución está cambiando la versión de soporte '27. + '(27.1.0) a '27 .0.1'

Mingyong Gu
fuente
0

He tenido el mismo problema. En mi proyecto, tuve las siguientes dependencias:

  • appcompat-v7
  • android-support-v13

Por razones heredadas, el appcompat se obtuvo del repositorio de Google Maven, mientras que el soporte de Android era un .jar local.

Cuando descubrí esto, y reemplacé esta referencia local con una referencia de Maven, solo resolvió mi problema de compilación.

Aquí está la diferencia de mi aplicación / build.gradle:

ingrese la descripción de la imagen aquí

kall2sollies
fuente
0

Resolví todos mis problemas agregando esto a project.properties

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0
eatmeimadanish
fuente
0

Recibió el siguiente error

Error en la ejecución de la tarea ': aplicación: transformDexArchiveWithDexMergerForDebug'.

com.android.build.api.transform.TransformException: com.android.dex.DexException: Varios archivos dex definen Landroid / support / restrictint / ConstraintSet $ ​​1

Solución: ve a Build -> Clean Project

Ragunath CR
fuente
Hola, bienvenido a Stack Overflow. Pero, por favor, no repita las respuestas, además de tener 24 respuestas, ashishduh ya proporcionó la construcción limpia. ¡Gracias!
Elletlar