O dex do Android fornece uma BufferOverflowException ao criar


174

Ao compilar um projeto Android específico, e apenas na minha máquina Windows, recebo um java.nio.BufferOverflowExceptiondex. O problema ocorre ao usar o Eclipse e ao usar o Ant.

A saída ao usar Ant é:

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

Ao usar o Eclipse, a mensagem é mais curta, mas semelhante:

[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 eu disse, não tenho esse problema no meu MacBook, mesmo que ambos tenham sido atualizados para as versões mais recentes das ferramentas do Android Build: 19.0.0.


1
Você usa bibliotecas? Verifique a sua configuração
Sherif elKhatib

@SherifelKhatib, apenas a biblioteca de suporte e Google Analytics V2
beetstra

10
Como ninguém parecia ter apresentado um problema sobre isso ainda, eu arquivei um em: code.google.com/p/android/issues/detail?id=61710
CommonsWare

tentando remover todos os android sdk, eclipse e código.
vpathak

obtendo erro semelhante no 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 do Oracle Corporation BootLoader: OS = linux, ARCH = x86_64, WS = gtk, NL = en_US Argumentos da estrutura: -product com.android.ide.eclipse.adt.package.product Argumentos da linha de comando: -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException em java.nio.Buffer.nextPutIndex (Buffer.java:519)
isti_spl

Respostas:


230

Não é necessário fazer o downgrade das ferramentas de construção para 18.1.1 1 , esse problema foi corrigido com as ferramentas de construção 19.0.1 .

Se você não pode usar o 19.0.1 por algum motivo, então:

Certifique-se de que o valor android:targetSdkVersionem AndroidManifest.xml corresponde target=android-<value>em project.properties . Se esses dois valores não forem os mesmos, a criação com a versão 19.0.0 das ferramentas de construção terminará em BufferOverflowException. Fonte

Há também alguma indicação nos comentários desta postagem de que você precisa segmentar pelo menos 19 (android-19). Deixe um comentário se essa solução também funcionar se seu destino for <19.

É assim que a correção fica para o meu projeto. O problema AOSP relacionado é # 61710.

1 Se você realmente precisa fazer o downgrade, não precisa desinstalar as ferramentas de compilação 19.0.0, basta instalar o 18.1.1 e adicioná sdk.buildtools=18.1.1-lo ao local.propertiesarquivo.


5
Isso não funcionou para mim. Verificados todos os project.properties e targetSdk. Estou usando a versão mais recente do IntelliJ IDEA 13 Cardea. Felizmente, a desinstalação das ferramentas de compilação 19.0.0 corrigiu a compilação.
James Wald

3
Para que eu funcionasse, também tive que definir o SDK de destino para a versão mais recente (19).
RolandK

E também verifique se a versão do sdk de destino foi baixada com o seu gerenciador de sdk (essa é a causa do meu problema).
mrmoment

1
Eu tinha o alvo 10 no AndroidManifest.xml e no project.properties. Tentei reiniciar o Eclipse e limpar, mas não ajudou. Então eu configurei target para 19 em config.properties e funcionou. Não tentei fazer o downgrade das ferramentas de construção. (Meta 15 não funcionou)
thomasa88

5
Definir targetSdkVersion no manifesto e alvo nas propriedades, a 19 funcionou para mim
Jaldip Katre

83

Experimente o que a van disse:

Clique com o botão direito do mouse em projectandroid toolsandroid support library.

Espero que isto ajude :)


19
Obrigado por esta solução, apenas dois cliques e o problema foi resolvido !!!!! (embora no meu menu, que era "biblioteca de suporte add")
Christopher

57

Mesmo problema aqui. Revertida para a construção das ferramentas 18.1.1, reiniciado o Eclipse e corrigido.


3
Sim, isso consertou. Tinha que excluir manualmente o antigo diretório 19.0.0.
beetstra

Isso também foi corrigido para mim, embora eu tenha revertido para 18.0.1
NickT

1
Eu usei essa resposta e eu não tenho que voltar: stackoverflow.com/questions/19727915/...
Jon

Eu verifiquei todas as project.properties e targetSdk. Estou usando a versão mais recente do IntelliJ IDEA 13 Cardea e também joguei com a versão SDK do projeto. Desinstalar as ferramentas de compilação 19.0.0 foi a única maneira de corrigir a compilação do meu projeto.
James Wald

1
Obrigado. A reversão para a construção das ferramentas 18.1.1 e a exclusão de 19 corrigiram isso para mim. Eu pensei que eu estava ficando louco
Darren

50

Consegui compilar meu projeto problemático adicionando esta linha extra:

sdk.build.tools=18.1.1

... no meu arquivo project.properties , presente na raiz da pasta do projeto. Todas as outras abordagens pareciam falhar para mim.


Eu acho que essa também é uma das razões por trás do problema. Eu nunca usei a versão 19 no meu sdk de destino e ainda assim o problema estava chegando. Provavelmente as ferramentas de compilação SDK foi definido para 19, que teve que ser revertido
Saurav

O destino usado não determina a versão do buildtools usada.
Fluxo de

Eu adicionei o mais recente biblioteca de suporte e acrescentou esta linha para as propriedades do projeto e meu problema foi corrigido ... obrigado
speedynomads

Estou surpreso que isso funcionou; está na fonte AOSP como sdk.buildtools, não sdk.build.tools, e esse foi o nome que funcionou para mim.
Yoni Samlan

7

Clique com o botão direito do mouse em projeto >> Propriedades >> Android >> API Nível 18 funcionou para mim. Mas antes de fazer isso, clique com o botão direito do mouse em projeto >> Ferramentas Android >> Adicionar biblioteca de suporte e reiniciei o Eclipse . Talvez você precise brincar com o nível de API selecionado .


3
E o nível da API abaixo de 18? Como podemos executar aplicativos abaixo do nível 18 da API?
Jayesh

Eu tive que adicionar projeto-> Ferramentas Android-> Adicionar Biblioteca de Suporte e instalar a Biblioteca de Suporte ADT 19.0.1. Depois disso, gera apk fino.
user914425

7

Após a instalação do novo SDK, há uma nova pasta, "Android Dependencies", no arquivo do seu projeto. Se você clicar com o botão direito do mouse e removê-lo do caminho de compilação, poderá criar seu projeto novamente.


Notei que esta pasta causaria um problema JAR duplicado. Mas excluí-lo não resolveu meu problema.
Salsero69

@ Salsero69 Você está usando um projeto de biblioteca como referência no seu projeto real?
Mahendra Liya

5

Atualizar

right click your project > android tools > android support library

Limpe seu projeto e tente criar.



3

Corrigi esse problema sem baixar a biblioteca de suporte ou reverter as ferramentas de construção para 18.1.1. Simplesmente alterei o nível da API para 16+ e o problema desapareceu . Espero que ajude.


Como você alterou o nível da API para 16?
precisa

Eu simplesmente cliquei com o botão direito do mouse no meu projeto e selecionei o Android na lista. Ele deve mostrar uma lista de versões da API do Android instaladas, selecione a que tem 16 como nível da API (4.1.2).
Zsolt Boldizsár

3

Nenhuma das outras soluções aqui funcionou para mim após a atualização para o Android Studio 0.4.0 e Gradle 1.9.

Resolvi o problema baixando o Build Tools 19.0.1 e atualizando a seguinte linha nos meus arquivos build.gradle:

buildToolsVersion '19.0.0'

para

buildToolsVersion '19.0.1'

Sim, esse problema parece corrigido em 19.0.1. Também funcionou bem com "ant debug".
Robert

2

Para aqueles que enfrentam problemas com o IntelliJ IDEA 13, desinstale o Build Tools 19.


2

Teve o mesmo problema com a versão de destino 19em ambos project.propertiese AndroidManifest.xmlcom o Ant.

Corrigido por:

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

Eu acho que @ Al-Kathiri-Khalid está no local. O problema ocorre apenas devido à falta de suporte para o nível da API nas Ferramentas de Construção.


1

Eu tive o mesmo problema, apesar de meu projeto não usar a biblioteca de suporte. A adição de libs / android-support-v4.jar ao projeto resolveu o problema sem precisar reverter as ferramentas de construção da v19.


1

Eu resolvi esse problema. Basta fazer essa alteração no arquivo de propriedades do projeto:

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

E no arquivo de manifesto:

uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"

0

Adicione o arquivo Library no projeto. Projeto-> clique com o botão direito-> Propriedades-> android-> Biblioteca-> clique em Incluir e selecione o Projeto Biblioteca e dê aplicar e ok. Em seguida, limpe o projeto e execute novamente .. se você quer reiniciar o eclipse ..

E também, às vezes, é necessário atualizar as ferramentas de compilação do SDK do Android.


0

O que funcionou para mim foi o seguinte: abri o arquivo project.properties a partir da raiz do meu projeto e mudei target=android-8paratarget=android-17


0

java.nio.BufferOverflowException durante o erro fromx Isso significa que você não tem a API de suporte para esse nível portanto, a compilação falha, há várias maneiras de corrigir isso.

Verifique se o arquivo de manifesto usa-sdk android: minSdkVersion = "4" e android: targetSdkVersion = "14"

Qualquer uma das opções abaixo corrigirá o problema: -

  • Faça o download do nível de API necessário (isso pode levar tempo) e execute seu aplicativo novamente
  • Correção suja rápida altere o destino do projeto em project.properties para o novo destino desejado = android-4
  • Correção de limpeza rápida, altere a SdkVersion em seu manifesto e Limpe seu projeto para adicionar as alterações em seu project.properties (Meu favorito)

0

Eu removi o Android SDK e o Eclipse anteriores . Instalei o pacote ADT e ele funciona ...

Isso corrigiu o problema do BufferOverflow no Dex iniciado após a API 19. Eu estava usando o Eclipse com o Android SDK instalado como um pacote complementar.


De onde eu posso instalar o pacote adt?
Jayesh

0

Clique com o botão direito do mouse em Projeto >> Propriedades >> Android e selecione Nível da API maior que 15

OU

Adicione google-play-services_lib ao seu projeto clicando com o botão direito do mouse no projeto e selecionando Projeto >> Propriedades >> Android >> Adicionar

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.