Android: java.land.NoSuchFieldError после обновления до SDK 23

Я обновился до 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 и все еще получаю ошибку.

Я сделал то же, что и вы, но я нашел, что gradle может решать зависимости, во внешних библиотеках я не могу найти поддержку-v4-23.0.0, support-v7-23.0.0 и другую библиотеку, версия которой равна 23.0.0. Затем я вернулся к компиляции «com.android.support:support-v4:22.2.0», решатель проблем @mraviator

Спасибо @zmarties за ответ, я хочу добавить детали и ссылки

  1. Удалить 'com.actionbarsherlock: actionbarsherlock: 4.4.0@aar' от gradle
  2. Загрузите модуль actionbarsherlock по этой ссылке !
  3. Убедитесь, что у вас есть «com.android.support:support-v4:20.0.0» или 23
  4. Откройте модуль actionbarsherlock src измените значение FloatMath на Math в AnimatorProxy.java
  5. Откройте модуль actionbarsherlock src создайте фрагменты переменной в области уровня класса как FragmentManagerImpl fragments = (FragmentManagerImpl) this.getSupportFragmentManager (); В Watson.java
  6. Заменить все появление mFragments на переменную фрагментов

Спасибо за приведенные выше ответы.

Использование google play services версии 8.1.0 вместо 8.4.0 на моей стороне

Я обнаружил, что могу создать ActionBarSherlock с помощью SDK 23, если бы сделал следующие два набора изменений:

  • В AnimatorProxy.java, замените вызовы FloatMath соответствующими FloatMath Math
  • В Watson.java, замените использование поля mFragments локальными fragments переменных, инициализированными через getActiveFragments(null) , а затем измените ссылки mFragment на использование локальной переменной

Вы изменили тему в главном макете со вкладки дизайна? Попробуйте изменить его снова на тему темы «Шерлок» на вкладке «Дизайн».

У меня была такая же проблема, когда проект eclipse проекта для Android Studio

Это лучшее решение для меня

Я обнаружил, что могу создать ActionBarSherlock с помощью SDK 23, если бы сделал следующие два набора изменений:

В AnimatorProxy.java, замените вызовы FloatMath соответствующими Math-вызовами – я изменяю FloatMath – на Math

В Waston Class i была ошибка – mFragments.isadded Итак, я заменяю следующий код вместо проверки

MFragments.isadded! = Null

в

mFragments.getActiveFragments (mCreatedMenus)

Каждый раз, когда это требуется

Я решил эти проблемы.