web-dev-qa-db-ja.com

AndroidX:Appcompat I:アートエラーAndroid.view.View $ OnUnhandledKeyEventListener

Androidx:appcompat:appcompat:1.0.0-rc01で新しく作成されたプロジェクトでは、

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

私は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.+"
            }
        }
    }
}

これはアプリの機能に影響を与えたりクラッシュしたりしません。しかし、アプリの実行中は常にこのエラーが発生します。親切に私がエラーを解決するのを助けます。全体のスタックトレースは以下の通りです。

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)
52
Mohan Rex

A.L.Flanaganがコメントで述べたように、問題はAndroid.support.v4.view.ViewCompatが新しいandroidxパッケージ構造にView.OnUnhandledKeyEventListenerを実装せず、サポートライブラリ構造(少なくともバージョン28.0.0)のAPI 28以降でのみ実装することです。したがって、警告はAPIが28未満のデバイスに表示され、28以上のデバイスには表示されません。

これは、サポートパッケージ構造のViewCompat.classクラスの関連コードです。

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

私はこの警告を解決するための簡単な修正方法について考えることはできません。

38

上記の答えは正しいです。これを避ける唯一の方法は、AppCompatへの参照を削除することです。 FragmentActivityに変更しました。悪いニュースは、新しい資料ライブラリがすべて問題を参照し、経験していることです。私はこれが私のスタートアップで起こることを望まなかった - ヒットは後でそれほど悪くない。これは単なる警告です - しかしパフォーマンスへの影響はあります、そしてそれはかなりの偽物であり、ビッグGによる扱いが不十分です.

0
Daniel Haywood

アノテーション@RequiresApi(28)は実際には、log-spamを取り除くための唯一のbuild.gradle設定がminSdkVersionを少なくとも28に上げることであることを意味します。ミュートできない警告と考えてください。エラーではありません。

Android {    
    defaultConfig {
        targetSdkVersion 28
        compileSdkVersion 28
        minSdkVersion 28
    }
}
0
Martin Zeitler

これはandroidxのバグだと思います。私は、エラーがデバッグビルドで遅れを引き起こすことを発見しましたが、プロダクションビルドを表示または遅くしないので、今のところ無視しました。

0
Bob bobbington