AndroidX: Appcompat I: कला त्रुटि android.view.View $ OnUnhandledKeyEventListener


105

Androidx: appcompat: appcompat: 1.0.0-rc01 के साथ एक नई बनाई गई परियोजना में, मुझे मिल रहा है

java.lang.ClassNotFoundException: Didn't find class 
"android.view.View$OnUnhandledKeyEventListener" on path: DexPathList

मैंने कॉन्फ़िगरेशन भी जोड़ा था

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == "androidx.appcompat") {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion "1.+"
            }
        }
    }
}

यह एक ऐप कार्यक्षमता या क्रैश को प्रभावित नहीं कर रहा है। लेकिन ऐप चलने पर हमेशा यह त्रुटि होती है। त्रुटि को हल करने के लिए कृपया मेरी मदद करें। संपूर्ण स्टैक ट्रेस निम्नानुसार है।

I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$OnUnhandledKeyEventListenerWrapper>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;
I/art:     at void androidx.core.view.ViewCompat.setBackground(android.view.View, android.graphics.drawable.Drawable) (ViewCompat.java:2341)
        at void androidx.appcompat.widget.ActionBarContainer.<init>(android.content.Context, android.util.AttributeSet) (ActionBarContainer.java:62)
        at java.lang.Object java.lang.reflect.Constructor.newInstance0!(java.lang.Object[]) (Constructor.java:-2)
        at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:430)
        at android.view.View android.view.LayoutInflater.createView(java.lang.String, java.lang.String, android.util.AttributeSet) (LayoutInflater.java:645)
        at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:787)
        at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet) (LayoutInflater.java:727)
        at void android.view.LayoutInflater.rInflate(org.xmlpull.v1.XmlPullParser, android.view.View, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:858)
        at void android.view.LayoutInflater.rInflateChildren(org.xmlpull.v1.XmlPullParser, android.view.View, android.util.AttributeSet, boolean) (LayoutInflater.java:821)
        at android.view.View android.view.LayoutInflater.inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup, boolean) (LayoutInflater.java:518)
        at android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup, boolean) (LayoutInflater.java:426)
        at android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup) (LayoutInflater.java:377)
        at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:607)
        at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:518)
        at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:466)
        at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:140)
        at void com.connectdb.truckish.common.base.BaseActivity.onCreate(android.os.Bundle) (BaseActivity.java:44)
        at void com.connectdb.truckish.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:14)
        at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6672)
        at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1140)
        at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2612)
        at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2724)
        at void android.app.ActivityThread.-wrap12(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1)
        at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1473)
        at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
        at void android.os.Looper.loop() (Looper.java:154)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6123)
        at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
        at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:867)
        at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:757)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on path: DexPathList[[zip file "/data/app/com.connectdb.truckish-2/base.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.connectdb.truckish-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[
        at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
        at void androidx.core.view.ViewCompat.setBackground(android.view.View, android.graphics.drawable.Drawable) (ViewCompat.java:2341)
        at void androidx.appcompat.widget.ActionBarContainer.<init>(android.content.Context, android.util.AttributeSet) (ActionBarContainer.java:62)
        at java.lang.Object java.lang.reflect.Constructor.newInstance0!(java.lang.Object[]) (Constructor.java:-2)
        at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:430)
        at android.view.View android.view.LayoutInflater.createView(java.lang.String, java.lang.String, android.util.AttributeSet) (LayoutInflater.java:645)
        at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:787)
        at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet) (LayoutInflater.java:727)
        at void android.view.LayoutInflater.rInflate(org.xmlpull.v1.XmlPullParser, android.view.View, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:858)
        at void android.view.LayoutInflater.rInflateChildren(org.xmlpull.v1.XmlPullParser, android.view.View, android.util.AttributeSet, boolean) (LayoutInflater.java:821)
        at android.view.View android.view.LayoutInflater.inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup, boolean) (LayoutInflater.java:518)
        at android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup, boolean) (LayoutInflater.java:426)
        at android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup) (LayoutInflater.java:377)
        at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:607)
        at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:518)
        at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:466)
        at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:140)
        at void com.connectdb.truckish.common.base.BaseActivity.onCreate(android.os.Bundle) (BaseActivity.java:44)
        at void com.connectdb.truckish.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:14)
        at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6672)
        at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1140)
        at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2612)
        at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2724)
        at void android.app.ActivityThread.-wrap12(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1)
        at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1473)
        at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
        at void android.os.Looper.loop() (Looper.java:154)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6123)
        at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
        at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:867)
        at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:757)

1
मेरी भी यही त्रुटि है। क्या आपको कोई वर्कअराउंड मिला है?
c0nst

नहीं, मुझे कोई वर्कअराउंड नहीं मिला है।
मोहन रेक्स

1
मुझे एक समान लेकिन गैर AndroidX त्रुटि मिल रही है Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.view.ViewCompat$OnUnhandledKeyEventListenerWrapper>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;। क्या यह एक अलग कारण है?
डेल

@मोहन रेक्स कृपया मेरी मदद करें कि इस समस्या को कैसे ठीक किया जाए?
गर्ग का

1
केवल एक चीज जिसने मुझे मदद की वह है AppCompatActivity को मेरी सभी गतिविधियों में सिर्फ गतिविधि के साथ बदलना। उदाहरण के लिए, सार्वजनिक कक्षा MainActivity गतिविधि का विस्तार करती है। मेरे लिए और कुछ काम नहीं किया। इसके बाद यह चेतावनी चली गई क्योंकि यह एंड्रॉइड X में
AppCompat

जवाबों:


88

जैसा कि ALFlanagan ने एक टिप्पणी में उल्लेख किया है कि समस्या यह है कि नए androidx पैकेज संरचना में android.support.v4.view.ViewCompatलागू नहीं View.OnUnhandledKeyEventListenerहोती है और केवल यह API को 28 पर शुरू होती है जो समर्थन परिवाद संरचना में (कम से कम 28.0.0 संस्करण में) है। इसलिए चेतावनी API <28 के साथ उपकरणों पर दिखाई देती है और उन> = 28 पर दिखाई नहीं देती है।

यह ViewCompat.classसमर्थन पैकेज संरचना से कक्षा में संबंधित कोड है :

@RequiresApi(28)
private static class OnUnhandledKeyEventListenerWrapper implements OnUnhandledKeyEventListener {
    private ViewCompat.OnUnhandledKeyEventListenerCompat mCompatListener;

    OnUnhandledKeyEventListenerWrapper(ViewCompat.OnUnhandledKeyEventListenerCompat listener) {
        this.mCompatListener = listener;
    }

    public boolean onUnhandledKeyEvent(View v, KeyEvent event) {
        return this.mCompatListener.onUnhandledKeyEvent(v, event);
    }
}

मैं इस चेतावनी को हल करने के लिए किसी भी आसान तय के बारे में नहीं सोच सकता।


14
समस्या को ठीक नहीं किया गया है और किसी ने स्पष्टीकरण या समाधान देने की परवाह नहीं की है।
ओडीस

4
ऐसा लगता है कि बग यहाँ पुनः सबमिट किया गया issuetracker.google.com/issues/120750246
aaronmarino

2
खैर, मेरा ऐप अभी काम नहीं कर रहा है और मैं सिर्फ अपने डिबग (लॉगकट) पर इस त्रुटि को देखता हूं। एप्लिकेशन क्रैश नहीं करता है, लेकिन "सामग्री दृश्य" भी अपडेट नहीं किया जाता है, एक रिक्त स्क्रीन को छोड़कर।
इयारी डॉस अंजोस

1
मुझे एक ही समस्या है .. यह दुर्घटनाग्रस्त नहीं है, लेकिन दृश्य में कुछ अप्रत्याशित व्यवहार हो रहा है। जैसे ही मैंने कंपाइल sdk को 27 से 27 में अपग्रेड किया, वैसे ही होना शुरू हो गया।
अमित कुमार

2
यह एपीआई के साथ हर डिवाइस पर एक रनटाइम क्रैश है <26
जॉन सरदिंहा

2

मैं एक ही मुद्दे का सामना कर रहा हूं, लेकिन बस appcompat के लिए निर्भरता को अपग्रेड करने की कोशिश की और इसने कोई और त्रुटि लॉग काम नहीं किया। मुझे उम्मीद है कि जल्द ही नई स्थिर रिलीज होगी। https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.0-alpha01

androidx.appcompat:appcompat:1.3.0-alpha01

0

मुझे लगता है कि यह androidx में एक बग है। मैंने पाया है कि डिबग बिल्ड में त्रुटि का कारण बनता है, लेकिन उत्पादन को धीमा या धीमा नहीं करता है इसलिए मैंने अभी के लिए इसे अनदेखा कर दिया है।


मैं पहले से ही AppCompatActivity का उपयोग कर रहा हूं :(। लेकिन त्रुटि दिखाई देती है।
मोहन रेक्स

1
@MohanRex - वास्तव में, AppCompatActivity का उपयोग करते समय यह संदेश दिखाई देता है। फिर भी, किसी को AppCompatActivity का उपयोग करना चाहिए - बस इस हानिरहित झुंझलाहट को अनदेखा करें।
टूलमेकरसैट

0

आप androidJ बाइट कोड को संशोधित करके इस मुद्दे को शून्य करने के लिए एस्पैक्ट जे का उपयोग कर सकते हैं।

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class UnHandleKeyEventAspectJ {
    public static final String TAG="UnHandleKeyEventAspectJ";
    @Pointcut("execution(* androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener))")
public void kotlinClassInit() {

}
    @Around("kotlinClassInit()")
    public void addTransaction(ProceedingJoinPoint joinPoint){
        try {
            joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }
}

क्या आप बता सकते हैं कि ऐस्पेक्टज को एंड्रॉइड स्टूडियो 3.6.3 के साथ कैसे काम करना है। मैं इस त्रुटि को "बुनियादी गतिविधि" टेम्पलेट का उपयोग कर रहा हूँ, जिसमें कंपाइलस्क 28, buildToolsVersion 29.0.3, minSdkVersion 16, targetSdkVersion 28 का उपयोग कर बनाया जा रहा है।
kbro

-2

ऊपर दिए गए उत्तर सही हैं। इससे बचने का एकमात्र तरीका AppCompat के संदर्भों को दूर करना है - जैसे मैंने FragmentActivity को बदल दिया। बुरी खबर नई सामग्री पुस्तकालयों सभी संदर्भ और समस्या का अनुभव है। मैं अपने स्टार्टअप पर ऐसा नहीं करना चाहता था - बाद में हिट इतना बुरा नहीं है। यह केवल एक चेतावनी है - लेकिन इसका प्रदर्शन प्रभाव पड़ता है और यह बड़े फर्जी है और खराब रूप से बड़े जी द्वारा नियंत्रित किया जाता है।


1
पुन "मैं FragmentActivity को बदलकर" । एक अच्छा विचार नहीं है - इसका मतलब है कि आपका ऐप पुराने उपकरणों पर नहीं चलेगा। AppCompat के साथ रहें। पुन: "यह केवल एक चेतावनी है - लेकिन प्रदर्शन प्रभाव पड़ता है" - स्पष्ट करने के लिए, कोई भी प्रदर्शन प्रभाव रिलीज बिल्ड पर नगण्य है; यह मुख्य रूप से एक झुंझलाहट है, डिबग लॉग की शुरुआत के पास अव्यवस्था को जोड़ना।
टूलमेकरसेव

-3

एनोटेशन का @RequiresApi(28)वास्तव में अर्थ है, केवल build.gradleकॉन्फ़िगरेशन जो लॉग-स्पैम से छुटकारा दिलाएगा, वह minSdkVersionकम से कम उठाना होगा 28। बस इसे एक चेतावनी के रूप में समझें जिसे म्यूट नहीं किया जा सकता - एक त्रुटि नहीं।

android {    
    defaultConfig {
        targetSdkVersion 28
        compileSdkVersion 28
        minSdkVersion 28
    }
}

डाउन-वोट केवल इस बात का प्रमाण है कि यह साइट कितनी बौद्धिक विरोधी है ...


इतना उपयोगी नहीं है .. आप उपयोगकर्ताओं को इन दिनों केवल 28+ की उम्मीद नहीं कर सकते।
ज़ीरो डिवाइडर

ठीक है, यह केवल एक चेतावनी है, भले ही लॉग-स्पैम कष्टप्रद हो ... फिर भी लॉगजीआईटी में रेगेक्स अपवर्जन पैटर्न जोड़ना और उस लॉग संदेश को केवल फ़िल्टर करना संभव हो सकता है।
मार्टिन ज़ेटलर

minSdkVersion 28 निश्चित रूप से अधिकांश एपीपी के लिए बहुत अधिक है
वू युआन चुन

@WuYuanChun यह सवाल नहीं था - और यह एकमात्र उत्तर है जो वास्तव में समस्या को छिपाता है।
मार्टिन ज़ेटलर 11

स्पष्ट करने के लिए: पुराने डिवाइस पर नहीं चलने वाले ऐप में minSDK को 28 परिणामों में बदलना। सही? यदि हां, तो इसका उत्तर एक प्रमुख चेतावनी के रूप में होना चाहिए।
टूलमेकरसेव

-5

आप इससे बच सकते हैं क्योंकि वह विशिष्ट वर्ग केवल एंड्रॉइड 9 में है।


1
क्या आप कृपया अधिक जानकारी दे सकते हैं। यह बहुत मददगार होगा।
मोहन रेक्स

3
डेवलपर देखें .android.com/ reference/ android/view/… । ऐसा लगता है कि यह एक बग है जहां android.support.v4.view.ViewCompat एक अपेक्षित इंटरफ़ेस लागू नहीं करता है।
अल फ्लानागन

4
(उपरोक्त वर्ग ==> androidx.core.view.ViewCompat है) एक बग रिपोर्ट जारी करने वाला है। http://www.issues/110162198 जो "डुप्लिकेट करने में असमर्थ" चिह्नित है। आप समस्या को पुन: उत्पन्न करने के लिए आवश्यक सभी सूचनाओं के साथ एक बग रिपोर्ट दाखिल करने पर विचार कर सकते हैं।
अल फ्लानागन

संदर्भ के लिए Thx, मैंने ट्रैकर में इस मुद्दे को अपने कोड के साथ बढ़ाया इस उम्मीद में कि वे इसे पुन: पेश कर सकते हैं।
22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.