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 agregado 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.+"
}
}
}
}
Este no afecta la funcionalidad de la aplicación o se bloquea. Pero siempre tiene este error cuando la aplicación se está ejecutando. Amablemente ayúdame a resolver el error. Todo el seguimiento de la pila es el 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)
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;
. ¿Es esta una causa diferente?Respuestas:
Como ALFlanagan mencionó en un comentario, el problema es que
android.support.v4.view.ViewCompat
no se implementaView.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 dispositivos con API <28 y no aparece en aquellos> = 28.Este es el código relacionado en la
ViewCompat.class
clase de la estructura del paquete de soporte:No puedo pensar en ninguna solución fácil para resolver esta advertencia.
fuente
Estoy enfrentando el mismo problema, pero solo intenté actualizar la dependencia para appcompat y no funcionó más registros de errores. Espero que haya una nueva versión estable pronto. https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.0-alpha01
fuente
Creo que esto es un error en androidx. Descubrí que el error provoca un retraso en las compilaciones de depuración, pero no muestra ni ralentiza las compilaciones de producción, por lo que lo he ignorado por ahora.
fuente
puede usar aspectJ para anular este problema modificando el código de bytes de androidx.
fuente
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, el éxito 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 el gran G.
fuente
La anotación en
@RequiresApi(28)
realidad significa que la únicabuild.gradle
configuración que eliminaría el log-spam sería subirminSdkVersion
al menos a28
. Considérelo como una advertencia que no se puede silenciar, no como un error.Los votos negativos solo demuestran cuán anti-intelectual es este sitio ...
fuente
Puede evitarlo porque esa clase específica solo en Android 9.
fuente