java - NoClassDefFoundError-ग्रहण और एंड्रॉइड




android eclipse ant build (23)

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

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

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

संदेश यहां दिया गया है:

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

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


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

चरण 1

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

चरण 2

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

सर्द :)


कभी-कभी यह आपके एंड्रॉइडManifest.xml में "उपयोग-libary" टैग के साथ जार, जिसमें आपकी निर्भरता है, शामिल नहीं होने के कारण होगा।

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

सादर,

रवि


जॉन ओ'कोनर इस मुद्दे के साथ सही है। समस्या एडीटी 17 और ऊपर स्थापित करने के साथ रहता है। त्रुटि को ठीक करने के लिए यह लिंक मिला:

http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17


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

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

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

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


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

परियोजना -> गुण

जावा बिल्ड पथ / ऑर्डर और निर्यात

[✔] आपका जार


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


यह मेरे लिए अक्सर होता है।

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

आखिरकार, मुझे एडीटी के साथ मूल ग्रहण (केप्लर) में अपना आईडीई स्विच करके ऐप फिर से काम कर रहा है (कोई और नोकल्स डीफॉउंड एरर)।


मुझे एक ही समस्या का सामना करना पड़ा है। इसका कारण यह था कि जिस पुस्तकालय का मैं उपयोग करने की कोशिश कर रहा था उसे मानक जेडीके 7 के साथ संकलित किया गया था।

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


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

मेरे मामले में मैं "कुसरर एडाप्टर" वर्ग का उपयोग कर रहा था और "जावाबिल्डपाथ-> ऑर्डर एंड एक्सपोर्ट" के तहत मैंने समर्थन वी 4 जार की जांच नहीं की थी। एक बार यह चुना गया मुद्दा जारी हो गया है।

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


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


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


एडीटी अपडेट करने के बाद मुझे यह समस्या थी।

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

मेरे अपडेट के बाद, मुझे कक्षा के लिए NoClassDefFoundError मिल रहा था जिसे मैं स्पष्ट रूप से जार में शामिल कर सकता था (संदर्भित पुस्तकालय कक्षाओं को देख रहा था)।

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


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

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

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

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

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


यदि आप यह जानना पसंद करते हैं कि वर्कअराउंड किस फाइल से संबंधित है, जो मुझे मिला है। सरल .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 के अपने वर्तमान संस्करण से तुलना करें)।

मेरा मानना ​​है कि यह ग्रहण मेनू के माध्यम से जा रहा है जैसा कि उपरोक्त समझाया गया है (ग्रहण / बिल्ड पथ / ऑर्डर और निर्यात कॉन्फ़िगर करें)।


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


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

जार को रनटाइम पर उपलब्ध होने के लिए, आपको यह करना होगा:

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

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


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


असल में आप कुख्यात 64k सीमा मुद्दे तक पहुंच गए हैं, आपको मल्टीडेक्स को सक्षम करने की आवश्यकता है।

इसे आपको इसी तरह करना होगा। https://developer.android.com/tools/building/multidex.html


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


यहां मैंने देखा है कि किसी ने इसका उल्लेख नहीं किया है।

सभी उपलब्ध प्रोसेसर को एमुलेटर को सौंपें

यहां आप क्या कोशिश कर सकते हैं। यह मेरे लिए एमुलेटर तेज करता है, खासकर समय लोड करने के दौरान। मैंने देखा कि एमुलेटर केवल उपलब्ध सीपीयू के एक कोर का उपयोग कर रहा है। मैंने इसे सभी उपलब्ध प्रोसेसर का उपयोग करने के लिए सेट किया है।

मैं विंडोज 7 का उपयोग कर रहा हूँ।

जब एंड्रॉइड एमुलेटर शुरू हो रहा है, तो टास्क मैनेजर खोलें, प्रक्रिया टैब के नीचे देखें, "emulator-arm.exe" या "emulator-arm.exe * 32" देखें ... राइट क्लिक करें, प्रोसेसर एफ़िनिटी का चयन करें और आप एमुलेटर के रूप में ज्यादा प्रोसेसर असाइन करें।





java android eclipse ant build