web-dev-qa-db-fra.com

AndroidX: Appcompat I: erreur artistique Android.view.View $ OnUnhandledKeyEventListener

Dans un projet nouvellement créé avec Androidx: appcompat: appcompat: 1.0.0-rc01, je reçois le

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

J'avais aussi ajouté configuration.all

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

Celui-ci n'affecte pas la fonctionnalité de l'application ou se bloque. Mais il y a toujours cette erreur lorsque l'application est en cours d'exécution. Aidez-moi à résoudre l’erreur .. .. L’ensemble de la trace de la pile est le suivant.

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)
33
Mohan Rex

Comme A.L.Flanagan l'a mentionné dans un commentaire, le problème est que Android.support.v4.view.ViewCompat n'implémente pas View.OnUnhandledKeyEventListener dans la nouvelle structure de package androidx et ne l'implémente qu'à partir de l'API 28 de la structure de bibliothèque de support (au moins dans la version 28.0.0). Par conséquent, l'avertissement apparaît sur les appareils dotés d'une API <28 et n'apparaît pas sur ceux> = 28.

Il s'agit du code associé dans la classe ViewCompat.class à partir de la structure du package de support:

@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);
    }
}

Je ne peux pas penser à une solution facile pour résoudre cet avertissement.

21
AlvaroSantisteban

Les réponses ci-dessus sont correctes. Le seul moyen d'éviter cela consiste à supprimer les références à AppCompat - par exemple. J'ai changé pour FragmentActivity. La mauvaise nouvelle est que les nouvelles bibliothèques de matériaux font toutes référence et rencontrent le problème. Je ne voulais pas que cela se produise au démarrage - le succès n’est pas si grave plus tard. C'est juste un avertissement - mais cela a un impact sur les performances et c'est assez faux et mal géré par le grand G.

0
Daniel Haywood

L'annotation @RequiresApi(28) signifie en fait que la seule configuration build.gradle permettant de se débarrasser du journal-spam sera d'élever le minSdkVersion à au moins 28. Considérez-le simplement comme un avertissement qui ne peut pas être désactivé - pas une erreur.

Android {    
    defaultConfig {
        targetSdkVersion 28
        compileSdkVersion 28
        minSdkVersion 28
    }
}
0
Martin Zeitler

Je pense que c'est un bug dans Android. J'ai trouvé l'erreur qui cause un décalage dans les versions de débogage mais ne montre pas ou ne ralentit pas les versions de production, donc je l'ai simplement ignorée pour l'instant.

0
Bob bobbington