2013-01-31 32 views
6

मेरे एंड्रॉइड प्रोजेक्ट में मैंने libs फ़ोल्डर में लाइब्रेरी जार जोड़ा।
यह जार तीन अलग-अलग पैकेज में शामिल हैं:क्लास नॉटफाउंड अपवाद जब लाइब्रेरी जार

  1. गूगल GSON (com.google.gson)
  2. jboss netty (org.jboss.netty)
  3. एक क्लाइंट अनुप्रयोग मैं अपने आप को विकसित जो इन दो अन्य का उपयोग करता है libs। (com.example.core)

जार को एंटी का उपयोग करके संकलित/संग्रहीत किया जाता है।

ग्रहण में कोई त्रुटियां नहीं हैं, लेकिन मैं इस मिल जब मैं एक डिवाइस पर अपना Android एप्लिकेशन चलाने का प्रयास:

E/AndroidRuntime(23807): FATAL EXCEPTION: main 
E/AndroidRuntime(23807): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.project/com.example.project.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.project.MainActivity" on path: /data/app/com.example.project-1.apk 
E/AndroidRuntime(23807): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106) 
E/AndroidRuntime(23807): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
E/AndroidRuntime(23807): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
E/AndroidRuntime(23807): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
E/AndroidRuntime(23807): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(23807): at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(23807): at android.app.ActivityThread.main(ActivityThread.java:5039) 
E/AndroidRuntime(23807): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(23807): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(23807): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
E/AndroidRuntime(23807): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
E/AndroidRuntime(23807): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(23807): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.project.MainActivity" on path: /data/app/com.example.project-1.apk 
E/AndroidRuntime(23807): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65) 
E/AndroidRuntime(23807): at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
E/AndroidRuntime(23807): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
E/AndroidRuntime(23807): at android.app.Instrumentation.newActivity(Instrumentation.java:1054) 
E/AndroidRuntime(23807): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
E/AndroidRuntime(23807): ... 11 more 

और यह निश्चित रूप से मेरे जार जाता है कि इस के कारण है, अगर मैं करने के लिए संदर्भ निकाल के बाद से यह मेनएक्टिविटी के भीतर से कक्षाएं है तो समस्या हल हो जाती है और ऐप डिवाइस पर चलता है।

apktool का उपयोग करके मैंने यह देखने के लिए जांच की कि एपीके में क्या चल रहा है, और मैंने पाया कि सब कुछ smali निर्देशिका में जोड़ा जा रहा है, यह मेरे पैकेज (com.example.core) को छोड़कर सब कुछ है।
तो सभी एंड्रॉइड ऐप क्लासेस (com.example.project), मेरे जार से gson (com.google.gson) और netty (org.jboss.netty) हैं लेकिन com.example.core नहीं हैं।

मेरे पर्यावरण:
ग्रहण 4.2.1
एडीटी 21.0.1
जावा 7 (ओरेकल)

डिवाइस मैं पर परीक्षण किया:
सैमसंग आकाशगंगा S2
एलजी नेक्सस 4

कोई विचार? धन्यवाद।

उत्तर

7

ठीक है, मैं अंत में खोज करने में कामयाब समस्या, मुझे थोड़ी देर लग गई।

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

<javac srcdir="." destdir="bin/classes" source="1.6" target="1.6"> 
    ... 
</java> 

या आप ग्रहण में इन चरणों का उपयोग कर सकते हैं:

Eclipse menu: Window/Preferences/Java/Compiler 
Compiler Compliance level: 1.6 
tick "use default" 

उम्मीद है कि इस वाले अन्य लोगों को इस समस्या का सामना कर रहे कुछ समय की बचत होगी।

3

(जावा का निर्माण पथ/आदेश और निर्यात) शीर्ष पर अपने lib ले जाएँ और जाँच क्योंकि आपके जार फ़ाइल कार्यावधि में उपलब्ध नहीं है

+0

मैं आदेश और निर्यात टैब में जार, केवल src और जनरल फ़ोल्डरों की जरूरत नहीं है और एंड्रॉइड निर्भरता और एंड्रॉइड 4.2। –

+0

(जावा बिल्ड पथ/पुस्तकालय) एड जार पर क्लिक करें और आपको जीएसएस जार फ़ाइल को libs फ़ोल्डर – Anand

+0

से जोड़ें जो मैंने पढ़ा है, एडीटी के नए संस्करणों में आपको ऐसा करने की आवश्यकता नहीं है, वास्तव में आपको नहीं करना चाहिए उस। यह आवश्यक पुस्तकालयों को परियोजना की 'libs' निर्देशिका में जोड़ने के लिए पर्याप्त होना चाहिए। –

10

में आप एक NoClassDefFoundError हो रही है।

ताकि इसे रनटाइम पर उपलब्ध होने के लिए आप इस तरह अपने जावा का निर्माण पथ में अपने जार फ़ाइल पर चेक बॉक्स की जाँच करना होगा में:

enter image description here

+0

मेरे पास 'ऑर्डर एंड एक्सपोर्ट' टैब में जार नहीं है, केवल स्रोत और जेन फ़ोल्डर्स और एंड्रॉइड निर्भरता और एंड्रॉइड 4.2 है। लेकिन जैसा कि मैंने अपने प्रश्न में लिखा था, मेरे जार की कुछ सामग्री एपीके में जोड़ दी जा रही है, लेकिन यह सब नहीं। तो यह सच नहीं है कि मेरा जार रनटाइम पर उपलब्ध नहीं है। –

1

इंटेलीजे के लिए इस स्थापना अंत में किए गए त्रुटि मेरे लिए दूर जाना:

enter image description here

enter image description here