web-dev-qa-db-ja.com

Android:SDK 23への更新後のJava.land.NoSuchFieldError

SDK 23に更新し、gradle.buildをAPI 23に、サポートライブラリを23.0.0に更新しました。アプリを実行しようとすると、次のエラーが発生します(問題なくコンパイルされます)。

Java.lang.NoSuchFieldError: No instance field mFragments of type Landroid/support/v4/app/FragmentManagerImpl; in class Landroid/support/v4/app/Watson; or its superclasses (declaration of 'Android.support.v4.app.Watson' appears in /data/app/com.my.app-1/base.apk)
            at Android.support.v4.app.Watson.onCreatePanelMenu(Watson.Java:50)
            at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.Java:560)
            at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.Java:64)
            at com.actionbarsherlock.app.SherlockFragmentActivity.onCreatePanelMenu(SherlockFragmentActivity.Java:164)
            at com.Android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.Java:548)
            at com.Android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.Java:917)
            at com.Android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.Java:258)
            at Android.os.Handler.handleCallback(Handler.Java:739)
            at Android.os.Handler.dispatchMessage(Handler.Java:95)
            at Android.os.Looper.loop(Looper.Java:135)
            at Android.app.ActivityThread.main(ActivityThread.Java:5221)
            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:899)
            at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)

すべてをAPI 22に戻してもエラーが発生します。

26
mraviator

私はあなたと同じようにいくつかのことをしましたが、gradleが依存関係を解決できることがわかりました。外部ライブラリでは、support-v4-23.0.0、support-v7-23.0.0、およびバージョンが23.0.0の他のlibを見つけることができません。次に、「com.Android.support:support-v4:22.2.0」をコンパイルするように戻しました。問題ソルバー@mraviator

14
sanemars

回答をありがとう@zmarties、詳細とリンクを追加したい

  1. Gradleから「com.actionbarsherlock:actionbarsherlock:4.4.0@aar」を削除します
  2. このリンク からactionbarsherlockモジュールをダウンロードしてください!
  3. 「com.Android.support:support-v4:20.0.0」または23であることを確認します
  4. AnimatorProxy.Javaでactionbarsherlockモジュールを開き、srcをFloatMathをMathに変更します。
  5. Actionbarsherlockモジュールsrcを開き、クラスレベルのスコープで変数フラグメントをFragmentManagerImplフラグメント=(FragmentManagerImpl)this.getSupportFragmentManager();としてWatson.Javaで作成します。
  6. すべてのmFragmentsオカレンスをフラグメント変数に置き換えます

上記の回答ありがとうございます。

12
Subtain Ishfaq

私の側で解決された8.4.0ではなくgoogle play servicesバージョン8.1.0を使用して解決しました

6
ergunkocak

次の2つの変更セットを行った場合、SDK 23を使用してActionBarSherlockを構築できることがわかりました。

  • animatorProxy.Javaで、FloatMath呼び出しを対応するMath呼び出しに置き換えます
  • watson.Javaで、mFragmentsフィールドの使用をgetActiveFragments(null)を介して初期化されたローカル変数fragmentsに置き換え、使用するようにmFragment参照を変更しますローカル変数
3
zmarties

メインレイアウトのテーマビューをデザインタブから変更しましたか?デザインタブでSherlockテーマビューにもう一度変更してみてください。

0
Leandro Latorre

プロジェクトEclipseをAndroid Studioにインポートすると、同じ問題が発生しました

これは私にとって最良の解決策です

次の2つの変更セットを行った場合、SDK 23を使用してActionBarSherlockを構築できることがわかりました。

animatorProxy.Javaで、FloatMath呼び出しを対応するMath呼び出しに置き換えます-私はFloatMathをMathに変更します

ワストンクラスでエラーが発生しました-mFragments.isaddedしたがって、チェックする代わりに次のコードを置き換えます

mFragments.isadded!= null

mFragments.getActiveFragments(mCreatedMenus)

いつでも必要なときに

私はこれらの問題を解決しました。

0
Navin