जब निर्माण होता है तो एंड्रॉइड डेक्स एक बफरऑवरफ्लो एक्ससेप्शन देता है


174

जब एक विशिष्ट एंड्रॉइड प्रोजेक्ट को संकलित किया जाता है, और केवल मेरी विंडोज मशीन पर, मुझे java.nio.BufferOverflowExceptionडेक्स से एक के दौरान मिलता है । समस्या ग्रहण के दौरान और चींटी का उपयोग करते समय दोनों होती है।

चींटी का उपयोग करते समय आउटपुट है:

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

ग्रहण का उपयोग करते समय संदेश छोटा होता है लेकिन समान होता है:

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

जैसा कि मैंने कहा, मुझे अपने मैकबुक पर यह समस्या नहीं है, भले ही वे दोनों एंड्रॉइड बिल्ड टूल के नवीनतम संस्करणों में अपग्रेड किए गए हैं:


1
क्या आप पुस्तकालयों का उपयोग करते हैं? उनके सेटअप की जाँच करें
Sherif elKhatib

@SherifelKhatib, सिर्फ सपोर्ट लाइब्रेरी और Google Analytics V2
beetstra

10
चूँकि किसी को अभी तक इस पर कोई मामला दर्ज नहीं हुआ था, इसलिए मैंने एक पर दर्ज किया है: code.google.com/p/android/issues/detail?id=61710
CommonsWare

सभी एंड्रॉइड एसडीके, ग्रहण और कोड को हटाकर।
वपतक

Centos x64 पर simiar त्रुटि हो रही है:! SESSION 2013-11-07 17: 07: 35.305 ग्रहण ।buildId = v22.3.0-887826 java.version = 1.7.0_40 java.voror = Oracle Corporation BootLader constants: OS = linux, ARCH = ARCH = x86_64, WS = gtk, NL = en_US फ्रेमवर्क तर्क: -product com.android.ide.eclipse.adt.package.product कमांड-लाइन तर्क: -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException पर java.nio.Buffer.nextPutIndex (Buffer.java 19)
isti_save

जवाबों:


230

बिल्ड टूल्स को 18.1.1 1 पर वापस डाउनग्रेड करने की आवश्यकता नहीं है , यह समस्या बिल्ड टूल्स 19.0.1 के साथ तय की गई है

यदि आप किसी कारण से 19.0.1 का उपयोग नहीं कर सकते हैं:

सुनिश्चित करें कि के मूल्य को बनाने android:targetSdkVersionमें AndroidManifest.xml से मेल खाता target=android-<value>में project.properties । यदि ये दोनों मान समान नहीं हैं, तो बिल्ड टूल संस्करण 19.0.0 के साथ बिल्डिंग बफ़रऑवरफ्लो अपवाद में समाप्त हो जाएगा। स्रोत

इस पोस्ट पर टिप्पणियों से कुछ संकेत भी हैं जिन्हें आपको कम से कम 19 (एंड्रॉइड -19) को लक्षित करने की आवश्यकता है। कृपया एक टिप्पणी छोड़ दें यदि यह समाधान भी काम करता है यदि आपका लक्ष्य <19 है।

इस तरह से मेरे प्रोजेक्ट के लिए फिक्स दिखता हैसंबंधित AOSP समस्या # 61710 है।

1 क्या तुम सच में ढाल की जरूरत है, तो आप स्थापना रद्द करें निर्माण उपकरण 19.0.0 की जरूरत नहीं है, बस 18.1.1 स्थापित करने और जोड़ने sdk.buildtools=18.1.1के लिए local.propertiesफ़ाइल।


5
यह मेरे लिए काम नहीं किया। सत्यापित सभी प्रोजेक्ट ।properties और targetSdk। मैं IntelliJ IDEA 13 कार्डिया के नवीनतम संस्करण का उपयोग कर रहा हूं। सौभाग्य से, बिल्ड-टूल्स 19.0.0 की स्थापना ने बिल्ड को ठीक किया।
जेम्स वाल्ड

3
मेरे लिए यह काम करने के लिए, मुझे लक्ष्य एसडीके को नवीनतम संस्करण (19) में भी सेट करना था।
रोलैंडके

और यह भी सुनिश्चित करें कि लक्ष्य एसडीके संस्करण आपके एसडीके प्रबंधक के साथ डाउनलोड किया गया है (यह मेरी समस्या का कारण है)।
मृगमरीचिका

1
मेरे पास AndroidManifest.xml और project.properties दोनों में 10 लक्ष्य थे। ग्रहण और सफाई को फिर से शुरू करने की कोशिश की, लेकिन मदद नहीं की। फिर मैंने config.properties में 19 को लक्ष्य निर्धारित किया और यह काम किया। निर्माण उपकरणों को अपग्रेड करने की कोशिश नहीं की। (लक्ष्य 15 काम नहीं किया)
thomasa88

5
प्रॉपर्टी में
टार्गेटडस्कवर्ट

83

कोशिश करें कि वैन ने क्या कहा:

अपने projectandroid tools→ राइट क्लिक करें android support library

उम्मीद है की यह मदद करेगा :)


19
इस समाधान के लिए धन्यवाद, बस दो क्लिक और समस्या हल हो गई !!!!! (हालांकि मेरे मेनू में, यह "सहायता पुस्तकालय जोड़ें")
क्रिस्टोफर

57

यहां भी यही समस्या। 18.1.1 उपकरण बनाने के लिए वापस लाए गए, ग्रहण को फिर से शुरू किया और इसे तय किया।


3
हां, यह तय है। हालांकि पुरानी 19.0.0 निर्देशिका को मैन्युअल रूप से हटाना पड़ा।
चुकंदर

यह मेरे लिए भी तय है, हालांकि मैं 18.0.1 पर वापस आ गया
निकट

1
मैंने इस उत्तर का उपयोग किया और मुझे वापस नहीं लौटना पड़ा: stackoverflow.com/questions/19727915/…
जॉन

मैंने सभी project.properties और targetSdk को सत्यापित किया। मैं IntelliJ IDEA 13 कार्डिया के नवीनतम संस्करण का उपयोग कर रहा हूं और परियोजना के SDK संस्करण के साथ भी खेला गया। बिल्ड-टूल्स 19.0.0 को अनइंस्टॉल करना मेरे प्रोजेक्ट के लिए बिल्ड को ठीक करने का एकमात्र तरीका था।
जेम्स वॉल्ड 6

1
धन्यवाद। उपकरण 18.1.1 का निर्माण करने और 19 को हटाने से मेरे लिए यह तय हो गया। मुझे लगा कि मैं पागल हो रहा हूं
डैरेन

50

मैं इस अतिरिक्त लाइन को जोड़कर अपनी समस्या परियोजना बनाने में सक्षम था:

sdk.build.tools=18.1.1

... मेरी Project.properties फ़ाइल, जो प्रोजेक्ट फ़ोल्डर की जड़ में मौजूद है। अन्य सभी दृष्टिकोण मेरे लिए विफल हो रहे थे।


मुझे लगता है कि समस्या के पीछे यह भी एक कारण है। मैंने अपने लक्ष्य एसडीके में संस्करण 19 का उपयोग कभी नहीं किया और अभी भी समस्या आ रही थी। संभवतः sdk बिल्ड टूल 19 पर सेट किया गया था जिसे वापस लौटाया जाना था
saurav

प्रयुक्त लक्ष्य प्रयुक्त बिल्डटूल संस्करण का निर्धारण नहीं करता है।
प्रवाह

मैंने नवीनतम सहायता लाइब्रेरी को जोड़ा और इस लाइन को परियोजना के गुणों में जोड़ा और मेरी समस्या ठीक हो गई ... धन्यवाद
स्पीडनोमैड्स

मुझे आश्चर्य है कि यह काम किया; यह AOSP स्रोत के रूप में है sdk.buildtools, नहीं sdk.build.tools, और यह वह नाम था जो मेरे लिए काम करता था।
योनी समलान

7

प्रोजेक्ट पर राइट क्लिक करें >> प्रॉपर्टीज >> एंड्रॉइड >> एपीआई लेवल 18 ने मेरे लिए काम किया। लेकिन इससे पहले कि मैंने किया कि मैं सही परियोजना पर क्लिक किया >> Android उपकरण >> समर्थन लाइब्रेरी जोड़ें और ग्रहण को पुनः आरंभ किया । आपको अपने चयनित एपीआई स्तर के साथ खेलना पड़ सकता है ।


3
18 से नीचे एपीआई स्तर के बारे में क्या? हम एपीआई स्तर 18 के नीचे आवेदन कैसे चला सकते हैं?
जयेश

मुझे प्रोजेक्ट-> एंड्रॉइड टूल्स-> सपोर्ट लाइब्रेरी जोड़ना था और इसे एडीटी 19.0.1 सपोर्ट लाइब्रेरी स्थापित करना था। उसके बाद यह apk ठीक उत्पन्न करता है।
user914425

7

नए एसडीके की स्थापना के बाद, आपकी परियोजना फ़ाइल के तहत एक नया फ़ोल्डर, "एंड्रॉइड डिपेंडेंसी" है। यदि आप राइट क्लिक करते हैं और इसे बिल्ड पथ से हटाते हैं, तो आप फिर से अपना प्रोजेक्ट बना पाएंगे।


मैंने देखा कि यह फ़ोल्डर डुप्लिकेट JAR समस्या का कारण होगा। लेकिन इसे हटाने से मेरी समस्या हल नहीं हुई।
सालसरो ६

@ Salsero69 क्या आप अपनी वास्तविक परियोजना में एक संदर्भ के रूप में एक पुस्तकालय परियोजना का उपयोग कर रहे हैं?
महेंद्र लिया

5

अपडेट करें

right click your project > android tools > android support library

अपनी परियोजना को साफ करें और निर्मित करने का प्रयास करें।


4

संशोधन 19 को अपडेट करने के बाद मुझे यही समस्या थी। बस एडीटी, https://dl-ssl.google.com/android/eclipse/ को अपडेट करना न भूलें । इसके बाद, मैं नवीनतम संशोधन के साथ परियोजना का निर्माण करने में सक्षम था।


3

मैंने इस समस्या को समर्थन लाइब्रेरी को डाउनलोड किए बिना या बिल्ड टूल को 18.1.1 पर वापस ला दिया। मैंने बस एपीआई स्तर को 16+ में बदल दिया और समस्या गायब हो गई । आशा है कि यह मदद करेगा।


आपने एपीआई स्तर को 16 में कैसे बदला?
पीटर मोर्टेंसन

मैंने बस अपने प्रोजेक्ट पर राइट क्लिक किया, और सूची से एंड्रॉइड का चयन किया। इसे इंस्टॉल किए गए एंड्रॉइड एपीआई संस्करणों की एक सूची दिखानी चाहिए, जिसमें एपीआई स्तर (4.1.2) के रूप में 16 का चयन करें।
Zsolt Boldizsár

3

एंड्रॉइड स्टूडियो 0.4.0 और ग्रैडल 1.9 में अपग्रेड करने के बाद यहां किसी भी अन्य समाधान ने मेरे लिए काम नहीं किया।

मैंने बिल्ड टूल 19.0.1 को डाउनलोड करके और अपनी बिल्ड.ग्रेड फ़ाइलों में निम्न लाइन को अपडेट करके समस्या का समाधान किया:

buildToolsVersion '19.0.0'

सेवा

buildToolsVersion '19.0.1'

हां, यह मुद्दा 19.0.1 में तय हो गया है। "चींटी डीबग" के साथ भी ठीक काम किया।
रॉबर्ट

2

IntelliJ IDEA 13 के साथ समस्या का सामना कर रहे लोगों के लिए, बिल्ड टूल 19 की स्थापना रद्द करें।


2

19दोनों पर लक्ष्य संस्करण के साथ एक ही मुद्दा था project.propertiesऔरAndroidManifest.xml साथ एंट के ।

इसे इसके द्वारा निर्धारित करें:

  • अनइंस्टॉल किया गया Android SDK Build-Tools 19.0.1
  • स्थापित Android SDK Build-Tools 19.0.2

मुझे लगता है कि @ अल-कथिरी-खालिद हाजिर है। केवल बिल्ड टूल्स में API स्तर के लिए अनुपलब्ध समर्थन के कारण समस्या है।


1

मुझे भी यही समस्या थी, हालाँकि मेरी परियोजना ने समर्थन पुस्तकालय का उपयोग नहीं किया। प्रोजेक्ट में lib / android-support-v4.jar जोड़ना v19 से बिल्ड टूल्स को वापस करने की आवश्यकता के बिना समस्या के आसपास काम किया।


1

मैंने इस समस्या को हल किया। बस प्रोजेक्ट गुण फ़ाइल में यह परिवर्तन करें:

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

और मैनिफ़ेस्ट फ़ाइल में:

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

0

प्रोजेक्ट में लाइब्रेरी फ़ाइल जोड़ें .. प्रोजेक्ट-> राइट क्लिक-> प्रॉपर्टीज़ -> एंड्रॉइड-> लाइब्रेरी-> ऐड जोड़ें पर क्लिक करें और लाइब्रेरी प्रोजेक्ट को सेलेक्ट करें और अप्लाई और ओके करें .. फिर, प्रोजेक्ट को क्लीन करें और फिर से रन करें .. अगर आप पुनः आरंभ करना चाहते हैं ग्रहण ।।

और यह भी, कभी-कभी, एंड्रॉइड एसडीके बिल्ड टूल को अपडेट करने की आवश्यकता होती है।


0

मेरे लिए जो काम किया गया वह यह था: मैंने अपने प्रोजेक्ट की जड़ से प्रोजेक्ट.प्रॉपरेटी फाइल खोली और बदल target=android-8दीtarget=android-17


0

jx.nio.BufferOverflowException dex त्रुटि के दौरान इसका मतलब है कि आपके पास इस स्तर के लिए सहायक API नहीं है इसलिए बिल्ड विफल रहता है, ऐसे कई तरीके हैं जिनसे आप इसे ठीक कर सकते हैं।

अपनी मैनिफ़ेस्ट फ़ाइल का उपयोग करता है जाँचें- sdk android: minSdkVersion = "4" और android: targetSdkVersion = "14"

नीचे दिए गए किसी भी समस्या को ठीक करेगा: -

  • आवश्यक एपीआई स्तर डाउनलोड करें (इसमें समय लग सकता है) और अपना आवेदन फिर से चलाएं
  • में त्वरित गंदा ठीक परिवर्तन आपके परियोजना लक्ष्य project.properties अपने नए लक्ष्य से लक्ष्य = एंड्रॉयड -4
  • क्विक क्लीन फिक्स, अपने मेनिफेस्ट में SdkVersion को बदलें और अपने प्रोजेक्ट में बदलाव करने के लिए अपने प्रोजेक्ट को क्लीन करें।

0

मैंने पिछले Android SDK और ग्रहण को हटा दिया । मैंने ADT बंडल स्थापित किया और यह काम करता है ...

यह API पर बफ़ेरोफ़्लो की समस्या को ठीक करता है जो मुझे एपीआई 19 मिलने के बाद शुरू हुआ था। मैं पहले ऐड-ऑन पैकेज के रूप में स्थापित एंड्रॉइड एसडीके के साथ एक्लिप्स का उपयोग कर रहा था।


जहां से मैं adt बंडल स्थापित कर सकता हूं?
जयेश

0

प्रोजेक्ट >> प्रॉपर्टीज >> एंड्रॉइड पर राइट क्लिक करें और 15 से अधिक एपीआई स्तर का चयन करें

या

प्रोजेक्ट पर राइट क्लिक करके और प्रोजेक्ट >> प्रॉपर्टीज >> एंड्रॉइड >> ऐड करके अपने प्रोजेक्ट में google-play-services_lib जोड़ें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.