2012-08-09 11 views
8

में संदर्भित कक्षा को खोजने में असमर्थ मेरे पास एक साधारण एंड्रॉइड एप्लिकेशन है जो इसके निर्माण पथ पर एक मॉडबस लाइब्रेरी ("जामोड") का उपयोग करता है। जब मैं इसे चलाता हूं तो यह तुरंत दुर्घटनाग्रस्त हो जाता है। मेरे पास मूल रूप से इस प्रश्न में एक ही समस्या है: Getting "Caused by: java.lang.VerifyError:"वीएफवाई: हस्ताक्षर

लेकिन मैं वास्तव में समस्या को ठीक नहीं कर सकता। मेरा आवेदन पहले ठीक काम कर रहा था, अब कोई फर्क नहीं पड़ता कि मैं क्या करता हूं यह काम नहीं कर रहा है।

नीचे लॉगक आउटपुट है। अग्रिम में धन्यवाद।

08-09 14:36:47.753: W/dalvikvm(396): VFY: unable to find class referenced in signature (Lnet/wimpi/modbus/net/TCPMasterConnection;) 
08-09 14:36:47.823: W/dalvikvm(396): VFY: unable to resolve exception class 510 (Lnet/wimpi/modbus/ModbusIOException;) 
08-09 14:36:47.823: W/dalvikvm(396): VFY: unable to find exception handler at addr 0x18 
08-09 14:36:47.854: W/dalvikvm(396): VFY: rejected Lcom/example/xmlparsertest/JavaModBusTcpDriver;.<init> (Ljava/lang/String;I)V 
08-09 14:36:47.854: W/dalvikvm(396): VFY: rejecting opcode 0x0d at 0x0018 
08-09 14:36:47.854: W/dalvikvm(396): VFY: rejected Lcom/example/xmlparsertest/JavaModBusTcpDriver;.<init> (Ljava/lang/String;I)V 
08-09 14:36:47.854: W/dalvikvm(396): Verifier rejected class Lcom/example/xmlparsertest/JavaModBusTcpDriver; 
08-09 14:36:47.854: D/AndroidRuntime(396): Shutting down VM 
08-09 14:36:47.854: W/dalvikvm(396): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
08-09 14:36:47.873: E/AndroidRuntime(396): FATAL EXCEPTION: main 
08-09 14:36:47.873: E/AndroidRuntime(396): java.lang.VerifyError: com.example.xmlparsertest.JavaModBusTcpDriver 
08-09 14:36:47.873: E/AndroidRuntime(396): at com.example.xmlparsertest.MainActivity.<init>(MainActivity.java:13) 
08-09 14:36:47.873: E/AndroidRuntime(396): at java.lang.Class.newInstanceImpl(Native Method) 
08-09 14:36:47.873: E/AndroidRuntime(396): at java.lang.Class.newInstance(Class.java:1429) 
08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 
08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-09 14:36:47.873: E/AndroidRuntime(396): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-09 14:36:47.873: E/AndroidRuntime(396): at android.os.Looper.loop(Looper.java:123) 
08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-09 14:36:47.873: E/AndroidRuntime(396): at java.lang.reflect.Method.invokeNative(Native Method) 
08-09 14:36:47.873: E/AndroidRuntime(396): at java.lang.reflect.Method.invoke(Method.java:521) 
08-09 14:36:47.873: E/AndroidRuntime(396): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-09 14:36:47.873: E/AndroidRuntime(396): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-09 14:36:47.873: E/AndroidRuntime(396): at dalvik.system.NativeStart.main(Native Method) 
+0

[यह समाधान] (http://stackoverflow.com/a/10677757/194894) मेरे लिए काम किया। – Flow

उत्तर

4

क्या आपने जैकोड जार फ़ाइल को ग्रहण में "libs" निर्देशिका में रखा था? यदि नहीं, तो यह आपके आवेदन में बंडल नहीं किया जाएगा भले ही यह संकलन के दौरान पथ पर हो। यह एक बिल्कुल नया बदलाव है।

1

मेरे पास एक समान वीएफवाई था, लिंक और क्लास डीफ़ में त्रुटियां नहीं मिलीं, भले ही मेरे सभी पुस्तकालय "एलआईबी" फ़ोल्डर में थे और उन्हें बिल्ड पथ में भी जोड़ा गया था और ईसीएलआईपीएसई उन्हें आसानी से संकलित समय में ढूंढ सकता था, लेकिन जब वे एक असली डिवाइस पर तैनात किए गए थे, इससे समस्याएं आईं। समाधान: सुनिश्चित करें कि आपकी लाइब्रेरी फ़ाइलों को "libs" फ़ोल्डर में रखा गया है और ECLIPSE प्रोजेक्ट में "lib" या "लाइब्रेरी" में नहीं है।

15

एक बार दोबारा जांच करने के लिए आप यह कर रहे हैं कि चेकबॉक्स विंडो में "ऑर्डर और निर्यात" टैब में जार फ़ाइलों के लिए चेकबॉक्स चुना गया है। इसमें निर्मित एपीके में लाइब्रेरी शामिल होगी।

+0

+1: इससे मुझे मदद मिली। मुझे इसे काम करने के लिए परियोजनाओं को भी साफ करना पड़ा। लेकिन प्रभावी ढंग से: आपके द्वारा वर्णित चेकबॉक्स को जादुई रूप से चेक नहीं किया गया था। –

+1

मुझे एक ही समस्या हो सकती है, "बिल्ड पथ विंडो" कहां है? – tccpg288

0

यह त्रुटि (java.lang.VerifyError) आता है जब वहाँ की तरह असंगत संसाधन हैं इंटरफेस/कक्षा/libs फ़ाइलें, अनुचित inheritances/के रूप में चर/तरीकों/तर्क/कक्षा/फ़ाइलें स्थिर/उदाहरण स्तर पहचानकर्ता के कैप्सूलीकरण।

यह समस्या कोड में ओओपी डिज़ाइन सिद्धांतों का उल्लंघन करके आ रही है। तो कोड जेवीएम की सत्यापन प्रक्रिया द्वारा खारिज कर दिया गया है और रनटाइम पर सत्यापन त्रुटि फेंकता है। यदि आप त्रुटि स्टैकट्रैस को बारीकी से देखते हैं, तो क्लास-ए का इंस्टेंस (com.example.xmlparsertest.MainActivity) जेवीएम स्टैक [java.lang.Class.newInstanceImpl (मूल विधि) ... java.lang.Class द्वारा बनाया जा रहा है। newInstance ...]। यह वर्ग डिज़ाइन सिद्धांतों के उल्लंघन के साथ अन्य वर्गों द्वारा संदर्भित या इनकार किया जा रहा है जो कक्षा को तत्काल प्राप्त करने में असफल रहा है।

08-09 14:36:47.854: W/dalvikvm(396): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
    08-09 14:36:47.873: E/AndroidRuntime(396): FATAL EXCEPTION: main 
    08-09 14:36:47.873: E/AndroidRuntime(396): java.lang.VerifyError: com.example.xmlparsertest.JavaModBusTcpDriver 
    08-09 14:36:47.873: E/AndroidRuntime(396): at com.example.xmlparsertest.MainActivity.<init>(MainActivity.java:13) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at java.lang.Class.newInstanceImpl(Native Method) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at java.lang.Class.newInstance(Class.java:1429) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at android.os.Handler.dispatchMessage(Handler.java:99) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at android.os.Looper.loop(Looper.java:123) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at android.app.ActivityThread.main(ActivityThread.java:4627) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at java.lang.reflect.Method.invokeNative(Native Method) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at java.lang.reflect.Method.invoke(Method.java:521) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
    08-09 14:36:47.873: E/AndroidRuntime(396): at dalvik.system.NativeStart.main(Native Method) 

इन चेतावनियों को अनदेखा नहीं किया जा सकता है क्योंकि ये चेतावनियां फैटल अपवाद पैदा कर रही हैं। Dalvikvm इंजीनियरों ने ओओपी सिद्धांतों को लागू किया है क्योंकि सूर्य अभियंता पूर्ण हो गए हैं। ऐसे कई ब्लॉग/मंच हैं जहां लोग इन चेतावनियों को अनदेखा करते हैं। तो इन चेतावनियों को अनदेखा न करें और विशेष रूप से चिकित्सा/बैंकिंग/सुरक्षा क्षेत्र के अनुप्रयोगों के लिए उन्हें सही करें या चेतावनी एप्लिकेशन को तोड़ने का कारण बन रही है।

कोड में अपने कार्यान्वित ओओपी डिजाइन सिद्धांतों (जैसे विरासत/encapsulation/polymorphism आदि) दोबारा जांचें। मुझे एक बड़े बहु-मॉड्यूल एंड्रॉइड एप्लिकेशन पर ऐसी त्रुटियों की जांच और उन्मूलन करने के लिए कहा जा रहा था और मुझे कई डिज़ाइन उल्लंघन मिले।

ऐसे मुद्दों को हल करने के लिए पहला ट्रिगर सार्वजनिक/गैर-अंतिम सब कुछ जो क्लाटल त्रुटि में हो रहा है से संबंधित है। एक बार हल करने के बाद, अपने डिजाइन सिद्धांतों को एक-एक करके लागू करें और आपको एक त्रुटि मुक्त एप्लिकेशन मिल जाएगा।

धन्यवाद, विनोद भंवर (एंड्रॉइड आर्किटेक्ट)।

संबंधित मुद्दे