Dex Android fornisce un'eccezione BufferOverflowException durante la creazione


174

Quando compilo uno specifico progetto Android, e solo sul mio computer Windows, ottengo un java.nio.BufferOverflowExceptiondurante da Dex. Il problema si verifica sia quando si utilizza Eclipse sia quando si utilizza Ant.

L'output quando si utilizza 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

Quando si utilizza Eclipse il messaggio è più breve ma simile:

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

Come ho detto, non ho questo problema sul mio MacBook, anche se entrambi sono aggiornati alle ultime versioni degli strumenti di Android Build: 19.0.0.


1
Usi le biblioteche? Controlla la loro configurazione
Sherif elKhatib

@SherifelKhatib, solo la libreria di supporto e Google Analytics V2
beetstra

10
Dato che nessuno sembrava aver ancora presentato un problema su questo, ne ho presentato uno a: code.google.com/p/android/issues/detail?id=61710
CommonsWare

provando rimuovendo tutto Android sdk, eclipse e codice.
vpathak,

ottenere un errore simile su Centos x64:! SESSION 2013-11-07 17: 07: 35.305 eclipse.buildId = v22.3.0-887826 java.version = 1.7.0_40 java.vendor = Costanti BootLoader di Oracle Corporation: OS = linux, ARCH = x86_64, WS = gtk, NL = en_US Argomenti del framework: -product com.android.ide.eclipse.adt.package.product Argomenti della riga di comando: -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException at java.nio.Buffer.nextPutIndex (Buffer.java:519)
isti_spl

Risposte:


230

Non è necessario eseguire il downgrade degli strumenti di build a 18.1.1 1 , questo problema è stato risolto con gli strumenti di build 19.0.1 .

Se non è possibile utilizzare 19.0.1 per qualche motivo, allora:

Assicurati che il valore di android:targetSdkVersionin AndroidManifest.xml corrisponda target=android-<value>a project.properties . Se questi due valori non sono gli stessi, la compilazione con gli strumenti di build versione 19.0.0 terminerà con BufferOverflowException. fonte

C'è anche qualche indicazione dai commenti su questo post che devi scegliere come target almeno 19 (android-19). Lascia un commento se questa soluzione funziona anche se il tuo obiettivo è <19.

Ecco come la correzione cerca il mio progetto. Il problema AOSP correlato è # 61710.

1 Se è davvero necessario eseguire il downgrade, non è necessario disinstallare gli strumenti di compilazione 19.0.0, è sufficiente installare 18.1.1 e aggiungere sdk.buildtools=18.1.1al local.propertiesfile.


5
Questo non ha funzionato per me. Verificato tutto project.properties e targetSdk. Sto usando l'ultima versione di IntelliJ IDEA 13 Cardea. Fortunatamente, la disinstallazione di build-tools 19.0.0 ha risolto il problema.
James Wald,

3
Per farlo funzionare, ho anche dovuto impostare l'SDK di destinazione sull'ultima versione (19).
RolandK,

E assicurati anche che la versione sdk di destinazione sia scaricata con il tuo gestore sdk (questa è la causa del mio problema).
mrmoment,

1
Avevo l'obiettivo 10 in AndroidManifest.xml e project.properties. Ho provato a riavviare Eclipse e pulire, ma non ha aiutato. Quindi ho impostato target su 19 in config.properties e ha funzionato. Non ho provato a eseguire il downgrade degli strumenti di compilazione. (Target 15 non funzionava)
thomasa88,

5
Impostazione targetSdkVersion in manifest e target in properties, a 19 ha funzionato per me
Jaldip Katre

83

Prova quello che ha detto van :

Fare clic con il tasto destro del mouse su projectandroid toolsandroid support library.

Spero che questo ti aiuti :)


19
Grazie per questa soluzione, solo due clic e il problema è stato risolto !!!!! (sebbene nel mio menu fosse "aggiungi libreria di supporto")
Christopher,

57

Lo stesso problema qui. Ripristinato per creare gli strumenti 18.1.1, riavviato Eclipse e risolto il problema.


3
Sì, questo l'ha riparato. Ho dovuto eliminare manualmente la vecchia directory 19.0.0 però.
Beetstra,

Questo risolto anche per me, anche se sono tornato alla 18.0.1
NickT

1
Ho usato questa risposta e non ho dovuto tornare indietro: stackoverflow.com/questions/19727915/…
Jon

Ho verificato tutti i project.properties e targetSdk. Sto usando l'ultima versione di IntelliJ IDEA 13 Cardea e ho giocato anche con la versione SDK del progetto. La disinstallazione di build-tools 19.0.0 era l'unico modo per correggere la build per il mio progetto.
James Wald,

1
Grazie. Il ripristino della creazione degli strumenti 18.1.1 e l'eliminazione di 19 hanno risolto questo problema per me. Pensavo di impazzire
Darren,

50

Sono stato in grado di realizzare il mio progetto problema aggiungendo questa riga aggiuntiva:

sdk.build.tools=18.1.1

... al mio file project.properties , che è presente nella radice della cartella del progetto. Tutti gli altri approcci sembravano fallire per me.


penso che questo sia anche uno dei motivi alla base del problema. Non ho mai usato la versione 19 nel mio sdk di destinazione e ancora il problema stava arrivando. Probabilmente gli strumenti di costruzione di sdk erano impostati su 19 che dovevano essere ripristinati
saurav,

La destinazione utilizzata non determina la versione buildtools utilizzata.
Flusso

Ho aggiunto l'ultima libreria di supporto e ho aggiunto questa riga alle proprietà del progetto e il mio problema è stato risolto ... grazie
speedynomads

Sono sorpreso che abbia funzionato; è nella fonte AOSP come sdk.buildtools, no sdk.build.tools, e quello era il nome che ha funzionato per me.
Yoni Samlan,

7

Fai clic destro sul progetto >> Proprietà >> Android >> API Level 18 ha funzionato per me. Ma prima di farlo ho fatto clic destro sul progetto >> Strumenti Android >> Aggiungi libreria di supporto e riavviato Eclipse . Potrebbe essere necessario giocare con il livello API selezionato .


3
Che dire del livello API inferiore a 18? Come possiamo eseguire un'applicazione al di sotto del livello API 18?
Jayesh,

Ho dovuto aggiungere il progetto-> Strumenti Android-> Aggiungi libreria di supporto e installare ADT 19.0.1 Support Library. Dopodiché genera apk bene.
user914425

7

Dopo l'installazione del nuovo SDK, è presente una nuova cartella, "Dipendenze Android", nel file di progetto. Se fai clic con il pulsante destro del mouse e lo rimuovi dal percorso di creazione, sarai nuovamente in grado di creare il tuo progetto.


Ho notato che questa cartella causerebbe un duplicato del JAR. Ma eliminarlo non ha risolto il mio problema.
Salsero69,

@ Salsero69 Stai usando un progetto di biblioteca come riferimento nel tuo progetto attuale?
Mahendra Liya,

5

Aggiornare

right click your project > android tools > android support library

Pulisci il tuo progetto e prova a costruirlo.



3

Ho risolto questo problema senza scaricare la libreria di supporto o ripristinare gli strumenti di build su 18.1.1. Ho semplicemente cambiato il livello API in 16+ e il problema è svanito . Spero che possa essere d'aiuto.


Come hai cambiato il livello API in 16?
Peter Mortensen il

Ho semplicemente fatto clic con il pulsante destro del mouse sul mio progetto e ho selezionato Android dall'elenco. Dovrebbe apparire un elenco di versioni API Android installate, selezionare quella che ha 16 come livello API (4.1.2).
Zsolt Boldizsár,

3

Nessuna delle altre soluzioni qui ha funzionato per me dopo l'aggiornamento ad Android Studio 0.4.0 e Gradle 1.9.

Ho risolto il problema scaricando Build Tools 19.0.1 e aggiornando la seguente riga nei miei file build.gradle:

buildToolsVersion '19.0.0'

per

buildToolsVersion '19.0.1'

Sì, questo problema sembra risolto in 19.0.1. Funzionava bene anche con "debug formica".
Robert

2

Per quelli con problemi con IntelliJ IDEA 13, disinstallare Build Tools 19.


2

Aveva lo stesso problema con la versione di destinazione 19su entrambi project.propertiese AndroidManifest.xmlcon Ant.

Risolto da:

  • disinstallato Android SDK Build-Tools 19.0.1
  • installato Android SDK Build-Tools 19.0.2

Penso che @ Al-Kathiri-Khalid sia perfetto. Il problema è dovuto solo all'assenza del supporto per il livello API in Build Tools.


1

Ho avuto lo stesso problema, anche se il mio progetto non utilizzava la libreria di supporto. L'aggiunta di libs / android-support-v4.jar al progetto ha aggirato il problema senza la necessità di ripristinare gli strumenti di generazione dalla v19.


1

Ho risolto questo problema. Apporta solo questa modifica nel file delle proprietà del progetto:

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

E nel file manifest:

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

0

Aggiungi il file Library nel progetto .. Progetto-> clic destro-> Proprietà-> android-> Libreria-> fai clic su Aggiungi e seleziona il Progetto libreria e dai applica e ok .. quindi, pulisci il progetto ed esegui di nuovo .. se vuoi riavviare l'eclissi ..

Inoltre, a volte, è necessario aggiornare gli strumenti di build dell'SDK Android.


0

Ciò che ha funzionato per me è stato questo: ho aperto il file project.properties dalla radice del mio progetto e sono cambiato target=android-8intarget=android-17


0

java.nio.BufferOverflowException durante from dex error Questo significa che non hai l' API di supporto per quel livello, quindi la compilazione fallisce, ci sono molti modi per risolverlo.

Controlla il tuo file manifest usi-sdk android: minSdkVersion = "4" e android: targetSdkVersion = "14"

Uno dei seguenti risolverà il problema: -

  • Scarica il livello API richiesto (potrebbe richiedere del tempo) ed esegui nuovamente l'applicazione
  • La correzione sporca rapida modifica il target del progetto in project.properties nel nuovo target target = android-4
  • Correzione rapida rapida, modifica di SdkVersion nel file manifest e Pulizia del progetto per aggiungere le modifiche a project.properties (Il mio preferito)

0

Ho rimosso Android SDK ed Eclipse precedenti . Ho installato il bundle ADT e funziona ...

Ciò ha risolto il problema di BufferOverflow su Dex che è iniziato dopo aver ottenuto l' API 19. In precedenza utilizzavo Eclipse con Android SDK installato come pacchetto aggiuntivo.


Da dove posso installare il pacchetto adt?
Jayesh,

0

Fare clic con il tasto destro su Progetto >> Proprietà >> Android e selezionare Livello API maggiore di 15

O

Aggiungi google-play-services_lib al tuo progetto facendo clic con il tasto destro del mouse sul progetto e selezionando Progetto >> Proprietà >> Android >> Aggiungi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.