java.lang.NoSuchMethodError: No static method dispatch Unhandled KeyEvent Pre

java.lang.NoSuchMethodError: No static method dispatch Unhandled KeyEvent Pre

当迁移到 androidx 时,我在返回时遇到上述错误。

   java.lang.NoSuchMethodError: No static method dispatchUnhandledKeyEventPre(Landroid/view/View;Landroid/view/KeyEvent;)Z in class Landroidx/core/view/ViewCompat; or its super classes (declaration of 'androidx.core.view.ViewCompat' appears in 1/split_lib_dependencies_apk.apk)
    at androidx.appcompat.app.AppCompatDelegateImpl.dispatchKeyEvent(AppCompatDelegateImpl.java:1162)
    at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:2529)
    at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
    at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:329)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4792)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4759)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4082)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4135)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4101)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4109)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4082)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4135)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4101)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4257)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4109)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4314)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4082)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4135)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4101)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4109)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4082)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4135)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4101)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4290)
    at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4451)
    at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2434)
    at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1998)
    at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1989)
    at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2411)
    at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:323)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:6351)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)

我认为在 ViewCompat class 中没有 dispatchUnhandledKeyEventPre 方法。我正在使用一些第三方依赖项,所以我不知道是哪种方法导致的

检查您使用的是 1.0.0-beta01 版本的 appcompat 库

对我来说,转到 gradle.build 文件并确保所有依赖项都是最新的(新版本)解决了这个问题。

已接受的答案虽然正确,但在不久的将来将发布 appcompat 的新版本时将变得过时,因为答案对特定时间范围非常具体。

一般的回答是,当您在项目中使用 appcompat(appcompat 库)的不同混合版本时,它们往往会更频繁地相互不兼容。每次通过 SDK Manager 更新一些 API 时,您必须检查您是否使用最新版本的 appcompat 库。如果您使用的是 Android Studio,则更新非常容易。

转到您的 build.gradle (Module: app) 并查看依赖项。 gradle linter 很可能已经向您显示了您正在使用不同版本的 appcompat 库以及是否有更新版本可用的错误。如果您将鼠标悬停在那些突出显示的行上,它将为您提供所需的所有信息,包括您正在使用的版本和最新可用的版本以及所有依赖项是否都在同一版本上。按照提示进行修复,然后 运行 a gradle sync 应该没问题。

例如,我使用的是 com.android.support:appcompat-v7:28.0.0-alpha3com.android.support:design:28.0.0com.android.support.constraint:constraint-layout:1.1.2 的混合版本,而最新版本是 v28.0.0v1.1.3

希望对您有所帮助。