记录一下遇到的一个崩溃,关于 Androdx:No instance field mActive of type Landroid/util/SparseArray,解决方案
报错详情:偶然新建一个工程,集成一些常用框架后,启动后,突然报了一个很奇怪的错误,跳转Activity后,按返回键,就会崩溃,感觉就莫名其妙的崩溃。在没有任何其他逻辑的情况下,估计是依赖包冲突导致的。
2020-04-19 02:34:44.301 12744-12744/com.redrose.audioandvideo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.redrose.audioandvideo, PID: 12744
java.lang.NoSuchFieldError: No instance 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.redrose.audioandvideo-8q-xQIvLUCHldL3G_7x-vg==/split_lib_dependencies_apk.apk)
at androidx.fragment.app.FragmentationMagician.getActiveFragments(FragmentationMagician.java:153)
at me.yokeyword.fragmentation.SupportHelper.getActiveFragment(SupportHelper.java:159)
at me.yokeyword.fragmentation.SupportHelper.getActiveFragment(SupportHelper.java:131)
at me.yokeyword.fragmentation.SupportActivityDelegate$1.run(SupportActivityDelegate.java:157)
at me.yokeyword.fragmentation.queue.ActionQueue.handleAction(ActionQueue.java:53)
at me.yokeyword.fragmentation.queue.ActionQueue.enqueueAction(ActionQueue.java:45)
at me.yokeyword.fragmentation.queue.ActionQueue.access$000(ActionQueue.java:17)
at me.yokeyword.fragmentation.queue.ActionQueue$1.run(ActionQueue.java:37)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8147)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
我的解决方法步骤:
在Terminal中使用gradlew -q app:dependencies命令查看依赖包情况,以及查看依赖包的源码发现,有一个库版本还是以前的版本,implementation 'me.yokeyword:fragmentation:1.3.6'(me.yokeyword.fragmentation.SupportActivity )引用了android.support.v7.app.AppCompatActivity,和androidx冲突,现在原因找到了,就好去找解决方法,在github上查最新库implementation 'me.yokeyword:fragmentationx:1.0.2 ,最新版本依赖的是androidx.appcompat.app.AppCompatActivity,替换后,回退正常了。
由于高版本的AS新建工程默认依赖使用的是androidx,不再是以前的support.v7,所以一些以前的旧版本的开源库没有升级到androidx。如果你和我一样遇到这样的问题,回退Activity,莫名其妙的崩溃,应该也是v7包和androidx冲突了。