先说结论,Shadow将插件中的Activity全部转换为ShadowActivity,而ShadowActivity本质上是一个Context
可以看到顶层类继承了Context
此时如果希望宿主和插件交互时,传递一个Activity,修改HostUiLayerProvider类增加setActivity方法,在PluginUseHostClassActivity类调setActivity传递this
那么将会报错
抛出异常
“java.lang.NoSuchMethodError: No virtual method setActivity(Lcom/tencent/shadow/core/runtime/ShadowActivity;)V”
反编译可以看到PluginUseHostClassActivity类的超类BaseActivity已经继承了ShadowActivity
如此一来,则需要在插件和宿主共用的接口中使用Context,而不是Activity
Demo当中是插件类调用宿主类,如果是宿主类调用插件类也是同理。
Shadow本身的设计以页面为单位,如果需要在宿主的页面中调用插件代码,同时保留Activity形参,则需要对Shadow插件化框架进行一些修改,将原始的Activity进行保留,Activity中所有的final方法进行转调返回正确值