support studio releases refactor que library android androidx

studio - com android support to androidx



AndroidX: Appcompat I: error de arte android.view.View $ OnUnhandledKeyEventListener (5)

En un proyecto recién creado con Androidx: appcompat: appcompat: 1.0.0-rc01, obtengo el

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

También había añadido la configuración.

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

Este no está afectando la funcionalidad de la aplicación o se bloquea. Pero siempre tiene este error cuando la aplicación se está ejecutando. Por favor ayúdame a resolver el error. La traza completa de la pila es la siguiente.

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)


Como mencionó ALFlanagan en un comentario, el problema es que android.support.v4.view.ViewCompat no implementa View.OnUnhandledKeyEventListener en la nueva estructura del paquete androidx y solo lo implementa a partir de la API 28 en la estructura de la biblioteca de soporte (al menos en la versión 28.0 .0). Por lo tanto, la advertencia aparece en los dispositivos con API <28 y no aparece en esos> = 28.

Este es el código relacionado en la clase ViewCompat.class de la estructura del paquete de soporte:

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

No puedo pensar en ninguna solución fácil para resolver esta advertencia.


Creo que esto es un error en androidx. He encontrado que el error causa un retraso en las versiones de depuración, pero no muestra ni ralentiza las construcciones de producción, por lo que solo lo he ignorado por ahora.


La anotación @RequiresApi(28) realidad significa que la única configuración de build.gradle que se libraría del log-spam sería elevar el minSdkVersion a al menos 28 . Simplemente considérelo como una advertencia que no se puede silenciar, no un error.

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


Las respuestas anteriores son correctas. La única forma de evitar esto es eliminar las referencias a AppCompat, por ejemplo, cambié a FragmentActivity. La mala noticia es que las nuevas bibliotecas de materiales hacen referencia y experimentan el problema. No quería que esto ocurriera en mi inicio, ya que el golpe no es tan malo más adelante. Es solo una advertencia, pero tiene un impacto en el rendimiento y es bastante falso y mal manejado por la gran G.


Puedes evitarlo porque esa clase específica solo en Android 9.