Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

Ответ 2

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

  • Удалить 'com.actionbarsherlock: actionbarsherlock: [email protected]' из gradle
  • Загрузите модуль actionbarsherlock из эту ссылку!
  • Убедитесь, что у вас есть "com.android.support:support-v4:20.0.0" или 23
  • Откройте модуль actionbarsherlock src измените значение FloatMath на Math в AnimatorProxy.java
  • Откройте модуль actionbarsherlock src создайте фрагменты переменной в области уровня класса FragmentManagerImpl fragments = (FragmentManagerImpl) this.getSupportFragmentManager(); в Watson.java
  • Заменить все появление mFragments с помощью фрагментов.

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

Ответ 3

Использование сервисов Google Play версии 8.1.0 вместо 8.4.0, разрешенных на моей стороне.

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

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

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

mFragments.isadded!= null

to

mFragments.getActiveFragments(mCreatedMenus)

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

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