2017-02-27 5 views
1

Iは、Androidスタジオ(v.2.2.3)の次のスタックトレースを受けた:java.lang.NoSuchMethodErrorの:いいえ静的メソッドisCtrlPressed(Landroid /ビュー/れたKeyEvent;)

E/InputEventSender: Exception dispatching finished signal. 
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 
E/MessageQueue-JNI: java.lang.NoSuchMethodError: No static method isCtrlPressed(Landroid/view/KeyEvent;)Z in class Landroid/support/v4/view/KeyEventCompat; or its super classes (declaration of 'android.support.v4.view.KeyEventCompat' appears in /data/app/com.app.name-2/base.apk) at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:526) 
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:319) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2276) 
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4020) 
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3982) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) 
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) 
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) 
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3680) 
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571) 
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3737) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) 
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) 
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) 
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) 
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) 
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3713)  
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3874) 
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2208) 
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1849) 
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1840) 
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2185) 
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) 
at android.os.MessageQueue.nativePollOnce(Native Method) 
at android.os.MessageQueue.next(MessageQueue.java:143) 
at android.os.Looper.loop(Looper.java:122) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

android.supportを。 v4.viewパッケージには、文書化されたブールメンバー変数isCtrlPressedを持つKeyEventCompatクラスがあります。

私のアプリケーションのビューがAppCompatActivityをオーバーライドするので、dispatchKeyEvent()関数は静的にKeyEventCompat.isCtrlPressed()を呼び出しますが、関数は存在しません。

I次のGradleの設定があります。次の依存関係で

compileSdkVersion = 25 
buildToolsVersion = "25.0.2" 
supportLibVersion = "25.2.0" 
minSdkVersion 14 
targetSdkVersion = 25 

compile "com.android.support:appcompat-v7:25.2.0" 
compile "com.android.support:support-compat:25.2.0" 
compile "com.android.support:support-media-compat:25.2.0" 
compile "com.android.support:gridlayout-v7:25.2.0" 
compile "com.android.support:support-core-utils:${rootProject.ext.supportLibVersion}" 
compile "com.android.support:support-core-ui:${rootProject.ext.supportLibVersion}" 
compile "com.android.support:design:${rootProject.ext.supportLibVersion}" 
compile "com.android.support:recyclerview-v7:${rootProject.ext.supportLibVersion}" 
compile 'com.android.support:support-v4:25.2.0' 

これはAndroidのバグですが?もしそうなら、提案された回避策は何ですか?おそらく、より低いバージョンのビルドツール&サポートライブラリを使用してコンパイルしようとしていますか?

+0

そのメソッドを使用する場所にコードを投稿 – arjun

+0

** isCtrlPressed()**メソッドが静的メソッド内で呼び出されているようです。 ** static **として** isCtrlPressed()**メソッドを宣言すると、これを回避することができます。たとえば、 'public static boolean isCtrlPressed(...){...}'のようになります。 – DevilsHnd

答えて

0

SO発行のhereは私の問題を解決していないことに注意してください。

私はAOSPバグ#257553
java.lang.NoSuchMethodErrorのようにこの問題を提起している:いいえ静的メソッドはisCtrlPressedない(Landroid /ビュー/れたKeyEvent;)クラスLandroid /サポート/ V4 /ビューにおけるZ/KeyEventCompat。私は、バージョン25.1.0へのバージョン25.2.0からAPPCOMPAT &サポートライブラリをダウングレードするために、このページの文書化のイベントの逆バージョンを踏襲しているCodepath - Migrating To The AppCompat Library上の華麗な書き込み最大

おかげで(はい、私は辞任しました2つのバージョン、ちょうど安全であることを願っています。

だから、私は問題を回避するために要した手順は、にした:SDKマネージャからビルドツール25.0.2を削除

  1. appcompat-v7 SDKフォルダを見つけ、25.2.0全体と私の場合は25.1.1フォルダを削除します。

    のMac OSユーザーのためのファイルの場所:

    /users/[username]/Library/Android/Sdk/extras/android/m2repository/com/android/support/appcompat-v7 
    

    PCユーザーのためのファイルの場所:

    C:\Documents and Settiings<user>\ApPData\Local\Android\Sdk\extras\android\m2repository\com\android\support\appcompat-v7 
    
  2. この同じフォルダ(上記のステップ2で定義された場所)Insideは、Mavenのメタデータを編集します。 xmlファイルを削除し、次の2行を削除します。

    <version>25.2.0</version> 
    <version>25.1.1</version> 
    
  3. buildToolsVersion '25.0.0' 
    supportLibVersion '25.1.0' 
    
  4. クリーンプロジェクトを再構築:アプリ/ build.gradleにビルドツールとAPPCOMPATライブラリをダウングレードします。

UPDATE

上記の溶液は、それらの特定のライブラリのバージョンとビルドバリアントのために働いていたことに留意すべきです。

はできるだけ早く私が構築し、次の変数を更新して、元のエラーが再び返さ:

buildTooleVersion '25.0.2' 
supportLibVersion '25.3.0' 

このビルドバリアントの下で問題を解決した解決策は非常に単純で、hereを見つけることができます。実際には、これはすべての条件下で正解でなければならないと思いますが、すべてのビルド・バリアントでこれをテストしていません。

参照ソリューションを要約すると、android.support.v7.app.AppCompatActivityをサブクラス化する代わりに、アプリケーションのActivityはandroid.app.Activityクラスをサブクラス化する必要があります。そのアクティビティで使用するカスタムビューを作成する場合、カスタムビューはandroid.support.v7.widgetビューをサブクラス化する必要があります。これにより、ビューはアクティビティクラス内でそのビューを使用するときにサポート機能を継承します。

関連する問題