Podczas kompilowania konkretnego projektu na Androida i tylko na moim komputerze z systemem Windows, otrzymuję java.nio.BufferOverflowException
od 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.
Odpowiedzi:
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:targetSdkVersion
w AndroidManifest.xml jest zgodnatarget=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łoZ 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.1
dolocal.properties
pliku.źródło
Spróbuj jakiej furgonetki powiedział :
Kliknij prawym przyciskiem myszy
project
→android tools
→android support library
.Mam nadzieję że to pomoże :)
źródło
Mam ten sam problem. Przywrócono kompilację narzędzi 18.1.1, zrestartowałem Eclipse i to naprawiło.
źródło
Udało mi się skompilować mój problematyczny projekt, dodając tę dodatkową linię:
... 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.
źródło
sdk.buildtools
, niesdk.build.tools
, i to była nazwa, która zadziałała dla mnie.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 .
źródło
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.
źródło
Aktualizacja
right click your project > android tools > android support library
Oczyść swój projekt i spróbuj zbudować.
źródło
Miałem ten sam problem po aktualizacji do wersji 19. Nie zapomnij tylko zaktualizować ADT, https://dl-ssl.google.com/android/eclipse/ . Po tym mogłem zbudować projekt z najnowszą wersją.
źródło
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.
źródło
Ż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:
do
źródło
W przypadku problemów z IntelliJ IDEA 13 odinstaluj Build Tools 19.
źródło
Miał ten sam problem z wersją docelową
19
na obuproject.properties
iAndroidManifest.xml
z Ant.Naprawiono to przez:
Android SDK Build-Tools 19.0.1
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.
źródło
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.
źródło
Rozwiązałem ten problem. Po prostu wprowadź tę zmianę w pliku właściwości projektu:
A w pliku manifestu:
źródło
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.
źródło
U mnie zadziałało: otworzyłem plik project.properties z katalogu głównego mojego projektu i zmieniłem go
target=android-8
natarget=android-17
źródło
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: -
źródło
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.
źródło
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
źródło