YoKeyword / Fragmentation

[DEPRECATED] A powerful library that manage Fragment for Android
Apache License 2.0
9.72k stars 2.11k forks source link

使用SDK版本29,No field with the name mListener is found in Animation class #1189

Open zouxianbincc opened 5 years ago

zouxianbincc commented 5 years ago

Issues Guideline

Following information can help us to resolve the issue faster.

In addition, we do not accept issues unrelated to Fragmentation.

zouxianbincc commented 5 years ago

在使用 sdk 29时,报这个异常: E/FragmentManager: No field with the name mListener is found in Animation class java.lang.NoSuchFieldException: No field mListener in class Landroid/view/animation/Animation; (declaration of 'android.view.animation.Animation' appears in /system/framework/framework.jar!classes3.dex) at java.lang.Class.getDeclaredField(Native Method) at androidx.fragment.app.FragmentManagerImpl.getAnimationListener(FragmentManager.java:1301) at androidx.fragment.app.FragmentManagerImpl.animateRemoveFragment(FragmentManager.java:1638) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1548) at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784) at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:797) at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625) at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411) at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366) at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2243) at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:648) at com.fearefull.todoreminder.ui.main.MainActivity.onFragmentDetached(MainActivity.java:148) at com.fearefull.todoreminder.ui.settings.SettingsFragment.goBack(SettingsFragment.java:71) at com.fearefull.todoreminder.ui.settings.SettingsViewModel.onNavigationBackClick(SettingsViewModel.java:23) at com.fearefull.todoreminder.databinding.FragmentSettingsBindingImpl._internalCallbackOnClick(FragmentSettingsBindingImpl.java:188) at com.fearefull.todoreminder.generated.callback.OnClickListener.onClick(OnClickListener.java:11) at android.view.View.performClick(View.java:7125) at android.view.View.performClickInternal(View.java:7102) at android.view.View.access$3400(View.java:801) at android.view.View$PerformClick.run(View.java:27301) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7319) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)

如何解决?

AlbertZyc commented 5 years ago

同遇类似问题 sdk 29 在 SupportFragment firstFragment = findFragment(MainContainerFragment.class); 时出现一下错误

java.lang.NoSuchFieldError: No field mActive of type Landroid/util/SparseArray; in class Landroidx/fragment/app/FragmentManagerImpl; or its superclasses (declaration of 'androidx.fragment.app.FragmentManagerImpl' appears in /data/app/com.hotyoso.firebitpay-EM2cfhDlX5o9sgiTOhGGgQ==/split_lib_dependencies_apk.apk) at androidx.fragment.app.FragmentationMagician.getActiveFragments(FragmentationMagician.java:156) at me.yokeyword.fragmentation.SupportHelper.findStackFragment(SupportHelper.java:139) at me.yokeyword.fragmentation.SupportHelper.findFragment(SupportHelper.java:114) at me.yokeyword.fragmentation.SupportActivity.findFragment(SupportActivity.java:261) at com.hotyoso.firebitpay.FatherActivity.initFragment(FatherActivity.java:52) at com.hotyoso.firebitpay.FatherActivity.onCreate(FatherActivity.java:39) at android.app.Activity.performCreate(Activity.java:7224) at android.app.Activity.performCreate(Activity.java:7213) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6806) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

mny459 commented 4 years ago

一样遇到了这个问题,请问有解决方案吗

985211yyg commented 4 years ago

image https://juejin.im/post/5d406ea0f265da03aa25493d 1.从 Android 9(API 级别 28)开始,系统会限制APP通过反射或JNI调用非Andorid SDK的接口。 2.项目的业务代码可以通过全局搜索检查非SDK接口的使用情况。 3.几乎所有第三方SDK(包括Android support库!!)都有大量通过反射调用非SDK api的情况。通常反射调用时都有try-catch,能够保证应用不崩,但实际功能受影响的程度无法评估。

985211yyg commented 4 years ago

image

985211yyg commented 4 years ago

image