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)
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.
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.
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
}
}
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.