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.