android - 更新材料库后如何修复“包裹:解组时找不到类:androidx.fragment.app.FragmentManagerState”?
问题描述
我更新com.google.android.material:material
到 1.2.0 版,现在我的应用程序闪烁白黑。我在 logcat 中看到了这个异常:
E/Parcel: Class not found when unmarshalling: androidx.fragment.app.FragmentManagerState
java.lang.ClassNotFoundException: androidx.fragment.app.FragmentManagerState
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at android.os.Parcel.readParcelableCreator(Parcel.java:3014)
at android.os.Parcel.readParcelable(Parcel.java:2964)
at android.os.Parcel.readValue(Parcel.java:2866)
at android.os.Parcel.readArrayMapInternal(Parcel.java:3244)
at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
at android.os.BaseBundle.unparcel(BaseBundle.java:236)
at android.os.Bundle.getBundle(Bundle.java:924)
at ky.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):17)
at kk.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):2)
at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):3)
at cw.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):64)
at ac.onTransact(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):4)
at android.os.Binder.transact(Binder.java:914)
at com.google.android.gms.internal.measurement.zza.zzb(com.google.android.gms:play-services-measurement-base@@17.2.0:20)
at com.google.android.gms.internal.measurement.zzo.onActivityCreated(com.google.android.gms:play-services-measurement-base@@17.2.0:144)
at com.google.android.gms.internal.measurement.zzbc.zza(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:4)
at com.google.android.gms.internal.measurement.zzx$zza.run(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:11)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.ClassNotFoundException: androidx.fragment.app.FragmentManagerState
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:1358)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:1418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at android.os.Parcel.readParcelableCreator(Parcel.java:3014)
at android.os.Parcel.readParcelable(Parcel.java:2964)
at android.os.Parcel.readValue(Parcel.java:2866)
at android.os.Parcel.readArrayMapInternal(Parcel.java:3244)
at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
at android.os.BaseBundle.unparcel(BaseBundle.java:236)
at android.os.Bundle.getBundle(Bundle.java:924)
at ky.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):17)
at kk.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):2)
at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):3)
at cw.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):64)
at ac.onTransact(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):4)
at android.os.Binder.transact(Binder.java:914)
at com.google.android.gms.internal.measurement.zza.zzb(com.google.android.gms:play-services-measurement-base@@17.2.0:20)
at com.google.android.gms.internal.measurement.zzo.onActivityCreated(com.google.android.gms:play-services-measurement-base@@17.2.0:144)
at com.google.android.gms.internal.measurement.zzbc.zza(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:4)
at com.google.android.gms.internal.measurement.zzx$zza.run(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:11)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
经过一番研究,我发现androidx.fragment.app.FragmentManagerState
标记为@SuppressLint("BanParcelableUsage")
. 我想这就是我的应用程序闪烁且无法正常工作的原因,但我不知道如何解决?我试图用谷歌搜索,但没有发现任何有用的东西。
我应该在哪里进一步搜索?我不记得曾经使用过这个类的明确性。有人可以帮忙吗?
解决方案
最后我找到了解决方案。一旦我更新了材料库,我应该以更新的方式使用主题调整:
AppCompatDelegate.setDefaultNightMode(nightMode)
代替
val newConfig = Configuration(activity.resources.configuration)
newConfig.uiMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK.inv()
newConfig.uiMode = newConfig.uiMode or uiNightMode
activity.resources.updateConfiguration(newConfig, null)
activity.setTheme(theme)
我刚刚替换了这些代码并继承了应用程序主题Theme.AppCompat.DayNight
,现在它就像一个魅力!
推荐阅读
- javascript - 使用 TailwindCSS 和 Symfony Webpack Encore
- c# - Catch 正在返回自定义错误页面而不是错误消息
- excel - 如何允许 Windows 10 中的标准用户访问 Office 应用程序自动化对象?
- python - 用 groupby 的结果填充 panda 数据框中的列
- .net - 无法在 Mac 上的命令行中运行 .NET Core 应用程序
- unity3d - 如何统一获取对象的引用
- javascript - 将所有禁用按钮更改为启用按钮的书签
- r - 在 R 中为时间序列制作小提琴图
- wordpress - 使用单个查询获取所有术语的术语元字段
- perl - 如何在磁盘上而不是在 RAM 中保存大哈希?