Android:更新到SDK 23后的java.land.NoSuchFieldError

时间:2015-08-18 17:08:26

标签: android android-support-library android-6.0-marshmallow

我更新到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,但仍然收到错误。

5 个答案:

答案 0 :(得分:13)

我做了一些你做的事, 但我发现gradle可以解决依赖关系, 在外部库我找不到支持-v4-23.0.0,support-v7-23.0.0和其他版本为23.0.0的lib。 然后我又回到编译com.android.support:support-v4:22.2.0', 问题解决者@mraviator

答案 1 :(得分:12)

谢谢@zmarties的答案,我想添加细节和链接

  1. 从gradle中删除'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
  2. this link下载actionbarsherlock模块!
  3. 确认您拥有'com.android.support:support-v4:20.0.0'或23
  4. 打开actionbarsherlock模块src将FloatMath更改为AnimatorProxy.java中的Math
  5. 打开actionbarsherlock模块src在类级作用域中创建变量片段为 FragmentManagerImpl fragments =(FragmentManagerImpl)this.getSupportFragmentManager(); 在Watson.java中
  6. 将所有 mFragments事件替换为片段变量
  7. 感谢您的上述答案。

答案 2 :(得分:6)

使用google play服务版本8.1.0而不是8.4.0解决了我的问题

答案 3 :(得分:0)

您是否从设计标签更改了主要布局中的主题视图? 尝试再次将其更改为设计选项卡中的Sherlock主题视图。

答案 4 :(得分:0)

将项目eclipse导入Android Studio时,我遇到了同样的问题

这是我的最佳解决方案

如果我做了以下两组更改,我发现可以使用SDK 23构建ActionBarSherlock:

<\ n>在AnimatorProxy.java中,将FloatMath调用替换为相应的Math调用 - 我将FloatMath更改为Math

在Waston Class中我遇到了错误 - mFragments.isadded 所以, 我替换以下代码而不是检查

mFragments.isadded!= null

<强> mFragments.getActiveFragments(mCreatedMenus)

每当需要时

我解决了这些问题。