2012-03-23 10 views
15

मुझे एक अजीब त्रुटि मिली है। बाहरी .jar फ़ाइलों के लिए एंड्रॉइड ग्रहण NoClassDefFoundError

  • GoogleAdMobAdsSdk-4.3.1.jar (विज्ञापनों के लिए)
  • (एंड्रॉयड 1.6 में टुकड़ा समर्थन के लिए)

    • android-समर्थन-v4.jar: मैं एक Android परियोजना बाहरी पुस्तकालयों का उपयोग करता है विशेष रूप से, है

    प्रोजेक्ट तब तक ठीक हो गया जब तक मैंने प्लगइन के कुछ पहलुओं को अपडेट नहीं किया (विनिर्देशों को याद नहीं किया जा सकता क्योंकि मैंने इसे अधिक ध्यान नहीं दिया था) और उसके बाद, जब भी मैं उपरोक्त से किसी भी वर्ग का उपयोग करने का प्रयास करता हूं .jar फाइलें (या इसके किसी भी उप-वर्ग, यहां तक ​​कि मेरे द्वारा परिभाषित किए गए), मुझे एक java.lang मिलेगा। ClassDefFoundError। मुझे बहुत खोज के बाद जवाब नहीं मिला, इसलिए मैं वास्तव में स्टंप हूं।

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

    उत्तर

    35

    आपको इसे पढ़ने की आवश्यकता है - Dealing with dependencies in Android projects

    यह लिंक भी उपयोगी है - ClassDefNotFoundError with ADT 17

    असल में, एक फ़ोल्डर libs कहा जाता है बना सकते हैं और अंदर अपने jar फ़ाइलों के सभी जगह। हालिया अपडेट स्वचालित रूप से आपके लिए बाकी का ख्याल रखेगा। आपको अब अपना रास्ता संपादित करने की आवश्यकता नहीं है।

    +0

    मुझे सच में नहीं पता कि उन्होंने एडीटी को इस तरह से व्यवहार करने के लिए क्यों बदल दिया क्योंकि इन पुस्तकालयों को कई परियोजनाओं के बीच साझा किया जाएगा। लेकिन कम से कम यह एक अल्पकालिक तय होगा। – Dan

    +0

    धन्यवाद, बहुत सारे! – AVEbrahimi

    +5

    यह मेरे लिए काम नहीं किया .. एडीटी 20 – Cheluis

    0

    एंड्रॉइड एसडीके, आर 17 पर अपडेट करने के कारण आज भी मैं इस त्रुटि में भाग गया। @aneal ने जो लिंक दिए हैं, वे चर्चा नहीं करते हैं कि बाह्य रनटाइम पुस्तकालयों को कैसे संभालना है (जैसे कि उनके शीर्षक के तहत आयात किए गए - आयातित उपयोगकर्ता लाइब्रेरी नहीं)।

    इस समस्या को हल करने का सबसे आसान तरीका बिल्ड पथ में निर्माण आदेश को बदलना है। बस अपनी परियोजना पर राइट क्लिक करें और गुण चुनें। यहां से, जावा बिल्ड पथ चुनें। डिस्प्ले के शीर्ष पर, टैब ऑर्डर करें और निर्यात करें और GoogleAdMobAdsSdk-4.3.1.jarएंड्रॉइड एक्स (आपके द्वारा उपयोग किए जा रहे संस्करण के साथ एक्स को प्रतिस्थापित करें) को स्थानांतरित करें। इसके बाद, अपनी परियोजना को साफ करें और इसे चलाएं। आप जाने के लिए तैयार हैं!

    1

    अन्य लोगों के लिए एक चेतावनी भी जिन्होंने कई निर्भरताओं के साथ r17 को अद्यतन किया है। मेरे पास मेरे निर्माण पथ पर एक और संदर्भित प्रोजेक्ट था और यह अभी भी इंटरनेट पर इस आर 17 मुद्दे पर सभी निर्देशों का पालन करने के बाद काम नहीं करता है।

    एक घंटे बाद पता चला कि मेरे संदर्भित प्रोजेक्ट ने मेरे मुख्य प्रोजेक्ट की तुलना में बाहरी जार का पुराना संस्करण इस्तेमाल किया था। मुख्य परियोजना को संकलित करने का प्रयास करते समय, ग्रहण इस जार संस्करण अंतर के कारण छोड़ देगा और मैंने कंसोल में चेतावनी संदेश कभी नहीं देखा।

    समाधान नए संस्करण बाहरी जार फ़ाइल को संदर्भित प्रोजेक्ट की libs निर्देशिका में कॉपी करना था।

    वाह - इस तरह के एक उत्पादकता हत्यारा .....

    7

    एंड्रॉयड अब तक Java1.7 समर्थन नहीं करता। अनुपालन स्तर 1.7 के साथ बनाया गया जार एंड्रॉइड अनुप्रयोगों में उपयोग नहीं किया जा सकता है। जार फ़ाइल निर्यात करने से पहले अनुपालन स्तर 5.0 या 6.0 के साथ अपने जावा प्रोजेक्ट को पुनर्निर्माण करें।

    मुझे यह पोस्ट Google के माध्यम से मिला और ऊपर दिए गए उत्तरों ने मेरी समस्या का समाधान नहीं किया। आशा है कि मैं जो कहता हूं वह दूसरों के लिए सहायक होगा।

    +0

    का उपयोग करके यह मेरी समस्या साबित हुई। मैं 1.6 और voila के साथ recompiled! मैंने "जावा-सोर्स 6-लक्ष्य 6 ..." – Jason

    0

    जिस तरह से मैंने इसे हल किया था: परियोजना पर राइट क्लिक करना और पथ बनाना चुनना। दिखाई देने वाले चयनों में बिल्ड पथ कॉन्फ़िगर करें का चयन करें। उसके बाद देखें कि लाइब्रेरी फ़ोल्डर में आपकी लाइब्रेरीज़ हैं और फिर ऑर्डर और निर्यात टैब का चयन करें और वहां अपनी सभी जार फ़ाइलों का चयन करें। फिर ठीक चुनें और अपनी परियोजना चलाएं।

    7

    आप के उन्नयन एडीटी 22 के बाद NoClassDefFoundError देखते हैं, तो ग्रहण में इस प्रयास करें:

    • जाओ को प्रोजेक्ट गुणजावा बिल्ड पथआदेश और निर्यात टैब।
    • एंड्रॉइड प्राइवेट लाइब्रेरीज़ विकल्प देखें।

    Android Private Libraries option

    +0

    का उपयोग किया जो मेरे लिए चाल है। आपका बहुत बहुत धन्यवाद ! – Vahron

    0

    आप Maven आईडीई (m2e) के साथ ग्रहण उपयोग कर रहे हैं "जावा बिल्ड पथ" फिर "आदेश और निर्यात" के लिए जाना और अंत में आइटम "Maven निर्भरता" की जाँच करें और करने के लिए इसे नीचे खींच सूची का बॉटम। आपको एक ही कार्यक्षेत्र में परियोजना संदर्भों के साथ ऐसा ही करना चाहिए। हर बार जब मैं एक नए कंप्यूटर में प्रोजेक्ट स्थापित करता हूं जो होता है।