Android Dex gibt beim Erstellen eine BufferOverflowException aus


174

Beim Kompilieren eines bestimmten Android-Projekts und nur auf meinem Windows-Computer erhalte ich ein java.nio.BufferOverflowExceptionwährend von dex. Das Problem tritt sowohl bei Verwendung von Eclipse als auch bei Verwendung von Ant auf.

Die Ausgabe bei Verwendung von Ant ist:

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

Bei Verwendung von Eclipse ist die Nachricht kürzer, aber ähnlich:

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

Wie gesagt, ich habe dieses Problem nicht auf meinem MacBook, obwohl beide auf die neuesten Versionen der Android Build-Tools aktualisiert wurden: 19.0.0.


1
Verwenden Sie Bibliotheken? Überprüfen Sie ihre Einrichtung
Sherif elKhatib

@SherifelKhatib, nur die Support-Bibliothek und Google Analytics V2
Beetstra

10
Da noch niemand ein Problem zu diesem Thema eingereicht zu haben schien, habe ich eines unter folgender Adresse
CommonsWare

Versuchen Sie, indem Sie alle Android SDK, Eclipse und Code entfernen.
Vpathak

ähnlicher Fehler unter Centos x64 :! SESSION 2013-11-07 17: 07: 35.305 eclipse.buildId = v22.3.0-887826 java.version = 1.7.0_40 java.vendor = Oracle Corporation BootLoader-Konstanten: OS = Linux, ARCH = x86_64, WS = gtk, NL = en_US Framework-Argumente: -product com.android.ide.eclipse.adt.package.product Befehlszeilenargumente: -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException bei java.nio.Buffer.nextPutIndex (Buffer.java:519)
isti_spl

Antworten:


230

Die Build-Tools müssen nicht auf 18.1.1 1 zurückgestuft werden. Dieses Problem wurde mit den Build-Tools 19.0.1 behoben .

Wenn Sie 19.0.1 aus irgendeinem Grund nicht verwenden können, dann:

Achten Sie darauf , dass der Wert android:targetSdkVersionin AndroidManifest.xml Spiele target=android-<value>in project.properties . Wenn diese beiden Werte nicht identisch sind, endet das Erstellen mit Build-Tools der Version 19.0.0 in der BufferOverflowException. Quelle

Es gibt auch Hinweise aus Kommentaren zu diesem Beitrag, dass Sie mindestens 19 (Android-19) als Ziel haben müssen. Bitte hinterlassen Sie einen Kommentar, wenn diese Lösung auch funktioniert, wenn Ihr Ziel <19 ist.

So sieht das Update für mein Projekt aus. Das zugehörige AOSP-Problem ist # 61710.

1 Wenn Sie wirklich ein Downgrade durchführen müssen, müssen Sie die Build-Tools 19.0.0 nicht deinstallieren. Installieren Sie einfach 18.1.1 und fügen Sie sdk.buildtools=18.1.1sie der local.propertiesDatei hinzu.


5
Das hat bei mir nicht funktioniert. Alle project.properties und targetSdk wurden überprüft. Ich verwende die neueste Version von IntelliJ IDEA 13 Cardea. Glücklicherweise wurde der Build durch die Deinstallation von Build-Tools 19.0.0 behoben.
James Wald

3
Damit es funktioniert, musste ich auch das Ziel-SDK auf die neueste Version (19) einstellen.
RolandK

Stellen Sie außerdem sicher, dass die SDK-Zielversion mit Ihrem SDK-Manager heruntergeladen wurde (dies ist die Ursache meines Problems).
mrmoment

1
Ich hatte Ziel 10 sowohl in AndroidManifest.xml als auch in project.properties. Versucht, Eclipse neu zu starten und zu bereinigen, hat aber nicht geholfen. Dann habe ich in config.properties das Ziel auf 19 gesetzt und es hat funktioniert. Ich habe nicht versucht, Build-Tools herunterzustufen. (Ziel 15 hat nicht funktioniert)
Thomasa88

5
Das Setzen von targetSdkVersion in Manifest und target in Properties auf 19 hat für mich
funktioniert

83

Versuchen Sie, was van gesagt hat:

Klicken Sie mit der rechten Maustaste auf projectandroid toolsandroid support library.

Hoffe das hilft :)


19
Vielen Dank für diese Lösung, nur zwei Klicks und das Problem wurde gelöst !!!!! (obwohl es in meinem Menü "Support-Bibliothek hinzufügen" war)
Christopher

57

Selbes Problem hier. Zurückgesetzt, um Tools 18.1.1 zu erstellen, Eclipse neu gestartet und das Problem behoben.


3
Ja, das hat es behoben. Musste das alte 19.0.0-Verzeichnis allerdings manuell löschen.
Beetstra

Dies hat es auch für mich behoben, obwohl ich um 10.56
Uhr

1
Ich habe diese Antwort verwendet und musste nicht zurückkehren: stackoverflow.com/questions/19727915/…
Jon

Ich habe alle project.properties und targetSdk überprüft. Ich verwende die neueste Version von IntelliJ IDEA 13 Cardea und spiele auch mit der SDK-Version des Projekts. Die Deinstallation von Build-Tools 19.0.0 war die einzige Möglichkeit, den Build für mein Projekt zu reparieren.
James Wald

1
Vielen Dank. Das Zurücksetzen auf Build-Tools 18.1.1 und das Löschen von 19 haben dies für mich behoben. Ich dachte, ich würde verrückt
Darren

50

Durch Hinzufügen dieser zusätzlichen Zeile konnte ich mein Problemprojekt erstellen:

sdk.build.tools=18.1.1

... in meine Datei project.properties , die sich im Stammverzeichnis des Projektordners befindet. Alle anderen Ansätze schienen für mich zu scheitern.


Ich denke, dies ist auch einer der Gründe für das Problem. Ich habe nie Version 19 in meinem Ziel-SDK verwendet und trotzdem kam das Problem. Wahrscheinlich wurde das SDK-Build-Tool auf 19 gesetzt, was zurückgesetzt werden musste
Saurav

Das verwendete Ziel bestimmt nicht die verwendete Buildtools-Version.
Flow

Ich habe die neueste Support-Bibliothek hinzugefügt und diese Zeile zu den Projekteigenschaften hinzugefügt, und mein Problem wurde behoben ... danke
speedynomads

Ich bin überrascht, dass das funktioniert hat. Es ist in der AOSP-Quelle als sdk.buildtools, nicht sdk.build.tools, und das war der Name, der für mich funktioniert hat.
Yoni Samlan

7

Klicken Sie mit der rechten Maustaste auf Projekt >> Eigenschaften >> Android >> API Level 18 hat für mich funktioniert. Aber bevor ich das getan habe, habe ich mit der rechten Maustaste auf Projekt >> Android Tools >> Support Library hinzufügen geklickt und Eclipse neu gestartet . Möglicherweise müssen Sie mit der ausgewählten API- Ebene herumspielen .


3
Was ist mit API-Level unter 18? Wie können wir Anwendungen unterhalb der API-Ebene 18 ausführen?
Jayesh

Ich musste project-> Android Tools-> Add Support Library hinzufügen und es installierte ADT 19.0.1 Support Library. Danach erzeugt es apk fein.
user914425

7

Nach der Installation des neuen SDK befindet sich unter Ihrer Projektdatei der neue Ordner "Android-Abhängigkeiten". Wenn Sie mit der rechten Maustaste klicken und es aus dem Erstellungspfad entfernen, können Sie Ihr Projekt erneut erstellen.


Ich habe festgestellt, dass dieser Ordner ein doppeltes JAR-Problem verursachen würde. Aber das Löschen hat mein Problem nicht gelöst.
Salsero69

@ Salsero69 Verwenden Sie ein Bibliotheksprojekt als Referenz in Ihrem aktuellen Projekt?
Mahendra Liya

5

Aktualisieren

right click your project > android tools > android support library

Bereinigen Sie Ihr Projekt und versuchen Sie es zu bauen.



3

Ich habe dieses Problem behoben, ohne die Support-Bibliothek herunterzuladen oder die Build-Tools auf 18.1.1 zurückzusetzen. Ich habe einfach die API-Stufe auf 16+ geändert und das Problem ist verschwunden . Hoffe es wird helfen.


Wie haben Sie die API-Ebene auf 16 geändert?
Peter Mortensen

Ich habe einfach mit der rechten Maustaste auf mein Projekt geklickt und Android aus der Liste ausgewählt. Es sollte eine Liste der installierten Android-API-Versionen angezeigt werden. Wählen Sie die Version mit 16 als API-Ebene (4.1.2).
Zsolt Boldizsár

3

Keine der anderen Lösungen hier hat nach dem Upgrade auf Android Studio 0.4.0 und Gradle 1.9 für mich funktioniert.

Ich habe das Problem behoben, indem ich Build Tools 19.0.1 heruntergeladen und die folgende Zeile in meinen build.gradle-Dateien aktualisiert habe:

buildToolsVersion '19.0.0'

zu

buildToolsVersion '19.0.1'

Ja, dieses Problem scheint in 19.0.1 behoben zu sein. Funktionierte auch gut mit "Ant Debug".
Robert

2

Deinstallieren Sie Build Tools 19, wenn Probleme mit IntelliJ IDEA 13 auftreten.


2

Hatte das gleiche Problem mit der Zielversion 19auf beiden project.propertiesund AndroidManifest.xmlmit Ant.

Es wurde behoben durch:

  • Deinstalliert Android SDK Build-Tools 19.0.1
  • Eingerichtet Android SDK Build-Tools 19.0.2

Ich denke, @ Al-Kathiri-Khalid ist genau richtig. Das Problem ist nur auf die fehlende Unterstützung für die API-Ebene in Build Tools zurückzuführen.


1

Ich hatte das gleiche Problem, obwohl mein Projekt die Support-Bibliothek nicht verwendete. Durch Hinzufügen von libs / android-support-v4.jar zum Projekt wurde das Problem umgangen, ohne dass die Build-Tools von Version 19 zurückgesetzt werden mussten.


1

Ich habe dieses Problem gelöst. Nehmen Sie diese Änderung einfach in der Projekteigenschaftendatei vor:

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

Und in der Manifestdatei:

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

0

Fügen Sie die Bibliotheksdatei im Projekt hinzu. Projekt-> Rechtsklick-> Eigenschaften-> Android-> Bibliothek-> Klicken Sie auf Hinzufügen und wählen Sie das Bibliotheksprojekt aus und geben Sie Übernehmen und OK an. Bereinigen Sie dann das Projekt und führen Sie es erneut aus will die Sonnenfinsternis neu starten ..

Außerdem müssen manchmal die Build-Tools für Android SDK aktualisiert werden.


0

Was für mich gearbeitet , war dies: Ich öffnete die project.properties Datei aus dem Stamm meines Projektes und geändert , target=android-8umtarget=android-17


0

java.nio.BufferOverflowException während eines Dex-Fehlers Dies bedeutet, dass Sie nicht über die unterstützende API für diese Ebene verfügen. Daher schlägt der Build fehl. Es gibt verschiedene Möglichkeiten, dies zu beheben.

Überprüfen Sie Ihre Manifestdatei using-sdk android: minSdkVersion = "4" und android: targetSdkVersion = "14"

Eine der folgenden Möglichkeiten behebt das Problem: -

  • Laden Sie die erforderliche API- Ebene herunter (dies kann einige Zeit dauern) und führen Sie Ihre Anwendung erneut aus
  • Schnelle Dirty Fix Ändern Sie Ihr Projektziel in project.properties in Ihr neues Ziel target = android-4
  • Schnelle Bereinigung, ändern Sie die SdkVersion in Ihrem Manifest und bereinigen Sie Ihr Projekt, um die Änderungen zu Ihren project.properties hinzuzufügen (Mein Favorit)

0

Ich habe das vorherige Android SDK und Eclipse entfernt . Ich habe das ADT- Bundle installiert und es funktioniert ...

Dies behebt das Problem von BufferOverflow auf Dex, das gestartet wurde, nachdem ich API 19 erhalten hatte. Ich habe zuvor Eclipse mit Android SDK als Add-On-Paket verwendet.


Wo kann ich das ADT-Bundle installieren?
Jayesh

0

Klicken Sie mit der rechten Maustaste auf Projekt >> Eigenschaften >> Android und wählen Sie API-Level größer als 15

ODER

Fügen Sie Ihrem Projekt google-play-services_lib hinzu, indem Sie mit der rechten Maustaste auf Projekt klicken und Projekt >> Eigenschaften >> Android >> Hinzufügen auswählen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.