java.lang.VerifyError: रिलीज का उपयोग करते समय सत्यापनकर्ता ने लॉलीपॉप पर कक्षा को अस्वीकार कर दिया




android butterknife (6)

मेरा ऐप अधिकांश प्लेटफ़ॉर्म पर काम कर रहा था, लेकिन तुरंत एंड्रॉइड 5.1 पर दुर्घटनाग्रस्त हो गया। मैंने नए D8 डेक्स कंपाइलर पर संदेह करना शुरू कर दिया कि Google की जानकारी कितनी शानदार है। D8 को अक्षम करना, इसलिए यह मूल DX कंपाइलर का उपयोग करता है, केवल एक चीज है जो मेरे लिए काम करती है। प्रोजेक्ट क्लीन / अमान्य कैश ने इसे ठीक नहीं किया। मेरे पास कुछ सिंक्रनाइज़ किए गए ब्लॉक थे, लेकिन उन्हें हटाने से यह ठीक नहीं हुआ। तत्काल चलाने को बंद करने से यह ठीक नहीं हुआ। रक्षक को अक्षम करने से यह ठीक नहीं हुआ।

यहां बताया गया है कि आप D8 को कैसे अक्षम करते हैं:
-अपनी परियोजना की जड़ में gradle.properties नामक एक फ़ाइल बनाएँ, अगर यह मौजूद नहीं है
-इसने यह लाइन लगाई: android.enableD8 = false

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

मुझे यह त्रुटि तब मिलती है जब मैं अपनी रिलीज़ एपीके को 5.x डिवाइस पर स्थापित करता हूं। त्रुटि तब नहीं होती है जब मैं एंड्रॉइड स्टूडियो से समान कोड को धक्का देता हूं, या अगर मैं इसे 4.x डिवाइस पर चलाता हूं।

java.lang.VerifyError: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) (declaration of 'com.myapp.android.ui.activity.MainActivity$$ViewInjector' appears in /data/app/com.myapp.android-2/base.apk)
       at java.lang.Class.classForName(Class.java)
       at java.lang.Class.forName(Class.java:308)
       at java.lang.Class.forName(Class.java:272)
       at butterknife.ButterKnife.findInjectorForClass(ButterKnife.java:298)
       at butterknife.ButterKnife.inject(ButterKnife.java:271)
       at butterknife.ButterKnife.inject(ButterKnife.java:184)
       at com.myapp.android.ui.activity.MyDrawerActivity.onCreate(MyDrawerActivity.java:31)

मैं कक्षा में अपने टूलबार और एक कस्टम नेविगेशनड्रॉलर को इंजेक्ट करता हूं।

@InjectView(R.id.toolbar) Toolbar mToolbar;
@InjectView(R.id.nav_drawer) MyNavigationDrawer mNavigationDrawer;

पंक्ति 31:

ButterKnife.inject(this);

क्या कुछ ऐसा है जो बटरक्वाइफ कोडेन के साथ अलग होगा जब ग्रेडेल असेंबलीज का उपयोग gradle assembleRelease ? मैं ProGuard का उपयोग बिल्कुल नहीं कर रहा हूं।

यहाँ मेरी अन्य Android बिल्ड सेटिंग्स हैं:

# Android SDK settings
ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=21
ANDROID_BUILD_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION=21.1.2

logcat

I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object)
I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object) failed to verify: register v4 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivitya.lang.Object): [0x0]
I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) failed to verify: register v1 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivity
E/art     (21354): Verification failed on class com.myapp.android.ui.activity.MainActivity$$ViewInjector in /data/app/com.myapp.android-1/base.apk because: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)

मेरे पास GoogleTagManager द्वारा फेंका गया एक ही मुद्दा था।

java.lang.VerifyError: सत्यापनकर्ता ने वर्ग com.google.android.gms.tagmanager.TagManager को अस्वीकार कर दिया: com.google.android.gms.common.api.PendingResult com.google .groid.gms.tagmanager.TagManager.loadContainerDefaultOnly (java) lang.String, int) सत्यापित करने में विफल रहा: com.google.android.gms.common.api.PendingResult com.google.android.gms.tagmanager.TagManager.loadContainerDefaultly (java.lang.String, int): [0x11] वापस लौटना 'संदर्भ: com.google.android.gms.tagmanager.zzp', लेकिन घोषणा से अपेक्षित 'संदर्भ: com.google.android.gms.common.api.PendingResult'

यह मर्ज के बाद हुआ। मेरे सहयोगी ने पुस्तकालय को 10.0.1 से 10.2.1 तक अद्यतन किया। साफ निर्माण काम नहीं किया।

समय की कमी के कारण, मैंने पुराने संस्करण में रोलबैक किया, और यह काम किया।



मेरे मामले में, त्रुटि संदेश ने कहा कि विधि 'खराब' थी, कुछ अज्ञात दोष थे। कोटलिन लैंबडा से एक नियमित लूप में बदलने से मेरी समस्या हल हो गई।

पहले (त्रुटि के साथ):

fun validZipCode(zipcode: String): Boolean {
    val validRegexes = arrayOf(
            "0[0-9]{1}[0-9]{2}", 
            "1[0-2]{1}[0-9]{2}", 
            "1[3-4]{1}[0-9]{2}", 
            "19[0-9]{2}", 
            "2[0-1]{1}[0-9]{2}" 
    )
return validRegexes.any { zipcode.matches(it.toRegex()) }

बाद:

fun validZipCode(zipcode: String): Boolean {

    val validRegexes = arrayOf(
            "0[0-9]{1}[0-9]{2}", 
            "1[0-2]{1}[0-9]{2}", 
            "1[3-4]{1}[0-9]{2}",
            "19[0-9]{2}", 
            "2[0-1]{1}[0-9]{2}"
    )

    for (regex in validRegexes) {
        if (zipcode.matches(regex.toRegex())) {
            return true
        }
    }

    return false
}

सरल (3) चरणों ने मेरे लिए काम किया:

1 - एंड्रॉइड स्टूडियो के शीर्ष मेनू से बिल्ड -> स्वच्छ परियोजना

2 - एंड्रॉइड स्टूडियो के शीर्ष मेनू से बिल्ड -> प्रोजेक्ट बनाते हैं

3 - एंड्रॉइड स्टूडियो के शीर्ष मेनू से बिल्ड -> पुनर्निर्माण परियोजना

सभी सेट अप ..


हो सकता है कि यह कुछ ऐसे लोगों की मदद कर सकता है जो डिबग बिल्ड में इस मुद्दे का सामना कर रहे हैं।

मैं भी उसी त्रुटि का सामना कर रहा था। मैं Google API कंसोल प्रोजेक्ट को कॉन्फ़िगर करने से चूक गया। तो इसके बाद Google API कंसोल प्रोजेक्ट को कॉन्फ़िगर this और संकेत दिए जाने पर अपने ऐप के पैकेज का नाम निर्दिष्ट करें। आपको अपने हस्ताक्षर प्रमाण पत्र का SHA-1 हैश प्रदान करना होगा। जानकारी के लिए अपने ग्राहक का प्रमाणीकरण देखें।





butterknife