Android dex, oluştururken bir BufferOverflowException veriyor


174

Belirli bir Android projesini derlerken ve sadece Windows makinemde java.nio.BufferOverflowExceptiondex'ten bir süre alıyorum . Sorun hem Eclipse hem de Ant kullanırken ortaya çıkar.

Ant kullanırken çıktı:

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

Eclipse kullanırken mesaj daha kısa fakat benzer:

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

Dediğim gibi, MacBook'umda bu sorun yok, her ikisi de Android Build araçlarının en son sürümlerine yükseltilmiş olsa da: 19.0.0.


1
Kütüphaneler kullanıyor musunuz?
Kurulumlarını

@SherifelKhatib, sadece destek kütüphanesi ve Google Analytics V2
beetstra

10
Kimse bu konuda henüz bir sorun
çıkarmış gibi görünmediğinden

tüm android sdk, eclipse ve kodu kaldırarak çalışıyor.
vpathak

Centos x64'te simiar hatası alıyorum:! OTURUM 2013-11-07 17: 07: 35.305 eclipse.buildId = v22.3.0-887826 java.version = 1.7.0_40 java.vendor = Oracle Corporation BootLoader sabitleri: OS = linux, ARCH = x86_64, WS = gtk, NL = tr_TR Çerçeve bağımsız değişkenleri: -product com.android.ide.eclipse.adt.package.product Komut satırı bağımsız değişkenleri: -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException java.nio.Buffer.nextPutIndex (Buffer.java:519)
isti_spl 7:13

Yanıtlar:


230

Derleme araçlarını 18.1.1 1'e düşürmeye gerek yoktur , bu sorun derleme araçları 19.0.1 ile giderilmiştir .

19.0.1'i herhangi bir nedenle kullanamıyorsanız:

Değeri olduğundan emin olun android:targetSdkVersioniçinde AndroidManifest.xml'de maçları target=android-<value>içinde project.properties . Bu iki değer aynı değilse, 19.0.0 derleme araçları ile oluşturma BufferOverflowException içinde sona erecektir. Kaynak

Ayrıca bu yazıdaki yorumlardan en az 19'u (android-19) hedeflemeniz gerektiğine dair bazı göstergeler var. Hedefiniz <19 ise bu çözüm de işe yararsa lütfen bir yorum bırakın.

Düzeltme projemi böyle görünüyor . İlgili AOSP sorunu # 61710.

Gerçekten downgrade gerekiyorsa 1, kaldırma Yapım araçları 19.0.0 gerekmez, sadece 18.1.1 yükleyip eklemek sdk.buildtools=18.1.1için local.propertiesdosyaya.


5
Bu benim için işe yaramadı. Tüm project.properties ve targetSdk doğrulandı. IntelliJ IDEA 13 Cardea'nın en son sürümünü kullanıyorum. Neyse ki, 19.0.0 derleme araçlarını kaldırmak derlemeyi düzeltti.
James Wald

3
Çalışması için de hedef SDK'yı en son sürüme ayarlamam gerekiyordu (19).
RolandK

Ayrıca hedef sdk sürümünün sdk yöneticinizle indirildiğinden emin olun (bu benim sorunumun sebebidir).
mrmoment

1
Hem AndroidManifest.xml'de hem de project.properties'de hedef 10'um vardı. Eclipse ve temizliği yeniden başlatmayı denedim, ancak yardımcı olmadı. Sonra config.properties içinde 19'a hedef belirledim ve işe yaradı. İnşa araçlarını düşürmeyi denemedim. (Hedef 15 işe yaramadı)
thomasa88

5
Manifest ve özelliklerde targetSdkVersion'u 19'a ayarlamak benim için çalıştı
Jaldip Katre

83

Minibüsün söylediklerini deneyin :

projectandroid tools→ üzerine sağ tıklayın android support library.

Bu yardımcı olur umarım :)


19
Bu çözüm için teşekkür ederim, sadece iki tıklama ve sorun çözüldü !!!!! (menümde "destek kitaplığı ekle" olmasına rağmen)
Christopher

57

Burada da aynı problem. 18.1.1 oluşturma araçlarına geri döndü, Eclipse'i yeniden başlattı ve bu düzeltildi.


3
Evet, bunu düzelttim. El ile eski 19.0.0 dizini silmek zorunda kaldı.
beetstra

Bu benim için de düzeltildi, ancak 18.0.1'e döndüm
NickT

1
Bu cevabı kullandım ve geri dönmek zorunda kalmadım: stackoverflow.com/questions/19727915/…
Jon

Tüm project.properties ve targetSdk dosyalarını doğruladım. IntelliJ IDEA 13 Cardea'nın en son sürümünü kullanıyorum ve projenin SDK sürümü ile de oynuyorum. Yapım araçlarını 19.0.0'ı kaldırmak, projem için yapıyı düzeltmenin tek yoluydu.
James Wald

1
Teşekkürler. Araçlar 18.1.1 ve 19'u silmek için geri dönmek bunu benim için düzeltti. Delirdiğimi sanıyordum
Darren

50

Bu ekstra satırı ekleyerek sorun projemi oluşturmayı başardım:

sdk.build.tools=18.1.1

... proje klasörünün kökünde bulunan project.properties dosyama . Diğer tüm yaklaşımlar benim için başarısız görünüyordu.


bence bu da sorunun arkasındaki nedenlerden biri. Ben hedef sdk 19 sürümü hiç kullanmadım ve hala sorun geliyordu. Muhtemelen sdk oluşturma araçları geri döndürülmesi gereken 19'a ayarlandı
saurav

Kullanılan hedef, kullanılan buildtools sürümünü belirlemez.
Akış

En son destek kütüphanesini ekledim ve bu satırı proje özelliklerine ekledim ve sorunum düzeltildi ... teşekkürler
speedynomads 15

Bunun işe yaradığına şaşırdım; AOSP kaynağında olduğu sdk.buildtoolsgibi değil sdk.build.toolsve benim için çalışan isim buydu .
Yoni Samlan

7

Projeye sağ tıklayın >> Özellikler >> Android >> API Seviye 18 benim için çalıştı. Ama bunu yapmadan önce projeye sağ tıkladım >> Android Araçları >> Destek Kütüphanesi Ekle ve Eclipse'i yeniden başlattım . Seçtiğiniz API seviyenizle oynamanız gerekebilir .


3
18'in altındaki API düzeyi ne olacak? API seviye 18'in altında uygulamayı nasıl çalıştırabiliriz?
Jayesh

Proje-> Android Araçları-> Destek Kitaplığı Ekle'yi eklemek zorunda kaldım ve ADT 19.0.1 Destek Kitaplığı'nı yükledim. Bundan sonra apk ince üretir.
user914425

7

Yeni SDK'nın yüklenmesinden sonra proje dosyanızın altında yeni bir "Android Bağımlılıkları" klasörü var. Oluşturma yolundan sağ tıklayıp kaldırırsanız, projenizi yeniden oluşturabilirsiniz.


Bu klasörün yinelenen bir JAR sorununa neden olacağını fark ettim. Ama onu silmek sorunumu çözmedi.
Salsero69

@ Salsero69 Gerçek projenizde bir kütüphane projesini referans olarak mı kullanıyorsunuz?
Mahendra Liya

5

Güncelleme

right click your project > android tools > android support library

Projenizi temizleyin ve inşa etmeye çalışın.



3

Destek kütüphanesini indirmeden veya oluşturma araçlarını 18.1.1'e geri döndürmeden bu sorunu çözdüm. API seviyesini 16+ olarak değiştirdim ve sorun ortadan kayboldu . Umarım yardımcı olur.


API düzeyini 16 olarak nasıl değiştirdiniz?
Peter Mortensen

Projemi sağ tıkladım ve listeden Android'i seçtim. Yüklü android API sürümlerinin bir listesini göstermeli, 16 API düzeyi (4.1.2) olanı seçmelidir.
Zsolt Boldizsár

3

Buradaki diğer çözümlerin hiçbiri Android Studio 0.4.0 ve Gradle 1.9'a yükselttikten sonra benim için işe yaramadı.

Build Tools 19.0.1'i indirip build.gradle dosyalarımda aşağıdaki satırı güncelleyerek sorunu çözdüm:

buildToolsVersion '19.0.0'

için

buildToolsVersion '19.0.1'

Evet, bu sorun 19.0.1'de düzeltildi. Ayrıca "karınca hata ayıklama" ile iyi çalıştı.
Robert

2

IntelliJ IDEA 13 ile ilgili sorun yaşayanlar için Build Tools 19'u kaldırın.


2

Hedef sürümü ile aynı sorunu vardı 19hem project.propertiesve AndroidManifest.xmlAnt.

Sabitleyen:

  • Kaldırıldı Android SDK Build-Tools 19.0.1
  • Kurulmuş Android SDK Build-Tools 19.0.2

Sanırım @ El-Kathiri-Halid yerinde. Sorun, yalnızca Oluşturma Araçları'ndaki API düzeyi desteğinin eksik olmasından kaynaklanmaktadır.


1

Projem destek kütüphanesini kullanmasa da aynı problemi yaşadım. Projeye libs / android-support-v4.jar eklemek, derleme araçlarını v19'dan geri döndürmeye gerek kalmadan sorun etrafında çalıştı.


1

Bu sorunu çözdüm. Sadece proje özellikleri dosyasında bu değişikliği yapın:

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

Ve bildirim dosyasında:

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

0

Kütüphane dosyasını projeye ekleyin .. Proje-> sağ tıklayın-> Özellikler-> android-> Kütüphane-> Ekle'yi tıklayın ve Kütüphane Projesi'ni seçin ve uygula ve tamam ver .. sonra, projeyi temizleyin ve tekrar çalıştırın .. tutulmayı yeniden başlatmak istiyorum ..

Ayrıca, bazen Android SDK oluşturma araçlarını güncellemeniz gerekir.


0

Ne benim için çalıştı şuydu: Projemin kökünden project.properties dosyayı açtı ve değiştirilen target=android-8içintarget=android-17


0

dex hatası sırasında java.nio.BufferOverflowException Bu düzey için destekleyici API'ye sahip olmadığınız anlamına gelir , bu nedenle derleme başarısız olur, bunu düzeltmenin birkaç yolu vardır.

Manifest dosyanızı kontrol edin-sdk android: minSdkVersion = "4" ve android: targetSdkVersion = "14"

Aşağıdakilerden herhangi biri sorunu düzeltir: -

  • Gerekli API düzeyini indirin (Bu zaman alabilir) ve uygulamanızı tekrar çalıştırın
  • Hızlı kirli düzeltme, project.properties'deki yeni hedef hedefiniz için proje hedefinizi değiştirin = android-4
  • Hızlı temizleme düzeltmesi, manifestinizde SdkVersion'u değiştirin ve projenize değişiklikleri eklemek için projenizi temizleyin. Properties (My favourite)

0

Önceki Android SDK'sını ve Eclipse'i kaldırdım . ADT paketini kurdum ve işe yarıyor ...

Bu, API 19'u aldıktan sonra Dex'te BufferOverflow sorununu çözdü. Daha önce eklenti paketi olarak Android SDK yüklü Eclipse kullanıyordum.


Adt paketini nereden yükleyebilirim?
Jayesh

0

Project >> Properties >> Android'e sağ tıklayın ve API Seviyesini 15'ten büyük seçin

VEYA

Projeye sağ tıklayıp Proje >> Özellikler >> Android >> Ekle'yi seçerek projenize google-play-services_lib ekleyin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.