Android-Plugin-Framework icon indicating copy to clipboard operation
Android-Plugin-Framework copied to clipboard

宿主调用独立插件的Fragment报ClassCastException

Open IntelliCe opened this issue 2 years ago • 0 comments

宿主端代码

@PluginContainer
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById<ComposeView>(R.id.composeMainApp).setContent {
            DeskOSTheme {
                MainApp()
            }
        }

        val clazz = PluginLoader.loadPluginFragmentClassById("com.deskos.calendar.appentry")
        if (clazz != null) {
            val fragment = clazz.newInstance() as Fragment
            val transaction = supportFragmentManager.beginTransaction()
            transaction.replace(R.id.fragment_1, fragment).commit()
        }
    }
}

插件侧的Fragment的父类和宿主端强制转换的类型是一致的,但是会报ClassCastException。 报错信息

FATAL EXCEPTION: main
Process: com.csquared.deskos:plugin, PID: 21360
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.csquared.deskos/com.csquared.deskos.main.MainActivity}: java.lang.RuntimeException:  activity : dalvik.system.PathClassLoader[DexPathList[[dex file "/data/data/com.csquared.deskos/code_cache/.overlay/base.apk/classes9.dex", zip file "/data/app/~~TZZiWoWKM8ec1Avh76B38Q==/com.csquared.deskos-b5zA2unMktc1DLhXPaxbrQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~TZZiWoWKM8ec1Avh76B38Q==/com.csquared.deskos-b5zA2unMktc1DLhXPaxbrQ==/lib/arm64, /system/lib64, /system_ext/lib64]]] pluginContainer : @com.limpoxe.fairy.core.annotation.PluginContainer(pluginId=), process : true
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3676)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813)
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308)
	at com.limpoxe.fairy.core.PluginAppTrace.handleMessage(PluginAppTrace.java:45)
	at android.os.Handler.dispatchMessage(Handler.java:102)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7898)
	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:936)
Caused by: java.lang.RuntimeException:  activity : dalvik.system.PathClassLoader[DexPathList[[dex file "/data/data/com.csquared.deskos/code_cache/.overlay/base.apk/classes9.dex", zip file "/data/app/~~TZZiWoWKM8ec1Avh76B38Q==/com.csquared.deskos-b5zA2unMktc1DLhXPaxbrQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~TZZiWoWKM8ec1Avh76B38Q==/com.csquared.deskos-b5zA2unMktc1DLhXPaxbrQ==/lib/arm64, /system/lib64, /system_ext/lib64]]] pluginContainer : @com.limpoxe.fairy.core.annotation.PluginContainer(pluginId=), process : true
	at com.limpoxe.fairy.core.PluginInstrumentionWrapper.callActivityOnCreate(PluginInstrumentionWrapper.java:412)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3657)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813) 
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) 
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308) 
	at com.limpoxe.fairy.core.PluginAppTrace.handleMessage(PluginAppTrace.java:45) 
	at android.os.Handler.dispatchMessage(Handler.java:102) 
	at android.os.Looper.loopOnce(Looper.java:201) 
	at android.os.Looper.loop(Looper.java:288) 
	at android.app.ActivityThread.main(ActivityThread.java:7898) 
	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:936) 
Caused by: java.lang.ClassCastException: com.deskos.calendar.Application cannot be cast to androidx.fragment.app.Fragment
	at com.csquared.deskos.main.MainActivity.onCreate(MainActivity.kt:34)
	at android.app.Activity.performCreate(Activity.java:8290)
	at android.app.Activity.performCreate(Activity.java:8269)
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)
	at com.limpoxe.fairy.core.PluginInstrumentionWrapper.callActivityOnCreate(PluginInstrumentionWrapper.java:407)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3657) 
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813) 
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) 
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308) 
	at com.limpoxe.fairy.core.PluginAppTrace.handleMessage(PluginAppTrace.java:45) 
	at android.os.Handler.dispatchMessage(Handler.java:102) 
	at android.os.Looper.loopOnce(Looper.java:201) 
	at android.os.Looper.loop(Looper.java:288) 
	at android.app.ActivityThread.main(ActivityThread.java:7898) 
	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:936) 

IntelliCe avatar Apr 01 '23 09:04 IntelliCe