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

mra*_*tor 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)
Run Code Online (Sandbox Code Playgroud)

我恢复了所有内容的API 22,仍然得到错误.

san*_*ars 14

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

  • 也适用于我,即使使用com.android.support:support-v4:22.2.0时出现警告"此支持库不应使用低于targetSDKVersion(23)的版本 (3认同)
  • 切换回com.android.support:support-v4:22.2.0也为我工作 (2认同)

小智 12

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

  1. 从gradle中删除'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
  2. 从此链接下载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. 用fragment变量替换所有mFragments实例

谢谢你的上述答案.


erg*_*cak 6

使用谷歌播放服务版本8.1.0而不是8.4.0解决了我