Android dex da una BufferOverflowException al compilar

174

Al compilar un proyecto específico de Android, y solo en mi máquina con Windows, obtengo un efecto java.nio.BufferOverflowExceptionde dex. El problema ocurre tanto cuando se usa Eclipse como cuando se usa Ant.

La salida cuando se usa Ant es:

...
  [dex] Pre-Dexing C:\MyProject\libs\android-support-v4.jar -> android-support-v4-5f5341d3c1b10a79d7d93f9c1e64421e.jar
  [dex] Converting compiled files and external libraries into C:\MyProject\bin\classes.dex...
   [dx]
   [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
   [dx] java.nio.BufferOverflowException
   [dx]     at java.nio.Buffer.nextPutIndex(Buffer.java:499)
   [dx]     at java.nio.HeapByteBuffer.putShort(HeapByteBuffer.java:296)
   [dx]     at com.android.dex.Dex$Section.writeShort(Dex.java:818)
   [dx]     at com.android.dex.Dex$Section.writeTypeList(Dex.java:870)
   [dx]     at com.android.dx.merge.DexMerger$3.write(DexMerger.java:437)
   [dx]     at com.android.dx.merge.DexMerger$3.write(DexMerger.java:423)
   [dx]     at com.android.dx.merge.DexMerger$IdMerger.mergeUnsorted(DexMerger.java:317)
   [dx]     at com.android.dx.merge.DexMerger.mergeTypeLists(DexMerger.java:423)
   [dx]     at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:163)
   [dx]     at com.android.dx.merge.DexMerger.merge(DexMerger.java:187)
   [dx]     at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
   [dx]     at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
   [dx]     at com.android.dx.command.dexer.Main.run(Main.java:230)
   [dx]     at com.android.dx.command.dexer.Main.main(Main.java:199)
   [dx]     at com.android.dx.command.Main.main(Main.java:103)

BUILD FAILED
C:\Users\Jaap\android-sdks\tools\ant\build.xml:892: The following error occurred while executing this line:
C:\Users\Jaap\android-sdks\tools\ant\build.xml:894: The following error occurred while executing this line:
C:\Users\Jaap\android-sdks\tools\ant\build.xml:906: The following error occurred while executing this line:
C:\Users\Jaap\android-sdks\tools\ant\build.xml:284: null returned: 2

Cuando se usa Eclipse, el mensaje es más corto pero similar:

[2013-11-01 14:29:44] APK file is not created for Project: 
[2013-11-01 14:29:46 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
[2013-11-01 14:29:46 - MyProject] Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

Como dije, no tengo este problema en mi MacBook, a pesar de que ambos están actualizados a las últimas versiones de las herramientas de compilación de Android: 19.0.0.

Beetstra
fuente
1
¿Usas bibliotecas? Compruebe su configuración
Sherif elKhatib 01 de
@SherifelKhatib, solo la biblioteca de soporte y Google Analytics V2
beetstra
10
Dado que nadie parecía haber presentado un problema al respecto todavía, he presentado uno en: code.google.com/p/android/issues/detail?id=61710
CommonsWare
intentando eliminar todos los sdk, eclipse y códigos de Android.
vpathak
obteniendo un error similar en Centos x64:! SESSION 2013-11-07 17: 07: 35.305 eclipse.buildId = v22.3.0-887826 java.version = 1.7.0_40 java.vendor = Constantes de Oracle Corporation BootLoader: OS = linux, ARCH = x86_64, WS = gtk, NL = en_US Argumentos del marco: -product com.android.ide.eclipse.adt.package.product Argumentos de la línea de comandos: -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException en java.nio.Buffer.nextPutIndex (Buffer.java:519)
isti_spl

Respuestas:

230

No es necesario degradar las herramientas de compilación a 18.1.1 1 , este problema se soluciona con las herramientas de compilación 19.0.1 .

Si no puede usar 19.0.1 por alguna razón, entonces:

Asegúrese de que el valor de android:targetSdkVersionen AndroidManifest.xml coincida target=android-<value>en project.properties . Si estos dos valores no son iguales, la compilación con herramientas de compilación versión 19.0.0 finalizará en BufferOverflowException. Fuente

También hay alguna indicación de los comentarios en esta publicación de que debe apuntar al menos a 19 (android-19). Deje un comentario si esta solución también funciona si su objetivo es <19.

Así es como se ve la solución para mi proyecto. El problema relacionado de AOSP es # 61710.

1 Si realmente necesita degradar, no necesita desinstalar las herramientas de compilación 19.0.0, simplemente instale 18.1.1 y agréguelo sdk.buildtools=18.1.1al local.propertiesarchivo.

Fluir
fuente
55
Esto no funcionó para mí. Verificado todos los project.properties y targetSdk. Estoy usando la última versión de IntelliJ IDEA 13 Cardea. Afortunadamente, la desinstalación de las herramientas de compilación 19.0.0 solucionó la compilación.
James Wald
3
Para que funcione, también tuve que configurar el SDK de destino a la última versión (19).
RolandK
Y también asegúrese de que la versión de SDK de destino se descargue con su administrador de SDK (esta es la causa de mi problema).
mrmoment
1
Tenía target 10 en AndroidManifest.xml y project.properties. Intenté reiniciar Eclipse y limpiar, pero no ayudó. Luego configuré target a 19 en config.properties y funcionó. No he intentado degradar las herramientas de compilación. (Target 15 no funcionó)
thomasa88
55
Establecer targetSdkVersion en manifiesto y target en propiedades, a 19 funcionó para mí
Jaldip Katre
83

Prueba qué furgoneta dijo :

Haga clic derecho en su projectandroid toolsandroid support library .

Espero que esto ayude :)

Lolo Me
fuente
19
¡Gracias por esta solución, solo dos clics y el problema se resolvió! (aunque en mi menú, era "agregar biblioteca de soporte")
Christopher
57

El mismo problema aqui. Volvió a construir herramientas 18.1.1, reinició Eclipse y eso lo solucionó.

Stefano
fuente
3
Sí, eso lo arregló. Sin embargo, tuve que eliminar manualmente el antiguo directorio 19.0.0.
beetstra 01 de
Esto también me lo arregló, aunque volví a 18.0.1
NickT
1
Utilicé esta respuesta y no tuve que volver atrás: stackoverflow.com/questions/19727915/…
Jon
Verifiqué todos los project.properties y targetSdk. Estoy usando la última versión de IntelliJ IDEA 13 Cardea y también jugué con la versión SDK del proyecto. Desinstalar build-tools 19.0.0 fue la única forma de arreglar la compilación de mi proyecto.
James Wald
1
Gracias. Volviendo a las herramientas de compilación 18.1.1 y eliminando 19 me arregló esto. Pensé que me estaba volviendo loco
Darren
50

Pude lograr que mi proyecto problemático se construyera agregando esta línea adicional:

sdk.build.tools=18.1.1

... a mi archivo project.properties , que está presente en la raíz de la carpeta del proyecto. Todos los otros enfoques parecían fallar para mí.

mrrrk
fuente
Creo que esta es también una de las razones detrás del problema. Nunca utilicé la versión 19 en mi SDK de destino y el problema seguía llegando. Probablemente las herramientas de compilación sdk se establecieron en 19, que tuvieron que ser revertidas
Saurav
El objetivo utilizado no determina la versión de buildtools utilizada.
Flujo
Agregué la última biblioteca de soporte y agregué esta línea a las propiedades del proyecto y mi problema se solucionó ... gracias
speedynomads
Me sorprende que esto haya funcionado; está en la fuente de AOSP como sdk.buildtools, no sdk.build.tools, y ese fue el nombre que funcionó para mí.
Yoni Samlan
7

Haga clic derecho en proyecto >> Propiedades >> Android >> API Level 18 funcionó para mí. Pero antes de hacerlo, hice clic derecho en proyecto >> Herramientas de Android >> Agregar biblioteca de soporte y reinicié Eclipse . Puede que tenga que jugar con su nivel de API seleccionado .

aprendiz
fuente
3
¿Qué pasa con el nivel API por debajo de 18? ¿Cómo podemos ejecutar la aplicación por debajo del nivel 18 de API?
Jayesh
Tuve que agregar proyecto-> Herramientas de Android-> Agregar biblioteca de soporte e instaló la biblioteca de soporte ADT 19.0.1. Después de eso genera apk bien.
user914425
7

Después de la instalación del nuevo SDK, hay una nueva carpeta, "Dependencias de Android", debajo de su archivo de proyecto. Si hace clic derecho y lo elimina de la ruta de compilación, podrá volver a compilar su proyecto.

Mahendra Liya
fuente
Noté que esta carpeta causaría un problema JAR duplicado. Pero eliminarlo no resolvió mi problema.
Salsero69
@ Salsero69 ¿Está utilizando un proyecto de biblioteca como referencia en su proyecto real?
Mahendra Liya
5

Actualizar

right click your project > android tools > android support library

Limpia tu proyecto e intenta construirlo.

Dura
fuente
3

Solucioné este problema sin descargar la biblioteca de soporte o revertir las herramientas de compilación a 18.1.1. Simplemente cambié el nivel de API a 16+ y el problema desapareció . Espero que ayude.

Zsolt Boldizsár
fuente
¿Cómo cambiaste el nivel de API a 16?
Peter Mortensen
Simplemente hice clic derecho en mi proyecto y seleccioné Android de la lista. Debería mostrar una lista de versiones de API de Android instaladas, seleccione la que tenga 16 como nivel de API (4.1.2).
Zsolt Boldizsár
3

Ninguna de las otras soluciones aquí funcionó para mí después de actualizar a Android Studio 0.4.0 y Gradle 1.9.

Resolví el problema descargando Build Tools 19.0.1 y actualizando la siguiente línea en mis archivos build.gradle:

buildToolsVersion '19.0.0'

a

buildToolsVersion '19.0.1'
Jacob Tabak
fuente
Sí, este problema parece solucionado en 19.0.1. También funcionó bien con "ant depuración".
Robert
2

Para aquellos que enfrentan problemas con IntelliJ IDEA 13, desinstale Build Tools 19.

Adí
fuente
2

Tuve el mismo problema con la versión de destino 19en ambos project.propertiesy AndroidManifest.xmlcon Ant.

Solucionado por:

  • Desinstalado Android SDK Build-Tools 19.0.1
  • Instalado Android SDK Build-Tools 19.0.2

Creo que @ Al-Kathiri-Khalid es acertada. El problema solo se debe a la falta de soporte para el nivel de API en Build Tools.

Kontinuity
fuente
1

Tuve el mismo problema, aunque mi proyecto no utilizó la biblioteca de soporte. Agregar libs / android-support-v4.jar al proyecto solucionó el problema sin necesidad de revertir las herramientas de compilación desde v19.

Jim Vitek
fuente
1

Resolví este problema. Simplemente haga este cambio en el archivo de propiedades del proyecto:

target=android-18
sdk.build.tools=18.1.1

Y en el archivo de manifiesto:

uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"
Ravi
fuente
0

Agregue el archivo de la Biblioteca en el proyecto .. Proyecto-> haga clic con el botón derecho-> Propiedades-> android-> Biblioteca-> haga clic en Agregar y seleccione el Proyecto de la Biblioteca y aplique aplicar y ok ... luego, limpie el proyecto y vuelva a ejecutarlo ... si quiere reiniciar el eclipse ..

Y también, a veces, necesita actualizar las herramientas de compilación del SDK de Android.

harikrishnan
fuente
0

Lo que funcionó para mí fue esto: abrí el archivo project.properties desde la raíz de mi proyecto y cambié target=android-8atarget=android-17

Chianiusan Marian
fuente
0

java.nio.BufferOverflowException durante el error dex Esto significa que no tiene la API de soporte para ese nivel por lo tanto, la compilación falla, hay varias formas de solucionar esto.

Verifique que su archivo de manifiesto use-sdk android: minSdkVersion = "4" y android: targetSdkVersion = "14"

Cualquiera de los siguientes solucionará el problema:

  • Descargue el nivel de API requerido (esto puede llevar tiempo) y vuelva a ejecutar su aplicación
  • Solución sucia rápida cambie su objetivo de Proyecto en project.properties a su nuevo objetivo objetivo = android-4
  • Solución de limpieza rápida, cambie la SdkVersion en su manifiesto y limpie su proyecto para agregar los cambios a su proyecto.propiedades (Mi favorito)
Al-Kathiri Khalid
fuente
0

Eliminé el SDK de Android anterior y Eclipse . Instalé el paquete ADT y funciona ...

Esto solucionó el problema de BufferOverflow en Dex que comenzó después de que obtuve la API 19. Anteriormente estaba usando Eclipse con Android SDK instalado como un paquete adicional.

vpathak
fuente
¿Desde dónde puedo instalar adt bundle?
Jayesh
0

Haga clic derecho en Proyecto >> Propiedades >> Android y seleccione Nivel de API superior a 15

O

Agregue google-play-services_lib a su proyecto haciendo clic derecho en el proyecto y seleccionando Proyecto >> Propiedades >> Android >> Agregar

Junaid
fuente