Android java.lang.VerifyError?


100

अपने Android ऐप में, मुझे हमेशा VerifyErrors मिलता है! और मैं यह क्यों नहीं समझ सकता। जब भी मैं एक बाहरी JAR को शामिल करता हूं, मुझे हमेशा अपने एप्लिकेशन को लॉन्च करने की कोशिश करने पर VerifyErrors मिलता है (एक बार छोड़कर, जब मैंने Apache Log4j शामिल किया था।)

मैं आमतौर पर पुस्तकालय के स्रोत को ले जाकर और इसे अपने प्रोजेक्ट में जोड़कर इसे प्राप्त करता हूं, लेकिन मैं GData क्लाइंट लाइब्रेरी को डालने की कोशिश कर रहा हूं ।

मैं इसे स्रोत में प्राप्त कर सकता हूं, लेकिन यह निर्भरता है (mail.jar, सक्रियण.जर, सर्वलेट-एपी.जर) मैं नहीं कर सकता, इसलिए मुझे सत्यापित त्रुटियां मिलती हैं। मैं एक बार और सभी के लिए इस समस्या की जड़ में जाना चाहूंगा। मैंने इंटरनेट पर देखा, लेकिन वे सभी अपूर्ण वर्ग फ़ाइलों के बारे में बात करते हैं? जिसका मुझे पता नहीं है।


GData Android में काम नहीं करने के लिए जाना जाता है। Android- डेवलपर्स Google समूह में विषय के लिए खोजें। हमें भविष्य में एसडीके रिलीज़ में, एंड्रॉइड के लिए आधिकारिक GData की प्रतीक्षा करने की आवश्यकता है।
मपराज

1
क्या आप अपनी परियोजना बनाने के लिए ग्रैडल का उपयोग कर रहे हैं? मुझे यह समस्या तब हुई जब मैं इकट्ठा होने से पहले साफ काम चलाना भूल गया था। कृपया कार्य करें ...
इगोरगानपोलस्की

जवाबों:


35

एंड्रॉइड एक अलग वर्ग फ़ाइल प्रारूप का उपयोग करता है। क्या आप एंड्रॉइड एसडीके के साथ "डीएक्स" टूल के माध्यम से तीसरी पार्टी की जार फाइलें चला रहे हैं?


4
"Dx" टूल पर कुछ और जानकारी के साथ awsome होगा।
डेनियल मैग्नसन

2
एसडीके संस्करणों की सूची के नीचे, एंड्रॉइड प्रोजेक्ट वरीयताओं के "लाइब्रेरी" अनुभाग में देखें। क्या आपकी बाहरी परियोजनाएँ आपके बिल्ड शो पर निर्भर हैं, उनके बगल में एक हरे रंग की टिक के साथ?
एडम

@ उस टिप्पणी के लिए धन्यवाद! आपने अभी एक समस्या हल की है जिस तरह से मैंने बहुत अधिक समय बिताया है ताकि यह पता लगाने की कोशिश करूं
साइमन फोर्सबर्ग

118

LogCat को देखें और देखें कि सत्यापनकर्ता क्या कारण है। यह शायद java.lang वर्ग में कुछ विधि है जो आपके द्वारा उपयोग किए जा रहे Android SDK स्तर पर समर्थित नहीं है (उदाहरण के लिए, String.isEmpty ())।


4
इसे वास्तविक उत्तर के रूप में चिह्नित किया जाना चाहिए। कम से कम यह मेरे मामले में वास्तव में क्या था क्योंकि मुझे अपने उपयोगकर्ताओं से छिटपुट त्रुटियां हो रही थीं और मैंने इसे नीचे ट्रैक करके View.getTag (int) कॉल पर समर्थन किया जो API के 3 में समर्थित नहीं है
बोस्टोन

1
माना। मैंने इसे कुछ बार सामना किया है और हर बार यह है कि मैं 2.x को लक्षित कर रहा हूं और कुछ का उपयोग कर रहा हूं जो 1.5 में नहीं है। जब आप क्लास के लिए पहली बार बनाया / उपयोग किया जाता है, तो आपको जो फेंकता है, उसे फेंक दिया जाता है, इसलिए यदि यह ऐसा कुछ है जो छिटपुट रूप से होता है तो आप इसे कुछ समय के लिए नोटिस नहीं कर सकते हैं।
mbafford

1
यदि यह मामला है, तो आपको इन लिंक की जांच करनी चाहिए: developer.android.com/resources/articles/… और doandroids.com/blogs/2010/5/8/backwards-compatibility
MyName

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

WARN स्तर पर logcat आपको यह सत्यापित करने में विफल रहा है कि विवरण क्यों दिखाना चाहिए
mmeyer

56

से android-डेवलपर्स :

"Adb logcat" से आउटपुट उस वर्ग को इंगित करता है जो खराब संदर्भ वाले वर्ग के साथ-साथ नहीं पाया जा सकता है। स्थान की पहचान विशिष्ट Dalvik निर्देश के लिए की जाती है। चाल अपवाद के ऊपर लॉग में देखने के लिए है।


6
अपवाद से ऊपर देखने से मुझे उस पद्धति की पहचान करने में मदद मिली, जो त्रुटि पैदा कर रही थी। मेरे लिए, यह एक्सप्रेशन बिल्ड था। VERSION.SDK_INT> = Build.VERSION_CODES.ECLAIR जो थोड़े स्पष्ट है, अंत में, यदि आप कपकेक पर कोशिश करते हैं ...
मैनुअल

2
धन्यवाद! यह वह समस्या थी जो मुझे मिल रही थी ... उपयोगी लॉग अपवाद के ठीक ऊपर थे: WARN/dalvikvm(1052): VFY: unable to resolve static method 475: Ljavax/xml/datatype/DatatypeFactory;.newInstance ()Ljavax/xml/datatype/DatatypeFactory;(अब यह पता लगाने के लिए कि बिना
डाटाइप्टीफैक्टरी के

त्रुटि के ऊपर देखने से मुझे भी मदद मिली। एक संदेश देखें जो "VFY:" से शुरू होता है। मेरे मामले में, इसने कहा कि "बड़े तरीके से मनमाने ढंग से अस्वीकार"। शायद क्योंकि यह सरणियों की एक बड़ी संख्या बनाता है :) वैसे भी, टिप के लिए धन्यवाद!
Amplify91

धन्यवाद! मैंने पाया कि मेरी समस्या अपवाद हैंडलर पर थी: NetworkOnMainThreadException Android 2.3 में लागू नहीं है। मेरे जवाब के लिए नीचे देखें। एक बार फिर धन्यवाद! :)
सेराफिम का

धन्यवाद! मेरे मामले में, मैं Android2.3 को लक्षित कर रहा था और मैं android-support-v4.jar का उपयोग कर रहा था, और यह इस जार में कक्षाएं नहीं ढूंढ रहा था। मुझे इस वर्ग के गुणों में "निर्यात" टैब पर क्लिक करना था और इसे android2.3.3 लाइब्रेरी के ऊपर लाना था। खैर, यह निर्यात वास्तव में कुछ ऐसा है जिसे मैं स्पष्ट रूप से नहीं समझता ...
xtof54

14

इसे काम करने के लिए आपको पुस्तकालय के जार को स्रोत फ़ोल्डर में से एक में जोड़ने की आवश्यकता है (भले ही आप इसे पहले से ही ग्रहण पुस्तकालय के रूप में जोड़ चुके हैं, फिर भी आपको इसे स्रोत के रूप में जोड़ना होगा)।

  1. अपनी परियोजना में एक निर्देशिका बनाएं (उदाहरण के लिए "लिबास") और वहां लाइब्रेरी जार डालें।
  2. निर्देशिका को बिल्ड क्लास पथ से जोड़ें (फ़ोल्डर पर राइट बटन पर क्लिक करें और "बिल्ड पथ" -> "स्रोत फ़ोल्डर के रूप में उपयोग करें" का चयन करें)।
  3. अपने प्रोजेक्ट का पुनर्निर्माण करें।

क्या हम JAR के बजाय "libs 'फ़ोल्डर में" प्रोजेक्ट लाइब्रेरी "जोड़ सकते हैं?
अहमद

अजीब ... मुझे इसे एक सामान्य जावा पुस्तकालय के रूप में जोड़ना था - ग्रहण में "एंड्रॉइड" मेनू के तहत पुस्तकालय के रूप में नहीं।
फिल

धन्यवाद Maksim, अच्छा समाधान।
अरुण बडोले

8

यह अभी मेरे साथ हुआ। त्रुटि इसलिए हुई क्योंकि मैं अपने डिवाइस में एक नए एसडीके से विधियों का उपयोग कर रहा था।

Android 1.5 डिवाइस ने इसका उपयोग करके एक एपीके स्थापित किया:

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>

8

मुझे एक दिलचस्प मामला मिला। मैं उपयोग करता हूं:

<uses-sdk
   android:minSdkVersion="9"
   android:targetSdkVersion="18" />

तो एंड्रॉइड 2.3 की तरह कुछ नई एंड्रॉइड 4 क्षमताओं को प्रत्यारोपित नहीं किया गया है ImageView.setLayerType। केवल रनटाइम त्रुटि से बचने के लिए:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
   setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

इस दृष्टिकोण का उपयोग अपवादों को संभालने के साथ भी किया जाना चाहिए:

} catch (NetworkOnMainThreadException nomte) {
   // log this exception
} catch (SocketTimeoutException socketTimeoutException) {
   // log this exception
}

NetworkOnMainThreadExceptionएंड्रॉइड 2.3 में लागू नहीं किया जाता है, इसलिए जब क्लास लोड होता है (और इससे पहले नहीं!) अपवाद java.lang.VerifyErrorहोता है।


1
मेरे साथ भी ऐसा ही हुआ। मैंने java.lang.ReflectiveOperationExceptionपुराने एंड्रॉइड वर्जन (उदाहरण के लिए 4.2) में शामिल नहीं किया था, लेकिन लिंट ने मुझे इस बारे में चेतावनी नहीं दी ...
WonderCsabo

मेरे लिए समस्या यह है कि मेरा कोड एक घोषित है CameraAccessException, जो एंड्रॉइड 5.0 पर पेश किया जाता है, लेकिन जब मैं एंड्रॉइड 4.3 डिवाइस में चलता हूं, तो वेरिफाईयर को फेंक दिया जाता है।
प्यासी

7

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


7

यह संस्करण के नीचे लॉलीपॉप पर संदर्भित सीमा त्रुटि के कारण भी हो सकता है, जहां यह अधिकतम 65K आकार तक सीमित है

उपरोक्त मुद्दे के लिए संभव समाधान

चरण 1: Add android-support-multidex.jar to your project. The jar can be found in your Android SDK folder /sdk/extras/android/support/multidex/library/libs

Step2: उदाहरण के लिए, मल्टीडेक्सएप्लिकेशन के साथ अपने आवेदन का विस्तार करें

public class MyApplication extends MultiDexApplication

Step3: OverBaseContext को अटैच करें

protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}

Step4: अगला कदम निम्न है कि आप अपने ऐप्स के एंड्रॉइड भाग में बिल्ड .ग्रेड को जोड़ें

 dexOptions {
      preDexLibraries = false
   }

Step5: अंत में, आपके ऐप्स के सामान्य भाग के बाद build.gradle

afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}

जानकारी के लिए, कृपया जाँच करें

https://developer.android.com/tools/building/multidex.html


मेरे लिए काम किया !! एप्लिकेशन क्लास को "MultiDexApplication" में बदलना न भूलें।
गणेश

आपने मुझे बड़े समय के आदमी को बचाया। यह स्वीकृत उत्तर होना चाहिए।
रोहित रोकड़े

3

मेरे मामले में, यह तब हुआ जब मैंने ग्रहण इंडिगो से ग्रहण जूनो तक अपडेट किया: मुझे यकीन नहीं है कि सही कारण क्या है, लेकिन, मेरा एंड्रॉइड प्रोजेक्ट जो मैं लंबे समय से काम कर रहा हूं, उस अपवाद के कारण काम बंद कर दिया है।

इसे ठीक करने के कई घंटों के बाद , मुझे इसका समाधान मिला।

अपने एंड्रॉइड प्रोजेक्ट में, मैं अन्य प्रोजेक्ट ("MyUtils") का उपयोग करता हूं, जो एक ही कार्यक्षेत्र में है। तो, मुझे निम्नलिखित करने की आवश्यकता है:

Android प्रोजेक्ट पर राइट क्लिक करें -> बिल्ड पथ -> बिल्ड पथ कॉन्फ़िगर करें

अब, "ऑर्डर और एक्सपोर्ट" टैब पर जाएं और "MyUtils" को चेक करें। यही है: मुझे इस कष्टप्रद अपवाद से छुटकारा मिला।


यही मेरे लिए तय है ... हमारे पास एक बड़ी परियोजना है इसलिए मैं चारों ओर चला गया और हर चीज पर "निर्यात" ध्वज की जांच की। PITA मुद्दा।
कोई व्यक्ति

3

मैं 2.0.0-अल्फा 2 से 1.5.0 तक डाउनग्रेड संस्करण को डाउनग्रेड करता हूं जिसने इस समस्या को हल किया।


2

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


2

मेरी भी यही समस्या थी। मैं 2.1 आर 1 के साथ निर्माण कर रहा था और नए विज्ञापन 17 के साथ 2.1 आर 3 के लिए अद्यतन किया गया था। मैंने जेवेल के मेल.जर पर त्रुटियों को सत्यापित किया था और यह मुझे पागल कर रहा था। यहाँ है कैसे मैं इस मुद्दे को हल:

  1. एक libs / फ़ोल्डर बनाया और जार जोड़ा।
  2. राइट क्लिक> स्रोत फ़ोल्डर के रूप में जोड़ें

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


2

में Eclipse 4.x, अगर आप इस समस्या का सामना, नीचे का प्रयास करें:

  1. माइग्रेट सभी ने 3-पार्टी जार को यूजर-लिबरे में शामिल किया
  2. एंड्रॉइड लीब से पहले उपयोगकर्ता के काम को आगे बढ़ाएं और इसे ऑर्डर और निर्यात टैब में जांचें
  3. स्वच्छ और चलाने के लिए पुनर्निर्माण

2

एसडीके अपडेट के बाद मेरे पास यह मुद्दा है। कंपाइलर को मेरी बाहरी लाइब्रेरी से समस्या थी। मैंने ऐसा किया: प्रोजेक्ट पर राइट क्लिक करें, फिर "android Tools> add suport Library ..." यह मेरी प्रोजेक्ट लाइब्रेरी "android-support-v4.jar" पर इंस्टॉल करें।


2

java.lang.VerifyErrorइसका मतलब है कि आपका संकलित बायटेकोड कुछ इस बात का जिक्र कर रहा है कि एंड्रॉइड रनटाइम पर नहीं मिल सकता है। यह सत्यापित करता है कि मुझे केवल किटकैट 4.4 और उससे कम संस्करण के संस्करण के साथ जारी नहीं किया गया है, यहां तक ​​कि मैंने दोनों डिवाइसेस में एक ही बिल्ड को चलाया है। जब मैंने पुराने संस्करण के जैकसन जसन पार्सर का उपयोग किया तो यह दिखाता हैjava.lang.VerifyError

compile 'com.fasterxml.jackson.core:jackson-databind:2.2.+'
compile 'com.fasterxml.jackson.core:jackson-core:2.2.+'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.2.+'

फिर मैंने कोर लाइब्रेरी के बिना नवीनतम संस्करण 2.2 से 2.7 तक डिपेंडेंसी को बदल दिया है (जब मैं कोर 2.7 शामिल करता हूं यह वेरिफायर देता है), तो यह काम करता है। जिसका अर्थ है कि मेथड्स और कोर की अन्य सामग्री , Databind2.7 के नवीनतम संस्करण में माइग्रेट हो गई है । यह मेरे मुद्दों को ठीक करें।

compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0-rc3'
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.0-rc3'

1

मैं VerfiyError के रूप में अच्छी तरह से ... एक असली कारण नहीं मिल सकता है। यह कोड की नई लाइनों को एक विधि में लपेटने में मदद करता है (ग्रहण, 'एक्स्ट्रेक्ट मेथड ...')। तो मेरे मामले में कारण एक असमर्थित विधि नहीं है।


1

मुझे भी ऐसी ही समस्या थी। जब मैंने Android SDK 22.3 में अपडेट किया तो मैंने Apache POI जार और समस्या जोड़ दी थी।

मेरे पास Android निजी पुस्तकालय थे, इसलिए यह Android SDK के साथ आम समस्या नहीं थी। मैंने सभी अपाचे POI जार को अनचेक किया और एक-एक करके जोड़ा। मैंने पाया कि poi-3.9-20121203.jar से पहले किया जाना चाहिए poi-OOXML- 3.9-20121203.jar । अन्यथा यह काम नहीं करेगा।


1

यदि आपके पास परीक्षण हैं, तो अपनी build.gradeफ़ाइल से इस पंक्ति को टिप्पणी करने का प्रयास करें :

testCoverageEnabled = true

मेरे लिए इसके कारण जावा 1.7 फीचर, विशेष रूप से स्ट्रिंग स्विच स्टेटमेंट्स का उपयोग करने वाली कक्षाओं पर वेरिफ़ायर अपवाद थे।


1

मुझे गिट पुल बनाने के बाद भी यही समस्या थी।

समाधान: बिल्ड -> स्वच्छ परियोजना।

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


1
वास्तव में कुछ भी खींच या नहीं किया, लेकिन एक साफ किया, धन्यवाद!
अलेक्जेंड्रे जी

1

मुझे एक और मामला मिला है।

शर्तेँ:

  • Retrolambda का उपयोग करें (यदि यह आवश्यक है तो सुनिश्चित नहीं है);
  • एक इंटरफ़ेस में एक स्थिर विधि बनाएं।

और नतीजा बूम है! java.lang.VerifyError उस इंटरफ़ेस का उपयोग करने वाले वर्ग तक पहुँचने का प्रयास करते समय। एंड्रॉइड जैसा दिखता है (4.4 मेरे मामले में।) इंटरफेस में स्थिर तरीके पसंद नहीं करता है। इंटरफ़ेस से स्थिर विधि को हटाने से VerifyError चली जाती है।


0

मुझे भी यह समस्या थी, क्योंकि एक यूजर लाइब्रेरी में मेरे जार थे ...

जिस तरह से मैंने इसे हल किया, वह उन्हें लिबर फोल्डर में जोड़ने और फिर उन्हें ग्रहण में बिल्ड प्रॉपर्टीज में जोड़ने का था ...

पहली बार जब मैंने ऐसा किया तो यह काम नहीं किया, लेकिन फिर मैंने उन्हें हटा दिया और उन्हें फिर से पढ़ा और यह काम करना शुरू कर दिया ...

एक अजीब सा! लेकिन अब हर समय काम कर रहा है।

शुभ लाभ


0

मैंने एंड्रॉइड एपीआई विधियों / वर्ग को कोड किया है जो एसडीके 2.1 में हैं, और इसे एंड्रॉइड 1.6 एमुलेटर पर चलाने की कोशिश कर रहा था। तो मुझे वह त्रुटि मिली।

समाधान: इसे एमुलेटर संस्करण को सही करने के लिए बदल दिया।

इस काम मेरे लिए .. धन्यवाद।


0

पोस्टरिटी के लिए, मुझे सिर्फ यह त्रुटि मिली क्योंकि मैं उपयोग कर रहा था Arrays.copyOf()जो कि जावा 1.5 द्वारा समर्थित एक विधि नहीं है जो एंड्रॉइड लेवल 4 से मेल खाती है। क्योंकि मैं 1.6 के तहत विकसित पुस्तकालयों सहित चल रहा था, उन्होंने ठीक संकलित किया। मैंने केवल उन समस्याओं को देखा जब मैंने अपने एंड्रॉइड प्रोजेक्ट पर प्रश्न में कक्षा को स्थानांतरित किया था - फिर त्रुटि को उजागर किया गया था।

Uncaught handler: thread main exiting due to uncaught exception
java.lang.VerifyError: com.j256.ormlite.dao.BaseDaoImpl$DaoConfigArray
  at com.j256.ormlite.dao.BaseDaoImpl$1.initialValue(BaseDaoImpl.java:71)
  at com.j256.ormlite.dao.BaseDaoImpl$1.initialValue(BaseDaoImpl.java:1)
  at java.lang.ThreadLocal$Values.getAfterMiss(ThreadLocal.java:429)
  at java.lang.ThreadLocal.get(ThreadLocal.java:66)

उस लाइन पर मैं एक करने की कोशिश कर रहा था new DaoConfigArrayऔर उस कक्षा में निम्नलिखित लाइन थी:

// copyOf is only supported in Java >= 1.6
doArray = Arrays.copyOf(daoArray, newLength);

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

private static final ThreadLocal<DaoConfigArray> daoConfigLevelLocal
    = new ThreadLocal<DaoConfigArray>() {
    @Override
    protected DaoConfigArray initialValue() {
        return new DaoConfigArray();
    }
};

0

मुझे आश्रित परियोजनाओं को हटाना पड़ा और इसके बजाय आश्रित परियोजनाओं को संकलित करना जार का है और उन्हें लिबास फ़ोल्डर में शामिल करना है।


0

मुझे यकीन है कि मेरा कारण आपसे अलग था, लेकिन चूंकि यह "Android java.lang.VerifyError" की खोज करते समय शीर्ष हिट्स में से एक है, मैंने सोचा कि मैं इसे पोस्टरिटी के लिए रिकॉर्ड करूंगा।

मेरी कुछ पंक्तियाँ थीं:

public class A { ... }
public class B extends A { ... }
public class C extends A { ... }

और एक तरीका जो किया:

A[] result = null;
if (something)
    result = new B[cursor.getCount()];
else
    result = new C[cursor.getCount()];

// Fill result
...

जब तक यह कोड फ़ाइल में मौजूद था, तब तक मुझे पहली बार एक VerifyError मिलेगी जिसमें इस पद्धति से युक्त क्लास लोड की गई थी। इसे दो अलग-अलग तरीकों में विभाजित करना (एक जो केवल बी के साथ निपटा है, और एक जो केवल सी के साथ निपटा है) ने समस्या को ठीक किया।


1
और, वैसे, जिस तरह से मैंने रूट किया था, वह विधि निकायों (रिटर्न नल / 0 / गलत के साथ प्रतिस्थापित) पर टिप्पणी कर रहा था जब तक कि वेरिफ़ायरर दूर नहीं गया, तब तक सामान को बहाल करना जब तक वह फिर से वापस नहीं आया; तो समस्या विधि के भीतर ही कर रहे हैं। डिबग करने का एक मजेदार तरीका नहीं, निश्चित रूप से, लेकिन यह काम किया।
बेंक

0

मेरे मामले में, यह त्रुटि तब होती है क्योंकि मेरी Google-play-service नवीनतम नहीं है

यदि आपकी परियोजना .jar में कुछ वर्ग का समर्थन नहीं करती है, तो यह त्रुटि होती है (उदा। ImageView.setLayerType, AdvertisingIdClient, आदि)।


0

मैं तो बस न केवल libs नहीं की वजह से एक और स्थिति की पहचान यह है कि यह तब होता है dx 'एड। मेरे पास बहुत लंबे doInBackground mehtod के साथ एक AsyncTask है। किसी कारण से 145 से अधिक लाइनों वाली यह विधि टूटने लगी। यह 2.3 ऐप पर हुआ। जब मैंने बस कुछ हिस्सों को तरीकों में शामिल किया, तो यह ठीक काम किया।

तो उन लोगों के लिए जो उस क्लास को नहीं खोज पाए जो सही ढंग से डीएक्स एड नहीं था , अपने तरीके की लंबाई कम करने की कोशिश करें।


0

मेरे लिए, यह मुद्दा वास्तव में समाप्त हो रहा था कि मैं उस वर्ग में कहीं-कहीं मल्टी-कैच क्लॉज का उपयोग कर रहा था जो जावा 7 फीचर (और एपीआई 19+) है। इसलिए यह VerifyErrorसभी पूर्व -19 उपकरणों के साथ दुर्घटनाग्रस्त हो जाएगा ।


0

मेरे लिए यह compileSdkVersion और buildToolsVersion के बीच सहसंबंध में था। मैं था:

compileSdkVersion 21
buildToolsVersion '19.1.0'

मैंने इसे बदल दिया:

compileSdkVersion 21
buildToolsVersion '21.1.2'

0

मेरे लिए, यह compileSdkVersion की समस्या है। जब मैंने एक विशिष्ट एंड्रॉइड एप्लिकेशन में एपीआई स्तर 21 का उपयोग किया ( https://github.com/android10/Android-AOPExample ):

compileSdkVersion 21

java.lang.verifyerror हुआ। इसलिए मैंने compileSdkVersion को 19 में बदल दिया

compileSdkVersion 19

इसने अच्छा काम किया। मुझे लगता है कि यह एसडीके बिल्डटूल की समस्या हो सकती है, और एपीआई स्तर <21 पर यह ठीक लगता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.