AndroidX:Appcompat I:artエラーandroid.view.View $ OnUnhandledKeyEventListener


104

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)

1
同じエラーがあります。回避策を見つけましたか?
c0nst 2018

いいえ、回避策は見つかりませんでした。
モハンレックス

1
同様のAndroidX以外のエラーが発生します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;。これは別の原因ですか?
デール

@Mohan Rexこの問題の解決方法を教えてください。
Gargの

私を助けた唯一のことは、私のすべてのアクティビティでAppCompatActivityをActivityだけで拡張することです。たとえば、パブリッククラスMainActivityはActivityを拡張します。他には何もうまくいきませんでした。この後、android XのAppCompatに関連しているため、警告は表示されなくなりました。ただし、下位互換性のための最善の解決策ではありません
Darksymphony

回答:


87

ALFlanaganがコメントで述べたように、問題は新しいandroidxパッケージ構造にandroid.support.v4.view.ViewCompat実装さ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);
    }
}

この警告を解決するための簡単な修正方法は考えられません。


14
この問題は修正されないとマークされており、誰も説明や回避策を提供することを気にしていません
Odys 2018

4
バグがここに再送信されたようです。issuetracker.google.com
issues /

2
まあ、私のアプリはまったく機能していません。デバッグ(Logcat)でこのエラーが表示されます。アプリはクラッシュしませんが、「contentView」も更新されず、空白の画面が残ります。
Iúriドスアンジョス

1
同じ問題が発生しています。クラッシュしていませんが、ビューに予期しない動作が発生しています。すぐに私は27から28に、コンパイルSDKをアップグレードとして起こることを始めています
アミット・クマール

2
これは、APIが26未満のすべてのデバイスでのランタイムクラッシュです
John Sardinha


0

これはandroidxのバグだと思います。エラーがデバッグビルドの遅延の原因であることがわかりましたが、プロダクションビルドが表示またはスローダウンしないため、今は無視します。


私はすでに:( AppCompatActivityを使用してしかし、エラーが表示されています。。
モハンレックス

1
@MohanRex-正確には、このメッセージはAppCompatActivityの使用時に表示されます。それでも、AppCompatActivity 使用する必要があります-この無害な煩わしさは無視してください
ToolmakerSteve

0

あなたはaspectJを使ってandroidxバイトコードを修正することでこの問題を無効にすることができます。

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をAndroid Studio 3.6.3と連携させる方法を教えてください。私は、targetSdkVersion 28このエラーはcompileSdkVersion 28、buildToolsVersion 29.0.3、minSdkVersionが16を使用して、「基本的なアクティビティ」テンプレートを建てたそうだ
kbro

-2

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


1
「私はFragmentActivityに変更さ」。良い考えではありません-つまり、アプリは古いデバイスでは実行できません。AppCompatをご利用ください。再「それは単なる警告だ-しかし、パフォーマンスへの影響を持っていない」 -明確にするために、任意のパフォーマンスへの影響は、リリースビルドに無視することができます。これは主に煩わしいことであり、デバッグログの先頭近くに混乱を追加します。
ToolmakerSteve

-3

注釈@RequiresApi(28)は、実際には、build.gradleログスパムを1つ取り除く設定はminSdkVersion、を少なくともに上げることだけであることを意味し28ます。エラーではなく、ミュートできない警告と見なしてください。

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

反対票は、このサイトがどのように反知的であるかを証明するだけです...


それほど使用可能ではありません。ユーザーが最近28歳以上になることを期待することはできません。
zeroDivider

まあ、それはログスパムが迷惑であっても警告にすぎません...それでも、正規表現の除外パターンをlogcatに追加して、単にそのログメッセージをフィルターで除外することは可能かもしれません。
マーティンZeitler

ほとんどのAPPにとってminSdkVersion 28は高すぎる
Wu Yuan Chun

@WuYuanChunこれは問題ではありませんでした-これが実際に問題を隠す唯一の答えです。
Martin

明確にするために:minSDKを28に変更すると、古いデバイスではアプリが実行されなくなります。正しい?もしそうなら、それは顕著な警告として答えにあるべきです。
ToolmakerSteve

-5

その特定のクラスはAndroid 9のみであるため、それを回避できます。


1
詳細を教えてください。とても参考になります。
モハンレックス

3
developer.android.com/reference/android/view/…をご覧ください。これは、android.support.v4.view.ViewCompatが予期されたインターフェースを実装していないバグのようです。
ALフラナガン

4
(上記のクラスは==> androidx.core.view.ViewCompat)バグレポートissuetracker.google.com/issues/110162198があり、「複製できません」とマークされています。問題を再現するために必要なすべての情報をバグレポートに提出することを検討してください。
ALフラナガン

参考までに、トラッカーで問題を再現できるように、コードを拡張しました。
findusl 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.