NoClassDefFoundError - ग्रहण और Android


193

मुझे एक एंड्रॉइड ऐप चलाने की कोशिश करने में समस्या हो रही है, जो एक बाहरी बाहरी लाइब्रेरी को इसके निर्माण पथ में जोड़ने तक ठीक काम कर रहा था। जब से स्कोरिनिन्जा जार जोड़ा गया है, मुझे अब एक NoClassDefFoundError मिलता है जब मैं ऐप को चलाने की कोशिश करता हूं।

यहाँ संदेश है:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

जैसा कि सभी बिल्ड स्क्रिप्ट एंड्रॉइड टूल (?) द्वारा उत्पन्न होती हैं, मुझे यकीन नहीं है कि मैं ग्रहण को साफ करने और पुनर्निर्माण या फिर से शुरू करने के अलावा और क्या कर सकता हूं (मैंने पहले ही तीनों की कोशिश की है)। क्या किसी को पता है कि मैं इसे कैसे संशोधित कर सकता हूं?


1
आपने जार फ़ाइल कैसे जोड़ी? क्या आपने बिल्ड पथ का उपयोग करके जोड़ा -> लाइब्रेरी -> बाहरी जार ??
तेजा कंतमनी 21

1
राइट-क्लिकिंग प्रोजेक्ट> बिल्ड पाथ> बाहरी अभिलेख जोड़ें ... यहाँ दिए गए निर्देशों के अनुसार: scoreninja.appspot.com
टॉम आर

4
आपने हाल ही में एडीटी अद्यतन करते हैं, तो नीचे दिए गए जॉन जवाब को देखो (और यह वोट दें!) Stackoverflow.com/a/9916751/489852
अतुल गोयल

1
यदि आप इस समस्या को ले रहे हैं, तो इससे पहले कि आप जॉन के उत्तर में कूदें, नीचे दिए गए @Till का उत्तर बहुत से लोगों के लिए भी हल हो रहा है, खुद भी शामिल है।
कार्लोस पी

क्या आपने मल्टीडेक्स की कोशिश की?
आशीष रावत

जवाबों:


234

मुझे ADT अपडेट करने के बाद यह समस्या हुई।

मैं अपनी सभी JAR फ़ाइलों को "lib" नामक फ़ोल्डर में संग्रहीत कर रहा था और जार को सामान्य ग्रहण मार्ग के निर्माण पथ में जोड़ रहा था। यह मेरे अद्यतन तक ठीक काम किया।

मेरे अद्यतन के बाद, मुझे एक क्लास के लिए NoClassDefFoundError मिल रहा था जिसे मैं स्पष्ट रूप से देख सकता था कि जार में शामिल किया गया था (रेफरल लाइब्रेरीज़ की जाँच करना)।

समाधान यह था कि मेरे जार को निर्माण पथ से हटा दिया जाए और मेरे "लीबी" फ़ोल्डर का नाम बदलकर "लिबास" कर दिया जाए। यह एक चींटी सम्मेलन है, और लगता है कि जिस तरह से नए ADT को एक .apk फ़ाइल में लाइब्रेरी मिलती है और इसमें शामिल है। एक बार जब मैंने ऐसा किया, तो सब कुछ ठीक रहा।


1
आपका बहुत बहुत धन्यवाद! कल के ADT अपडेट से पहले मेरे पास न तो कोई लिब या libs फ़ोल्डर था, और सब कुछ ठीक था। अपडेट के बाद, सभी बाहरी जार में यह समस्या थी। आपके उत्तर के लिए उन्हें धन्यवाद दिया गया है। मुझे आपका ब्रायन के साथ गठबंधन करना है ताकि यह काम कर सके।
हांग

धन्यवाद जॉन! मैं जोड़ूंगा कि फ़ोल्डर को लिबास में बदलने के बाद मुझे इसे काम करने के लिए ग्रहण को फिर से शुरू करना पड़ा।
माइकलडकोनी

5
मैं ADT को अपडेट करने के बाद उसी समस्या में भाग गया, लेकिन मैं अपनी परियोजना के बाहर एक निर्देशिका में अपने जार को रख रहा था और उन्हें अपने निर्माण पथ में एक उपयोगकर्ता लाइब्रेरी के रूप में शामिल कर रहा था। समाधान यह था कि उपयोगकर्ता लाइब्रेरी को मेरे बिल्ड पथ से हटा दें और इसके बजाय "एड एक्सटर्नल जार" का उपयोग करके जार शामिल करें, और फिर "ऑर्डर और एक्सपोर्ट" टैब पर चेकबॉक्स को चेक करके उन्हें निर्यात करें।
ट्रैविस

1
मैं C: \ android-sdk-windows \ extras \ android \ संगतता \ v13 में एक बाहरी पुस्तकालय के रूप में android-support-v13.jar को संदर्भित कर रहा था। मैंने उस JAR को प्रोजेक्ट लिबास फ़ोल्डर में स्थानांतरित कर दिया और जावा बिल्ड पाथ -> लाइब्रेरी से संदर्भ हटा दिया। एक साफ निर्माण और मैं फिर से जा रहा था।
स्नोवेयर

नमस्ते। मैंने अंदर / जार में बाहरी जार लिब को जोड़कर हमारे दृष्टिकोण की कोशिश की और अब मैं इस त्रुटि को दूर करता हूं: Dalvik प्रारूप में रूपांतरण त्रुटि 1 के साथ विफल हुआ
जोनाथन

100

मुझे जार-लाइब्रेरी को परिसंपत्तियों या देयता (एस) में नहीं डालना था, लेकिन केवल गुणों में इस जार के लिए बॉक्स पर टिक करें -> जावा बिल्ड पाथ -> "ऑर्डर एंड एक्सपोर्ट" (इसे पहले सूचीबद्ध किया गया था, लेकिन चयनित नहीं )


बहुत बहुत धन्यवाद! मैं लंबे समय से इस त्रुटि से जूझ रहा था और मुझे "ऑर्डर और एक्सपोर्ट" स्क्रीन में जार के लिए darn बॉक्स की जांच करनी थी। मजेदार बात यह है कि मुझे केवल इतना करना था ताकि यह एक नुक्कड़ टैबलेट एमुलेटर पर काम करे। डिवाइस या अन्य एमुलेटर पर कोई समस्या नहीं थी।
लुइस

5
क्या किसी को पता है कि आपको दोनों क्यों करना है, लाइब्रेरी को जोड़ना और ऑर्डर और एक्सपोर्ट में चेकबॉक्स का चयन करना है? क्या कोई कारण है कि मैं एक बाहरी JAR जोड़ना चाहूंगा, लेकिन ऑर्डर और निर्यात में इसे शामिल नहीं करूंगा?
लू मोर्डा

मुझे ADT अपडेट करने के बाद यह समस्या हुई और इसने मेरे लिए इसे हल कर दिया।
cdavidyoung

5
इसने मेरी मदद की, लेकिन मैंने प्रोजेक्ट करने के बाद ही -> स्वच्छ
एलिमैन्टो

धन्यवाद!! मुझे बचाया। ग्रहण जूनो स्थापित करने के बाद एक साफ और पुनः आरंभ करना था।
रेनार्ड्ट

68

अपने निर्माण पथ में बाहरी जार को जोड़ने से सिर्फ जार को आपके पैकेज में जोड़ा जाता है, लेकिन यह रनटाइम के दौरान उपलब्ध नहीं होगा।

जार को रनटाइम पर उपलब्ध होने के लिए , आपको निम्न करने की आवश्यकता है:

  • जार को अपने assetsफोल्डर के नीचे रखें
  • अपने निर्माण पथ में जार की इस प्रति को शामिल करें
  • उसी पॉपअप विंडो पर एक्सपोर्ट टैब पर जाएं
  • नए जोड़े गए जार के खिलाफ बॉक्स को चेक करें

ScoreNinjaAdapter किसी और का कोड है, लेकिन मुझे बहुत आश्चर्य होगा अगर इसमें ऐसी त्रुटि थी जैसा कि यह आम उपयोग में है। त्रुटि मेरे अपने कोड में एक बिंदु पर होती है।
टॉम आर

त्रुटि का शाब्दिक अर्थ यहाँ होता है: sna = new ScoreNinjaAdapter (यह, SN_APP_ID, SN_APP_KEY);
टॉम आर

क्या आपको importबाहरी जार फ़ाइलों के लिए एक कथन की आवश्यकता है ? मैंने कभी उनका इस्तेमाल नहीं किया।
एंथनी फोर्लोनी

क्या आपने assestsफ़ोल्डर दृष्टिकोण से .jar फ़ाइल को हटाने की कोशिश की है ?
एन्थोनी फोर्लोनी

हाँ। अंत में, मैं इस सब से तंग आ गया और बस स्रोत को डाउनलोड किया और स्रोत फ़ाइलों को अपने प्रोजेक्ट में कॉपी किया। सबसे अच्छा समाधान नहीं है, लेकिन यह अब काम करता है। आपकी सभी मदद का धन्यवाद।
टॉम आर

48

मैं MapActivity के लिए यह किया था। एक्लिप्स में बिल्ड को डीबगर में NoClassDefFound मिलता है।

<Application>...</Application>तत्व के अंदर, प्रकट करने के लिए पुस्तकालय जोड़ना भूल गए

<uses-library android:name="com.google.android.maps" />

27

मैंने शामिल परियोजनाओं के क्रम को बदल दिया है (ग्रहण / निर्माण पथ / आदेश और निर्यात कॉन्फ़िगर करें)। मैंने अपनी दो आश्रित परियोजनाओं को "ऑर्डर और एक्सपोर्ट" सूची के शीर्ष पर पहुंचा दिया है। इसने "NoClassDefFoundError" समस्या को हल किया।

यह मेरे लिए अजीब है। मैं शामिल पुस्तकालयों और परियोजनाओं के क्रम के महत्व के बारे में नहीं सुना था। Android + ग्रहण मजेदार है :)


यह दूसरा समाधान भी है जिसका उल्लेख यहाँ बगरूप में किया गया है: code.google.com/p/android/issues/detail?id=55304
arberg

15

मुझे यकीन नहीं है कि यह संबंधित है, या यदि आप अभी भी एक उत्तर की तलाश कर रहे हैं, लेकिन मैं एक ही त्रुटि पर शोध करने की कोशिश करते हुए इस धागे में आया हूं (लेकिन संभवतः विभिन्न कारणों से)।

मुझे कोई समाधान ऑनलाइन नहीं मिला, लेकिन एक समान सूत्र पर एक उत्तर ने मुझे सोच लिया और मुझे एहसास हुआ कि मुझे परियोजना को फिर से बनाने (या साफ करने) की आवश्यकता है।

ग्रहण में, प्रोजेक्ट => स्वच्छ पर जाएं। अपनी परियोजना का चयन करें और ग्रहण इसे स्वयं ठीक करने के लिए लग रहा था। मेरे लिए यह समस्या हल हो गई।

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


हाँ, E ग्रहण / ADT / dex में एक बग प्रतीत होता है / जो कुछ भी मूल रूप से निर्माण में कक्षाएं छूट जाती हैं। यह उस Applicationवर्ग को भी याद कर सकता है जो एक अलग त्रुटि की ओर जाता है।
टिम्मम

13

मैंने उसी मुद्दे का सामना किया है। कारण यह था कि मैं जिस पुस्तकालय का उपयोग करने का प्रयास कर रहा था, उसे मानक JDK 7 के साथ संकलित किया गया था।

मैंने इसे -source 1.6 -target 1.6विकल्पों के साथ फिर से जोड़ दिया और यह ठीक काम किया।


थैंक यू युवुइउउउउउउउउउउउ !!!!!!!!!!!!!!!!!!! मैं इस समस्या से निराश हो गया हूँ और आपने इसे हल कर दिया है! यह थोड़ा विडंबना है कि नवीनतम जेली बीन 4.3 एसडीके (एपीआई 18) अभी भी 1.7 जार / कक्षाएं नहीं पढ़ सकता है। और सबसे बुरी बात यह है कि यह बिल्कुल भी शिकायत नहीं करता है :(
हेंडी इरावन

मुझे भी यही समस्या आ रही थी। सबसे बुरी बात यह है कि मैंने इस विकल्प पर विचार किया और फिर मैंने अपने स्रोत 1.7 को -source 1.5 (सुनिश्चित करने के लिए) के साथ बदल दिया और समस्या हल नहीं हुई। लेकिन, आपकी टिप्पणी को पढ़ने के बाद, मैंने 1.6 के साथ फिर से कोशिश की और फिर, यह एक आकर्षण की तरह काम किया।
पेड्रो नाउज़

7

मेरे लिए एक ही काम किया: गुण -> जावा बिल्ड पाथ -> "ऑर्डर और एक्सपोर्ट" दिलचस्प रूप से - यह स्वचालित रूप से क्यों नहीं किया जाता है? मुझे लगता है कि कुछ सेटिंग गायब है। एसडीके अपग्रेड के बाद मेरे लिए भी यह हुआ।


3

अपने प्रोजेक्ट फोल्डर पर राइट क्लिक करें, जावा बिल्ड पाथ में प्रॉपर्टीज की तलाश करें और उन जार फाइलों का चयन करें जिन्हें आप देखते हैं। इसने मेरे लिए काम किया।



2

मैंने इस पोस्ट (और कुछ अन्य पोस्ट) से सब कुछ करने की कोशिश की, और इसने मेरे लिए काम नहीं किया, यह अब तक का सबसे भयानक एडीटी अपग्रेड है जो मैंने अनुभव किया है, और मैं कभी भी काम कर रहे एडीटी बैकअप के बिना अपग्रेड नहीं करूंगा।

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


2

ADT22 के साथ मेरी भी यही त्रुटि थी। इसे गुणों में "एंड्रॉइड प्राइवेट लाइब्रेरीज़" की जाँच करने का संकल्प लिया -> जावा बिल्ड पाथ -> ऑर्डर और एक्सपोर्ट। यदि आप किसी भी पुस्तकालय परियोजनाओं का उपयोग कर रहे हैं, तो उनके लिए भी यही किया जाना चाहिए।


इसने मेरे लिए भी काम किया। मैंने लाइब्रेरी को शामिल किया, लेकिन "ऑर्डर और निर्यात" में इसे जांचना भूल गया। धन्यवाद!
jmrodrigg

2

सभी मौजूदा उत्तर मेरे लिए काम नहीं करते क्योंकि मेरा मामला थोड़ा अलग है। मुझे काम करने में कुछ घंटे लग गए। मैं ग्रहण का उपयोग कर रहा हूं।

मेरे एंड्रॉइड प्रोजेक्ट में एक और सामान्य जावा 1.6 परियोजना शामिल है, जिसे एक 3 पार्टी जार फ़ाइल की आवश्यकता है। चाल है:

  • इसे (केवल) संकलित करने के लिए सामान्य जावा परियोजना में जार शामिल करें, इसे "ऑर्डर और निर्यात" टैब में जांचें नहीं
  • इस जार फ़ाइल को एंड्रॉइड प्रोजेक्ट के "libs" फ़ोल्डर में भी कॉपी करें ताकि यह रनटाइम में उपलब्ध हो जाए

आशा है कि यह उन लोगों की मदद करेगा जिनके पास मेरे जैसे समान परिदृश्य हैं।


1

कभी-कभी आपको पूरी बाहरी परियोजना को पुस्तकालय के रूप में लेना पड़ता है और न केवल जार:

मेरी समस्या को पूरी परियोजना (मेरे मामले में google-play-services_lib) को लाइब्रेरी के रूप में और न केवल जार को जोड़कर हल किया गया। इसे करने के लिए कदम ( @style उत्तर से ):

  1. फ़ाइल> New-> अन्य
  2. Android प्रोजेक्ट चुनें
  3. "मौजूदा स्रोत से प्रोजेक्ट बनाएं" चुनें
  4. "ब्राउज़ करें ..." बटन पर क्लिक करें और वांछित परियोजना पर जाएं
  5. समाप्त करें (अब अपने कार्यक्षेत्र में एक्शन बार प्रोजेक्ट)
  6. अपनी परियोजना पर राइट क्लिक करें -> गुण
  7. Android-> लाइब्रेरी अनुभाग में जोड़ें पर क्लिक करें
  8. हाल ही में जोड़े गए प्रोजेक्ट का चयन करें -> ठीक है

1

कभी-कभी जार, जो आपके पास निर्भरता के साथ होता है, आपके AndroidManifest.xml में "यूज़-लिबरी" टैग के साथ नहीं होने के कारण ऐसा होगा।

इसके अलावा, सुनिश्चित करें कि यह "एप्लिकेशन" टैग के अंदर होना चाहिए।

सादर,

रवि


1

मुझे यह समस्या थी और यह लाइब्रेरी को "निर्यात" नहीं करने के कारण हुआ था। मैं सिर्फ इसलिए था क्योंकि कुछ वर्गों के लिए .class फाइलें एपीके पैकेजिंग के समय उपलब्ध नहीं हैं। यह समय समाप्त होने के साथ ठीक काम करेगा।

मेरे मामले में मैं "CusrsorAdapter" वर्ग का उपयोग कर रहा था और "JavaBuildPath-> ऑर्डर और एक्सपोर्ट" के तहत मैंने V4 jar का समर्थन नहीं किया। यह चयनित समस्या है।

यह सुनिश्चित करने के लिए कि आपको उपरोक्त कारण से noClassDefFound त्रुटि मिल रही है, कृपया अपने लॉगाकैट की जांच करें, आपको रन टाइम पर अज्ञात सुपर क्लास त्रुटि दिखाई देगी।



0

मैंने विभिन्न चीजों की कोशिश की और मेरे मामले में त्रुटि का कारण जावा बिल्ड पाथ-> लाइब्रेरी में मैप्सजार और गूगल एपी के बीच संघर्ष था। तो, जब मैंने maps.jar को हटाया तो यह ठीक काम कर गया।

सादर,

Wahib


0

कृपया सुनिश्चित करें कि आपकी जार फ़ाइल आपके प्रोजेक्ट की लिबास डायरेक्टरी में है जिसमें आप अपने ग्रहण के साथ नए एडीटी संस्करण का उपयोग कर रहे हैं।


0

मुझे ठीक वही समस्या मिली ... इसे ठीक करने के लिए, मैंने बस अपने Android Private Libs को "build path" में हटा दिया और ok पर क्लिक कर दिया ... और जब मैंने "बिल्ड पाथ" को ओपन किया तो फिर से ग्रहण ने उन्हें फिर से अपने साथ जोड़ लिया। और फिर यह मेरे लिए काम करता है;) ...


0

मैंने एडीटी को अपडेट करने के बाद इस मुद्दे को हल करने के लिए दो दिन बिताए। अंत में मैं इस पद को पाने के लिए भाग्यशाली था:

https://code.google.com/p/android/issues/detail?id=55304

जो मुझे सही दिशा में ले गया। जब आप समाधान का पालन करते हैं - तो अपनी सभी परियोजनाओं के एंड्रॉइड सपोर्ट लाइब्रेरी को एक ही संस्करण में बदलने के लिए याद रखें (इसे हटा दें और इसे फिर से इंस्टॉल करें)। मुझे उम्मीद है यह मदद करेगा, गुड लक


0

यदि आप यह जानना पसंद करते हैं कि वर्कअराउंड कौन सी फाइलों से संबंधित है, तो मैं यहां पाया गया। सरल .classpath फ़ाइल को बदल दें

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

सभी लाइब्रेरी प्रोजेक्ट्स और मुख्य एंड्रॉइड प्रोजेक्ट में .classpath फ़ाइल को बदलें। .Classpath फ़ाइल ग्रहण प्रोजेक्ट के रूट फ़ोल्डर में है। अपने स्वयं के क्लासपाथ प्रविष्टियों को जोड़ने के लिए मत भूलना, क्या आपके पास कोई भी होना चाहिए (इसलिए अपने वर्तमान संस्करण की .classpath से तुलना करें)।

मेरा मानना ​​है कि यह उसी तरह का परिणाम है जैसा कि ग्रहण मेनू के माध्यम से जाना जा रहा है क्योंकि उपकप्तान-उपयोक्ता को ऊपर बताया गया है (ग्रहण / निर्माण पथ / आदेश और निर्यात कॉन्फ़िगर करें)।


0

यहाँ समाधान ने मेरे लिए काम किया। यह लायब्रेरी के लिए libs फ़ोल्डर में आयात करने की बात है, फिर build.gradle फ़ाइल को संशोधित करना और फिर gradlew के साथ सफाई करना।


0

यदि आप अपने आदेश और निर्यात को अपने प्रोजेक्ट बिल्ड पथ में बदलते हैं, तो यह त्रुटि नहीं होगी। इसे प्राप्त करने का दूसरा तरीका आपके प्रोजेक्ट फ़ोल्डर में .classpath है।


0

इसे इस्तेमाल करे:-

चरण 1

ग्रहण में पैट बनाने के लिए सभी पुस्तकालयों को जोड़ें (इसका अर्थ है सभी पुस्तकालयों को संदर्भित पुस्तकालय बनाएं)

चरण 2

R.java फ़ाइल को हटाएँ और फिर से प्रोजेक्ट बनाएँ। चिंता मत करो, R.java स्वचालित रूप से पुनः निर्मित हो जाएगा।

सर्द :)


0

जैसा कि मैंने समझा, आपके प्रोजेक्ट में कोई त्रुटि नहीं है, क्योंकि आपने जार को शामिल किया है। लेकिन जार का उपयोग नहीं किया जाएगा, जब आपके प्रोजेक्ट को डिवाइस को "निर्यात" किया गया था। इसे इस्तेमाल करे

प्रोजेक्ट -> गुण

जावा बिल्ड पाथ / ऑर्डर और एक्सपोर्ट

[Jar] आपका जार


0

मेरे साथ ऐसा बहुत बार होता है।

पिछली बार जो हुआ था मुझे याद है कि ग्रहण एडीटी (Google विशेष संस्करण) को एंड्रॉइड स्टूडियो में स्विच करने और वापस स्विच करने के कारण हुआ था। मैंने मूल रूप से सभी तरीकों की कोशिश की, जो मुझे स्टैकओवरफ्लो पर मिल सकते हैं जो मेरे लिए काम नहीं करते थे।

आखिरकार, मुझे अपने IDE को ADT के साथ मूल ग्रहण (केप्लर) पर स्विच करके फिर से काम करना पड़ा (NoCalssDeffoundError)।

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