AndroidX: Appcompat I: resim hatası android.view.View $ OnUnhandledKeyEventListener


107

Androidx ile yeni oluşturulmuş bir projede: appcompat: appcompat: 1.0.0-rc01,

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

Ayrıca configuration.all ekledim

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

Bu, uygulama işlevselliğini veya kilitlenmeleri etkilemez. Ancak uygulama çalışırken her zaman bu hatayı alır. Lütfen hatayı çözmeme yardım edin. Tüm yığın izleme aşağıdaki gibidir.

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
Aynı hata bende de var. Herhangi bir geçici çözüm buldunuz mu?
— c0nst

Hayır, herhangi bir çözüm bulamadım.
— Mohan Rex

1
Benzer ancak AndroidX dışı bir hata alıyorum 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;. Bu farklı bir neden mi?
— Dale

@Mohan Rex Lütfen bu sorunu nasıl çözebilirim?
— Garg

1
Bana yardımcı olan tek şey, tüm etkinliklerimde AppCompatActivity'yi yalnızca Activity ile değiştirmekti. Örneğin genel sınıf MainActivity, Aktiviteyi genişletir. Benim için başka hiçbir şey işe yaramadı. Bundan sonra, Android X'teki
— AppCompat

Yanıtlar:


90

ALFlanagan yorumunda belirtildiği gibi sorun olduğunu android.support.v4.view.ViewCompatuygulamıyor View.OnUnhandledKeyEventListeneryeni androidx paket yapısında ve sadece uygular o (sürümünde 28.0.0 en azından) desteği lib yapısında API 28 den itibaren. Bu nedenle uyarı, API <28 olan cihazlarda görünür ve> = 28 olanlarda görünmez.

Bu, ViewCompat.classdestek paketi yapısındaki sınıftaki ilgili koddur :

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

Bu uyarıyı çözmek için herhangi bir kolay düzeltme düşünemiyorum.


15
Olarak konu işaretlendi düzeltmek olmaz ve kimse bir açıklama veya geçici bir çözüm vermek bakım.
— Odys

4
Görünüşe göre hata burada yeniden gönderilmiş gibi issuetracker.google.com/issues/120750246
— aaronmarino

2
Benim uygulamam hiç çalışmıyor ve bu hatayı hata ayıklamamda (Logcat) görüyorum. Uygulama çökmez, ancak "contentView" da güncellenmez ve boş bir ekran bırakır.
— Iúri dos Anjos

1
Ben de aynı sorunu yaşıyorum .. Bu çökmüyor ama görünüm beklenmedik davranışlar sergiliyor. Derleme sdk'yi 27'den 28'e yükselttikten hemen sonra olmaya başladı.
— Amit Kumar

2
Bu, API <26 olan her cihazda bir çalışma zamanı
— çökmesidir


0

Bunun androidx'te bir hata olduğunu düşünüyorum. Hatanın, hata ayıklama yapılarında gecikmeye neden olduğunu buldum, ancak üretim yapılarını göstermiyor veya yavaşlatmıyor, bu yüzden şimdilik bunu görmezden geldim.


Zaten AppCompatActivity kullanıyorum :(. Ancak hata görünüyor.
— Mohan Rex

1
@MohanRex - tam olarak, bu mesaj AppCompatActivity kullanılırken görünür. Yine de, bir gerekir sadece bu zararsız sıkıntı görmezden - AppCompatActivity kullanın.
— ToolmakerSteve

0

androidx bayt kodunu değiştirerek bu sorunu geçersiz kılmak için en-boyJ'yi kullanabilirsiniz.

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

AspectJ'nin Android Studio 3.6.3 ile nasıl çalıştırılacağını açıklar mısınız? CompileSdkVersion 28, buildToolsVersion 29.0.3, minSdkVersion 16, targetSdkVersion 28.
— kbro

-2

Yukarıdaki cevaplar doğrudur. Bundan kaçınmanın tek yolu, AppCompat'a yapılan referansları kaldırmaktır - örneğin, FragmentActivity olarak değiştirdim. Kötü haber, yeni materyal kitaplıklarının hepsinin sorunu referans göstermesi ve deneyimlemesi. Bunun başlangıcımda olmasını istemedim - isabet daha sonra o kadar da kötü değil. Bu sadece bir uyarı - ancak performans üzerinde bir etkisi var ve oldukça sahte ve büyük G tarafından kötü bir şekilde ele alındı.


1
Yeniden "FragmentActivity'ye geçtim" . İyi bir fikir değil - bu, uygulamanızın eski cihazlarda çalışmayacağı anlamına gelir. AppCompat ile kalın. Yeniden "Bu yalnızca bir uyarı - ancak performansa etkisi var" - açıklığa kavuşturmak için, herhangi bir performans etkisi sürüm yapısında ihmal edilebilir; bu esas olarak bir sıkıntıdır ve hata ayıklama günlüğünün başlangıcına yakın bir dağınıklık ekler.
— ToolmakerSteve

-3

Ek açıklama @RequiresApi(28)aslında build.gradle, günlük spam'den kurtulacak tek konfigürasyonun minSdkVersionen azından yükseltmek olacağı anlamına gelir 28. Bunu sadece sesi kapatılamayacak bir uyarı olarak düşünün - bir hata değil.

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

Eksi oylar, bu sitenin ne kadar entelektüel olmadığını kanıtlıyor ...


o kadar kullanışlı değil .. Kullanıcıların bu günlerde yalnızca 28'den fazla olmasını bekleyemezsiniz.
— zeroDivider

Bu sadece bir uyarıdır, günlük spam'ı rahatsız edici olsa bile ... yine de logcat'e bir normal ifade dışlama kalıbı eklemek ve bu günlük mesajını filtrelemek bile mümkün olabilir.
— Martin Zeitler

minSdkVersion 28, APP'nin çoğu için kesinlikle çok yüksek
— Wu Yuan Chun

@WuYuanChun soru bu değildi - ve aslında sorunu gizleyen tek cevap bu.
— Martin Zeitler

Açıklığa kavuşturmak için: minSDK'yi 28 olarak değiştirmek, eski cihazlarda çalışmayan bir uygulama ile sonuçlanır. Sağ? Eğer öyleyse, yanıtta önemli bir uyarı olmalıdır.
— ToolmakerSteve

-5

Bundan kaçınabilirsiniz çünkü bu belirli sınıf yalnızca Android 9'da.


1
Lütfen daha fazla bilgi verir misiniz? Çok yardımcı olacak.
— Mohan Rex

3
Developer.android.com/reference/android/view/… adresine bakın . Görünüşe göre bu, android.support.v4.view.ViewCompat'ın beklenen bir arabirimi uygulamadığı bir hata.
— AL Flanagan

4
(Sınıfın üstünde ==> androidx.core.view.ViewCompat) issuetracker.google.com/issues/110162198 "kopyalanamaz" olarak işaretlenmiş bir hata raporu var . Sorunu yeniden oluşturmak için gereken tüm bilgileri içeren bir hata raporu doldurmayı düşünebilirsiniz.
— AL Flanagan

Referans için teşekkürler, izleyicideki sorunu yeniden üretebilmeleri umuduyla kodumla genişlettim.
— findusl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.