Android dex daje BufferOverflowException podczas kompilowania


174

Podczas kompilowania konkretnego projektu na Androida i tylko na moim komputerze z systemem Windows, otrzymuję java.nio.BufferOverflowExceptionod dexa. Problem występuje zarówno podczas korzystania z Eclipse, jak i Ant.

Wynik podczas korzystania z Ant to:

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

Podczas korzystania z Eclipse komunikat jest krótszy, ale podobny:

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

Jak powiedziałem, nie mam tego problemu na moim MacBooku, mimo że oba są zaktualizowane do najnowszych wersji narzędzi do budowania Androida: 19.0.0.


1
Czy korzystasz z bibliotek? Sprawdź ich konfigurację
— Sherif elKhatib

@SherifelKhatib, tylko biblioteka wsparcia i Google Analytics V2
— beetstra

10
Ponieważ wydawało się, że nikt jeszcze nie zgłosił problemu w tej sprawie,
— złożyłem go

próbując usunąć cały pakiet SDK, zaćmienie i kod Androida.
— vpathak

uzyskiwanie podobnego błędu w 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 stałe: OS = linux, ARCH = x86_64, WS = gtk, NL = en_US Framework argumenty: -product com.android.ide.eclipse.adt.package.product Argumenty wiersza poleceń: -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

Odpowiedzi:


230

Nie ma potrzeby obniżania wersji narzędzi do kompilacji z powrotem do 18.1.1 1 , ten problem został rozwiązany za pomocą narzędzi do kompilacji 19.0.1 .

Jeśli z jakiegoś powodu nie możesz użyć 19.0.1, to:

Upewnij się, że wartość android:targetSdkVersionw AndroidManifest.xml jest zgodna target=android-<value>z project.properties . Jeśli te dwie wartości nie są takie same, kompilowanie za pomocą narzędzi kompilacji w wersji 19.0.0 zakończy się w wyjątku BufferOverflowException. Źródło

Z komentarzy do tego posta wynika również, że należy kierować reklamy na co najmniej 19 (android-19). Proszę zostaw komentarz, jeśli to rozwiązanie działa również, jeśli Twoim celem jest <19.

Tak wygląda poprawka dla mojego projektu. Powiązany problem AOSP to # 61710.

1 Jeśli naprawdę potrzebujesz obniżenia wersji, nie musisz odinstalowywać narzędzi kompilacji 19.0.0, po prostu zainstaluj 18.1.1 i dodaj sdk.buildtools=18.1.1do local.propertiespliku.


5
To nie zadziałało dla mnie. Zweryfikowano wszystkie project.properties i targetSdk. Używam najnowszej wersji IntelliJ IDEA 13 Cardea. Na szczęście odinstalowanie build-tools 19.0.0 naprawiło build.
— James Wald

3
Aby to zadziałało, musiałem również ustawić docelowy SDK na najnowszą wersję (19).
— RolandK

Upewnij się również, że docelowa wersja sdk została pobrana za pomocą twojego menedżera sdk (to jest przyczyna mojego problemu).
— mrmoment

1
Miałem cel 10 w AndroidManifest.xml i project.properties. Próbowałem zrestartować Eclipse i wyczyścić, ale nie pomogło. Następnie ustawiłem cel na 19 w config.properties i zadziałało. Nie próbowałem obniżać wersji narzędzi do kompilacji. (Cel 15 nie zadziałał)
— thomasa88

5
Ustawienie targetSdkVersion w manifeście i celu we właściwościach na 19 zadziałało dla mnie
— Jaldip Katre

83

Spróbuj jakiej furgonetki powiedział :

Kliknij prawym przyciskiem myszy project→ android tools→ android support library.

Mam nadzieję że to pomoże :)


19
Dziękuję za to rozwiązanie, tylko dwa kliknięcia i problem został rozwiązany !!!!! (chociaż w moim menu było „dodaj bibliotekę wsparcia”)
— Christopher

57

Mam ten sam problem. Przywrócono kompilację narzędzi 18.1.1, zrestartowałem Eclipse i to naprawiło.


3
Tak, to naprawiło. Musiałem jednak ręcznie usunąć stary katalog 19.0.0.
— beetstra

To również rozwiązało problem, chociaż wróciłem do wersji 18.0.1
— NickT

1
Skorzystałem z tej odpowiedzi i nie musiałem cofać się: stackoverflow.com/questions/19727915/ ...
— Jon

Sprawdziłem wszystkie project.properties i targetSdk. Używam najnowszej wersji IntelliJ IDEA 13 Cardea i grałem również z wersją SDK projektu. Odinstalowanie build-tools 19.0.0 było jedynym sposobem naprawienia kompilacji dla mojego projektu.
— James Wald

1
Dzięki. Przywrócenie narzędzi do budowania 18.1.1 i usunięcie 19 naprawiło ten problem. Myślałem, że zwariowałem
— Darren

50

Udało mi się skompilować mój problematyczny projekt, dodając tę ​​dodatkową linię:

sdk.build.tools=18.1.1

... do mojego pliku project.properties , który znajduje się w katalogu głównym folderu projektu. Wydawało mi się, że wszystkie inne podejścia zawiodły.


myślę, że jest to również jeden z powodów tego problemu. Nigdy nie używałem wersji 19 w moim docelowym pakiecie SDK, a problem nadal się pojawiał. Prawdopodobnie narzędzia do budowania sdk były ustawione na 19, które trzeba było przywrócić
— saurav

Użyty cel nie określa używanej wersji narzędzia buildtools.
— Flow

Dodałem najnowszą bibliotekę wsparcia i dodałem tę linię do właściwości projektu, a mój problem został rozwiązany ... dzięki
— speedynomads

Jestem zaskoczony, że to zadziałało; jest w źródle AOSP jako sdk.buildtools, nie sdk.build.tools, i to była nazwa, która zadziałała dla mnie.
— Yoni Samlan

7

Kliknij prawym przyciskiem myszy projekt >> Właściwości >> Android >> Poziom API 18 zadziałał dla mnie. Ale zanim to zrobiłem, kliknąłem prawym przyciskiem myszy projekt >> Narzędzia Android >> Dodaj bibliotekę wsparcia i ponownie uruchomiłem Eclipse . Być może będziesz musiał pobawić się wybranym poziomem API .


3
A co z poziomem API poniżej 18? Jak możemy uruchomić aplikację poniżej poziomu API 18?
— Jayesh

Musiałem dodać projekt-> Narzędzia Android-> Dodaj bibliotekę wsparcia i zainstalować bibliotekę obsługi ADT 19.0.1. Następnie generuje dobrze apk.
— user914425

7

Po zainstalowaniu nowego zestawu SDK w pliku projektu znajduje się nowy folder „Zależności systemu Android”. Jeśli klikniesz prawym przyciskiem myszy i usuniesz go ze ścieżki budowania, ponownie będziesz mógł zbudować swój projekt.


Zauważyłem, że ten folder powodował powielanie problemu z plikiem JAR. Ale usunięcie go nie rozwiązało mojego problemu.
— Salsero69

@ Salsero69 Czy używasz projektu biblioteki jako odniesienia w swoim rzeczywistym projekcie?
— Mahendra Liya

5

Aktualizacja

right click your project > android tools > android support library

Oczyść swój projekt i spróbuj zbudować.



3

Rozwiązałem ten problem bez pobierania biblioteki obsługi lub przywracania narzędzi do kompilacji do wersji 18.1.1. Po prostu zmieniłem poziom API na 16+ i problem zniknął . Mam nadzieję, że to pomoże.


Jak zmieniłeś poziom API na 16?
— Peter Mortensen,

Po prostu kliknąłem prawym przyciskiem myszy mój projekt i wybrałem Androida z listy. Powinien pojawić się lista zainstalowanych wersji Android API, wybierz tę, która ma 16 jako poziom API (4.1.2).
— Zsolt Boldizsár

3

Żadne z innych rozwiązań tutaj nie zadziałało po uaktualnieniu do Android Studio 0.4.0 i Gradle 1.9.

Rozwiązałem problem, pobierając Build Tools 19.0.1 i aktualizując następujący wiersz w moich plikach build.gradle:

buildToolsVersion '19.0.0'

do

buildToolsVersion '19.0.1'

Tak, ten problem wydaje się rozwiązany w wersji 19.0.1. Działa również dobrze z „ant debug”.
— Robert,

2

W przypadku problemów z IntelliJ IDEA 13 odinstaluj Build Tools 19.


2

Miał ten sam problem z wersją docelową 19na obu project.propertiesi AndroidManifest.xmlz Ant.

Naprawiono to przez:

  • Odinstalowano Android SDK Build-Tools 19.0.1
  • Zainstalowano Android SDK Build-Tools 19.0.2

Myślę, że @ Al-Kathiri-Khalid jest na miejscu. Problem jest spowodowany tylko brakiem obsługi poziomu interfejsu API w narzędziach do budowania.


1

Miałem ten sam problem, chociaż mój projekt nie korzystał z biblioteki wsparcia. Dodanie biblioteki libs / android-support-v4.jar do projektu pozwoliło obejść problem bez konieczności przywracania narzędzi do kompilacji z powrotem z wersji 19.


1

Rozwiązałem ten problem. Po prostu wprowadź tę zmianę w pliku właściwości projektu:

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

A w pliku manifestu:

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

0

Dodaj plik biblioteki do projektu .. Projekt-> kliknięcie prawym przyciskiem myszy-> Właściwości-> Android-> Biblioteka-> kliknij Dodaj i wybierz projekt biblioteki i podaj zastosuj i ok .. następnie wyczyść projekt i uruchom ponownie .. jeśli chcę zrestartować zaćmienie ...

Czasami trzeba też zaktualizować narzędzia do tworzenia zestawu SDK systemu Android.


0

U mnie zadziałało: otworzyłem plik project.properties z katalogu głównego mojego projektu i zmieniłem go target=android-8natarget=android-17


0

java.nio.BufferOverflowException podczas błędu dex Oznacza to, że nie masz obsługującego API dla tego poziomu dlatego kompilacja kończy się niepowodzeniem, istnieje wiele sposobów, aby to naprawić.

Sprawdź, czy plik manifestu używa-sdk android: minSdkVersion = "4" i android: targetSdkVersion = "14"

Każde z poniższych rozwiązuje problem: -

  • Pobierz wymagany poziom interfejsu API (może to zająć trochę czasu) i ponownie uruchom aplikację
  • Szybka nieczysta poprawka zmień cel projektu w project.properties na nowy cel docelowy = android-4
  • Szybka, czysta poprawka, zmień SdkVersion w swoim manifeście i Wyczyść swój projekt, aby dodać zmiany do projektu. Właściwości (Moje ulubione)

0

Usunąłem poprzedni Android SDK i Eclipse . Zainstalowałem pakiet ADT i działa ...

To rozwiązało problem z BufferOverflow w Dex, który zaczął się po tym, jak uzyskałem API 19. Wcześniej używałem Eclipse z Android SDK zainstalowanym jako pakiet dodatkowy.


Skąd mogę zainstalować pakiet reklam?
— Jayesh

0

Kliknij prawym przyciskiem myszy Projekt >> Właściwości >> Android i wybierz poziom API większy niż 15

LUB

Dodaj google-play-services_lib do swojego projektu, klikając prawym przyciskiem myszy projekt i wybierając Projekt >> Właściwości >> Android >> Dodaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.