动态功能:无法实例化片段:确保类名存在

发布于 01-16 23:42 字数 1620 浏览 3 评论 0原文

我正在尝试加载位于动态功能模块中的片段。但是,我不断崩溃:

val f = FragmentFactory().instantiate(classLoader,
 "com.myapp.customviewdynamicfeature.CustomFragment")

supportFragmentManager.beginTransaction()
.add(R.id.customFragmentContainer, f).commit()
2022-03-25 11:36:54.020 20732-20732/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myapp.dynamicdeliverysampleapp, PID: 20732
    androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.myapp.customviewdynamicfeature.CustomFragment: make sure class name exists
        at androidx.fragment.app.FragmentFactory.loadFragmentClass(FragmentFactory.java:97)
        at 

我也尝试将其添加到我的动态模块的混淆器中

-keep class com.myapp.customviewdynamicfeature.** { *; }

我也尝试过反射:

val f = Class.forName("com.myapp.customviewdynamicfeature.CustomFragment").newInstance() as Fragment

但我收到类似的错误:

    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:558)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
     Caused by: java.lang.ClassNotFoundException: com.myapp.customviewdynamicfeature.CustomFragment

I'm trying to load my fragment that lives in a dynamic feature module. However, I keep getting a crash:

val f = FragmentFactory().instantiate(classLoader,
 "com.myapp.customviewdynamicfeature.CustomFragment")

supportFragmentManager.beginTransaction()
.add(R.id.customFragmentContainer, f).commit()
2022-03-25 11:36:54.020 20732-20732/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myapp.dynamicdeliverysampleapp, PID: 20732
    androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.myapp.customviewdynamicfeature.CustomFragment: make sure class name exists
        at androidx.fragment.app.FragmentFactory.loadFragmentClass(FragmentFactory.java:97)
        at 

I also tried adding this to my dynamic module's proguard

-keep class com.myapp.customviewdynamicfeature.** { *; }

I've also tried reflection:

val f = Class.forName("com.myapp.customviewdynamicfeature.CustomFragment").newInstance() as Fragment

but I get a similar error:

    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:558)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
     Caused by: java.lang.ClassNotFoundException: com.myapp.customviewdynamicfeature.CustomFragment

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

平生欢2025-01-23 23:42:21

我相信我通过将 AndroidX 片段版本升级到 1.5.0 解决了这个问题。
https://developer.android.com/jetpack/androidx/releases/fragment#版本_15_2

I believe I resolved this by upgrading the AndroidX fragment version to 1.5.0.
https://developer.android.com/jetpack/androidx/releases/fragment#version_15_2

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文