Tencent / Shadow

零反射全动态Android插件框架
BSD 3-Clause "New" or "Revised" License
7.43k stars 1.3k forks source link

如何通过反射调用插件中的方法并获取返回值 #1300

Closed yaoyue1019 closed 5 months ago

yaoyue1019 commented 6 months ago

SamplePluginManager#enter作为插件的入口,实际调用插件的service或activity时,都是通过PluginLoader调用相关的Service或是Activity,如果只是想调用插件中的一个方法,不想通过activity或者service实现,是否有操作方法?查看了PluginLoader的实现我没找到相关的方法

shifujun commented 6 months ago

不通过service实现你就得自己处理跨进程调用的问题,那就自己写个binder,像shadow的PPS一样。

如果在同一个进程,最简单的手段就是让插件依赖宿主一个接口,然后把实现填充到一个静态域里。像sample中 HostUiLayerProvider 那样。

yaoyue1019 commented 6 months ago

不通过service实现你就得自己处理跨进程调用的问题,那就自己写个binder,像shadow的PPS一样。

如果在同一个进程,最简单的手段就是让插件依赖宿主一个接口,然后把实现填充到一个静态域里。像sample中 HostUiLayerProvider 那样。

试了一把把相关的功能改到pps里感觉有点复杂,最后还是决定改到service里执行,就是返回值结果似乎没法返回给调用方这里有点麻烦,需要通过广播通知调用方,是否有更方便的方法可以通知调用方?