Shadow接口无法使用Activity,看这里

72 阅读1分钟

先说结论,Shadow将插件中的Activity全部转换为ShadowActivity,而ShadowActivity本质上是一个Context

image.png 可以看到顶层类继承了Context

此时如果希望宿主和插件交互时,传递一个Activity,修改HostUiLayerProvider类增加setActivity方法,在PluginUseHostClassActivity类调setActivity传递this

image.png

image.png 那么将会报错

image.png 抛出异常 “java.lang.NoSuchMethodError: No virtual method setActivity(Lcom/tencent/shadow/core/runtime/ShadowActivity;)V”

反编译可以看到PluginUseHostClassActivity类的超类BaseActivity已经继承了ShadowActivity

image.png

image.png

如此一来,则需要在插件和宿主共用的接口中使用Context,而不是Activity

Demo当中是插件类调用宿主类,如果是宿主类调用插件类也是同理。

Shadow本身的设计以页面为单位,如果需要在宿主的页面中调用插件代码,同时保留Activity形参,则需要对Shadow插件化框架进行一些修改,将原始的Activity进行保留,Activity中所有的final方法进行转调返回正确值