El uso de buildToolsVersion 23 falla porque varios archivos dex definen 'AnimRes'

Antes de reclamar DUPLICADO por favor lea la pregunta.

Esto sólo ocurre con la última versión de las herramientas de compilación. Las versiones anteriores no muestran este problema. Ya he probado las soluciones ofrecidas en otras preguntas aquí para múltiples definiciones de @AnimRes . Ninguno ha ayudado hasta ahora, por lo que he publicado una nueva pregunta. Los mismos síntomas, causa diferente, solución diferente.

Puedo construir sin problema al usar buildToolsVersion 22.0.1 , pero cuando cambie a buildToolsVersion 23 la compilación falla con error

EXCEPCION INESPERADA DE NIVEL SUPERIOR: com.android.dex.DexException: Varios archivos dex definen Landroid / support / annotation / AnimRes; En com.android.dx.merge.DexMerger.readSortableTypes (DexMerger.java:596) en com.android.dx.merge.DexMerger.getSortedTypes (DexMerger.java:554) en com.android.dx.merge.DexMerger.mergeClassDefs (DexMerger.java:535) en com.android.dx.merge.DexMerger.mergeDexes (DexMerger.java:171) en com.android.dx.merge.DexMerger.merge (DexMerger.java:189) en com.android. Dx.command.dexer.Main.mergeLibraryDexBuffers (Main.java:502) en com.android.dx.command.dexer.Main.runMonoDex (Main.java:334) en com.android.dx.command.dexer.Main. Run (Main.java:277) en com.android.dx.command.dexer.Main.main (Main.java:245) en com.android.dx.command.Main.main (Main.java:106)

Esta es una lista de mis dependencias:

 provided 'org.projectlombok:lombok:1.16.4' compile 'com.android.support:support-v4:23.0.0' compile 'com.android.support:appcompat-v7:23.0.0' compile 'com.android.support:support-v13:23.0.0' compile 'com.android.support:cardview-v7:23.0.0' compile 'com.android.support:palette-v7:23.0.0' compile 'com.google.code.findbugs:jsr305:2.0.1' compile 'com.google.guava:guava:18.0' compile 'com.github.chrisbanes.photoview:library:1.2.3' compile 'org.apache.commons:commons-lang3:3.4' compile 'commons-io:commons-io:2.4' compile 'commons-codec:commons-codec:1.10' compile 'com.jakewharton:butterknife:7.0.1' compile 'com.squareup:otto:1.3.8' compile 'org.jsoup:jsoup:1.7.2' compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.squareup.retrofit:retrofit:1.9.0' compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0' compile 'com.squareup.okio:okio:1.5.0' compile 'com.flaviofaria:kenburnsview:1.0.6' compile 'com.edmodo:cropper:1.0.1' compile 'com.getbase:floatingactionbutton:1.10.0' compile 'com.nispok:snackbar:2.10.10' compile 'com.github.ksoichiro:android-observablescrollview:1.5.2' compile 'in.srain.cube:grid-view-with-header-footer:1.0.12' compile 'de.hdodenhof:circleimageview:1.3.0' 

Para asegurar que todos (incluido Espresso) utilice la misma versión de las support-annotations tengo lo siguiente en mi archivo de compilación:

 configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:23.0.0' } 

Eliminar esto causará otros fallos.

¿Es esto un error posible en las herramientas de construcción o estoy haciendo algo mal? He intentado establecer Incremental false en dexOptions . No ayudó.

Uso de la ./gradlew -q app:dependencies Tengo lo siguiente:

 +--- com.android.support:support-v4:23.0.0 | \--- com.android.support:support-annotations:23.0.0 +--- com.android.support:appcompat-v7:23.0.0 | \--- com.android.support:support-v4:23.0.0 (*) +--- com.android.support:support-v13:23.0.0 | \--- com.android.support:support-v4:23.0.0 (*) +--- com.android.support:cardview-v7:23.0.0 +--- com.android.support:palette-v7:23.0.0 | \--- com.android.support:support-v4:23.0.0 (*) +--- com.google.code.findbugs:jsr305:2.0.1 +--- com.google.guava:guava:18.0 +--- com.github.chrisbanes.photoview:library:1.2.3 | \--- com.android.support:support-v4:19.+ -> 23.0.0 (*) +--- org.apache.commons:commons-lang3:3.4 +--- commons-io:commons-io:2.4 +--- commons-codec:commons-codec:1.10 +--- com.jakewharton:butterknife:7.0.1 +--- com.squareup:otto:1.3.8 +--- org.jsoup:jsoup:1.7.2 +--- com.squareup.picasso:picasso:2.5.2 +--- com.squareup.retrofit:retrofit:1.9.0 | \--- com.google.code.gson:gson:2.3.1 +--- com.squareup.okhttp:okhttp:2.4.0 | \--- com.squareup.okio:okio:1.4.0 -> 1.5.0 +--- com.squareup.okhttp:okhttp-urlconnection:2.4.0 | \--- com.squareup.okhttp:okhttp:2.4.0 (*) +--- com.squareup.okio:okio:1.5.0 +--- com.flaviofaria:kenburnsview:1.0.6 +--- com.edmodo:cropper:1.0.1 +--- com.getbase:floatingactionbutton:1.10.0 | \--- com.android.support:support-annotations:22.2.0 -> 23.0.0 +--- com.nispok:snackbar:2.10.10 | +--- com.android.support:recyclerview-v7:22.0.0 | | +--- com.android.support:support-v4:22.0.0 -> 23.0.0 (*) | | \--- com.android.support:support-annotations:22.0.0 -> 23.0.0 | \--- com.android.support:support-annotations:22.0.0 -> 23.0.0 +--- com.github.ksoichiro:android-observablescrollview:1.5.2 | \--- com.android.support:recyclerview-v7:21.0.0 -> 22.0.0 (*) +--- in.srain.cube:grid-view-with-header-footer:1.0.12 \--- de.hdodenhof:circleimageview:1.3.0 

Actualización : Se corrige en la versión 23.0.1 de las herramientas de compilación ya que el directorio de support ya no está incluido en renderscript-v8.jar

El culpable es la versión de renderscript-v8.jar que se incluye en las herramientas de compilación.

Creo que esta salida del tree lo dice todo:

 C:. ├───renderscript-v8-22.0.01 │ ├───android │ │ └───support │ │ └───v8 │ │ └───renderscript │ └───META-INF └───renderscript-v8-23 ├───android │ └───support │ *** ├───annotation │ └───v8 │ └───renderscript └───META-INF 

He etiquetado los directorios con la versión de las herramientas de compilación que los incluía. Observe el subdirectorio de annotations en renderscript-v8-23 que no existe en renderscript-v8-22.0.01 .

Ya hay un informe sobre el problema aquí: https://code.google.com/p/android/issues/detail?id=179493 Y un duplicado aquí: https://code.google.com/p/android/ Problemas / detalle? Id = 181697

No puedo decir que entiendo esta solución – o que es necesariamente una buena solución, pero tiene mi compilación de aplicaciones de nuevo:

 configurations.all { exclude group: 'com.android.support', module: 'support-annotations' } 

También, vea: Obtención del error dex múltiple al usar lib de soporte de script de procesamiento

Crédito a Luboš Staráček por esta solución

  • ¿Es posible Proguard un módulo de biblioteca de Android, pero no el módulo de aplicación?
  • ¿Cómo puedo habilitar javadoc para la biblioteca de soporte de Android?
  • Android Studio build error - Múltiples archivos dex define Landroid / support / v4 /
  • AppCompat v7: ¿Debo usar Framework FragmentManager o SupportFragmentManager?
  • NoSuchMethodError getChildFragmentManager ()
  • FragmentTransation setCustomAnimations no funciona
  • Confundido por la navegación ActionBar UP
  • Establecer el estado de BottomSheetDialogFragment a expandido
  • Detenga Android Studio con la ayuda de la biblioteca
  • Botón de acción flotante Android API 19 (KitKat)
  • FragmentActivity no se puede probar a través de ActivityInstrumentationTestCase2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.