2012-03-22 18 views
13

मैंने अपने एंड्रॉइड-एसडीके-पैकेज को आर 16 से आर 17 तक अपडेट किया है। मैंने एक्लिप्स एडीटी-प्लगइन भी अपडेट किया है।
मेरी परियोजना आर 16 (एंड्रॉइड-एसडीके आर 16 और ग्रहण एडीटी प्लगइन v16) के साथ पूरी तरह से ठीक काम करती है, लेकिन अब ऐप शुरू नहीं होता है: क्लासलोडर मुख्य गतिविधि नहीं ढूंढ सकता है। मुख्य गतिविधि पहली गतिविधि है, जो शुरू होती है (यह AndroidManifest में ठीक से घोषित किया गया है)।एंड्रॉइड-एसडीके आर 17 खंडहर परियोजनाओं

 
03-22 15:07:28.984: E/AndroidRuntime(22106): Caused by: java.lang.ClassNotFoundException: my.....MainActivity 
03-22 15:07:28.984: E/AndroidRuntime(22106): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
03-22 15:07:28.984: E/AndroidRuntime(22106): at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
03-22 15:07:28.984: E/AndroidRuntime(22106): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
03-22 15:07:28.984: E/AndroidRuntime(22106): at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
03-22 15:07:28.984: E/AndroidRuntime(22106): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871) 

पैकेज का नाम 100% सही है। मैंने अपनी परियोजना के एक टैग किए गए संस्करण की भी जांच की है (मैंने प्रोजेक्ट जारी किया है और मैं हमेशा अपने संस्करणों को टैग करता हूं) और इसे आजमाया: एक ही परिणाम।
क्या मैं पहले से ही की कोशिश की है (मैं आर्क लिनक्स का उपयोग करें):
- (/ opt/Android-SDK पूरे android-फ़ोल्डर हटाना - हटाना Android-SDK + Android-SDK मंच-उपकरण (और उन्हें पुनः स्थापित)
) और, संकुल को पुनर्स्थापित लक्ष्य मंच डाउनलोड
- हटाना ~/.android
- हटाना ~/.eclipse
- पुनः स्थापित ग्रहण ADT-प्लगइन
- पुन: वर्चुअल डिवाइस
- एक नई परियोजना बनाने (नया प्रोजेक्ट काम करता है)
- .apk- फ़ाइल और डीएक्सडम्प के साथ संकलित कक्षाओं को देखें: एपीके-फाइल में मुख्य गतिविधि
है - मैंने कुछ संबंधित के लिए एंड्रॉइड-एसडीके-रिलीज-नोट्स पढ़ा है, लेकिन मुझे कुछ भी नहीं मिला
- और निश्चित रूप से, परियोजना का पुनर्निर्माण करें (स्वच्छ + निर्माण, मैंने मैन्युअल रूप से बिन-फ़ोल्डर को हटा दिया)

एकमात्र चीज जो वास्तव में काम करती थी वह मेरी नोटबुक (अभी भी एंड्रॉइड-एसडीके आर 16) पर स्विच करना था।
तो ... मैं गलत क्या कर रहा हूं? यह शायद कुछ आसान है ...

धन्यवाद!

+0

"क्लीन + बिल्ड" चरण के लिए छोटे जोड़े: परियोजना को बंद करना और फिर से खोलना कभी-कभी ग्रहण/एडीटी प्लगइन को सबकुछ पुन: उत्पन्न करने में मदद करता है। – Robert

उत्तर

22

जैसा कि here और अन्यत्र बताया गया है, आपको यह सुनिश्चित करने की आवश्यकता है कि आप किसी भी तृतीय पक्ष JARs को libs/ में अपने प्रोजेक्ट में और किसी भी निर्भर पुस्तकालय परियोजनाओं में लाइव का उपयोग कर रहे हैं। कोशिश करें और देखें कि यह मदद करता है या नहीं।

+0

बहुत बहुत धन्यवाद। मुझे पता था कि यह कुछ बेवकूफ था ... Google को अपने होमपेज पर इंगित करना चाहिए। मैंने तीसरे पक्ष के जार के बारे में भी सोचा नहीं था। –

+0

इस जानकारी के लिए धन्यवाद। तो यहां तक ​​कि सामान्य प्रयोगात्मक, ग्रहण के लिए, डीबग केवल एमुलेटर के लिए बनाता है, प्रत्येक परियोजना जिसे किसी विशेष तृतीय पक्ष जार की आवश्यकता होती है, को केंद्रीय स्थान के संदर्भ के बजाय अपनी प्रति की आवश्यकता होती है? यह मेरे लिए एक प्रतिकूल कदम लगता है। – NickT

+0

@ निकट: यदि आप एक ओएस का उपयोग कर रहे हैं जो सिम्लिंक का समर्थन करता है, तो वे काम कर सकते हैं। – CommonsWare

0

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

0

इस विषय पर भी android-developers forum पर चर्चा की जा रही है। मेरे लिए काम करने वाली जादू नुस्खा यह थी: पुन: होमिंग पुस्तकालयों के अलावा, मुझे प्रोजेक्ट प्रॉपर्टीज में 4.0.3 से दूर और फिर से अपना लक्ष्य एसडीके बदलना पड़ा। यह तय है।

4

उन सीधे चींटी का उपयोग कर डेवलपर्स के लिए जो लक्ष्य जो "jar.libs.ref" का उल्लेख अधिरोहित है एक कस्टम build.xml के साथ बनाता है, आप ध्यान देना चाहिए कि इस प्रतिस्थापित किया गया है, तो अपने निर्माण असफल हो जायेगी।

"project.libraries.jars" मेरी लक्ष्यों के लिए काम किया को यह बदल रहा है, लेकिन आप शायद पिछले एसडीके/उपकरण/चींटी/build.xml और नया एक के बीच डिफ जांच होनी चाहिए। एसडीके टूल्स को अपग्रेड करने से पहले इसकी एक प्रतिलिपि लेना हमेशा योग्य होता है, क्योंकि चींटी निर्माण अक्सर अपग्रेड प्रक्रिया द्वारा टूटा जाता है।

+0

बिल्कुल सही, धन्यवाद ! – NuSkooler

0

यदि आप यहां मेवेन का उपयोग नहीं कर रहे हैं तो कॉमन्सवेयर से उल्लिखित चित्रों के साथ विस्तृत मार्गदर्शिका है।

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

लेकिन अगर आप Maven निर्भरता का उपयोग कर रहे पुस्तकालय परियोजना m2e-एंड्रॉयड कनेक्टर के साथ शामिल नहीं हैं अभी भी यह कैसे संभाल करने के लिए, इसलिए यदि आप Maven के साथ एंड्रॉयड परियोजनाओं पर अपडेट नहीं करते है पता नहीं है एडीटी 17.

एम 2 ई (एम 2 ई एंड्रॉइड) के लिए एंड्रॉइड कनेक्टर का नया 0.4.1 संस्करण जारी किया गया है और मेवेन परियोजनाओं के साथ एक बग तय किया गया है। https://github.com/rgladwell/m2e-android/issues/72

0

मैं एडीटी 18 का उपयोग करते समय एक ही त्रुटि पर फिसल गया। मेरे जार फ़ाइलों को एक lib से libs फ़ोल्डर में स्थानांतरित करने सहित कई कारण थे। संयोग से मैं जेडीके 7 स्थापित के साथ एक नया वर्कस्टेशन का उपयोग कर रहा था। मुझे यह समझने में कई घंटे लगे कि डेक्स बिल्ड चरण संकलित कक्षा फ़ाइलों को एक जार फ़ाइलों में से एक से अस्वीकार कर रहा था क्योंकि मैंने अलग-अलग बनाया था क्योंकि कक्षा हस्ताक्षर अस्वीकार्य था। डीएक्स बिल्ड चरण द्वारा रिपोर्ट की गई त्रुटि "परेशानी प्रसंस्करण: खराब वर्ग फ़ाइल जादू (कैफेबैब) या संस्करण (0033.0000)"

मेरी जार फ़ाइल में शुद्ध जावा कोड होता है जिसे मैं चींटी का उपयोग करके बनाता हूं। एक लंबी कहानी को छोटा करने के बाद, मैंने अंततः जावा 6 के जेडीके को स्थापित करने के बाद सब कुछ काम करने में कामयाब रहा, जेडीके 6 बिन फ़ोल्डर के पथ को मेरे पथ विवरण & में पहली आइटम के रूप में जोड़ा, फिर जार फ़ाइल को फिर से बनाया। मैं फिर अपने एंड्रॉइड प्रोजेक्ट में जार फ़ाइल का उपयोग करने में सक्षम था। डीएक्स बिल्ड चरण ने जार फ़ाइल से कक्षाओं को अस्वीकार नहीं किया और इसलिए मेरा ऐप क्लास नॉटफाउंड अपवाद के साथ विफल होने की बजाय डिवाइस पर चला गया।

मुझे कई उपयोगी टिप्स मिलीं: - -v कमांड लाइन विकल्प के साथ चींटी चलाएं और आउटपुट सावधानी से जांचें। इस तरह मुझे पता था कि जावा 6 कंपाइलर का इस्तेमाल मेरे सभी परिवर्तनों के अंत में किया जा रहा था। और इसी तरह जब मैंने एंटी का उपयोग करके एंड्रॉइड ऐप बनाया, तो डेक्स चरण में मुझे यह बताने के लिए पर्याप्त जानकारी थी कि कौन सी जार फाइलें संसाधित की गई हैं, आदि

इसी प्रकार ग्रहण में मैंने एंड्रॉइड बिल्ड आउटपुट के लिए लॉगिंग के वर्बोज़ स्तर को सक्षम किया। प्राथमिकताएं> एंड्रॉइड> बिल्ड> आउटपुट बनाएं> वर्बोज़

एडीबी लॉगक आउटपुट वास्तव में अनुपलब्ध क्लास फ़ाइलों की रिपोर्ट करता है जब यह ऐप लोड करता है। यदि आप एक्लिप्स में लॉगकैट व्यू का उपयोग कर रहे हैं तो प्रासंगिक लाइन लाल टेक्स्ट में हैं और एक बार जब आप जानते हैं कि वे मौजूद हैं तो स्पॉट करना आसान है।

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