Shadow
Shadow copied to clipboard
插件中的ContentProvider需要指定进程,要怎么处理?
插件中AndroidManifest定义如下,这样框架需要做什么兼容处理吗? @shifujun
<provider
android:name="com.server.ServiceProvider"
android:authorities="${applicationId}.server.ServiceProvider"
android:enabled="true"
android:exported="true"
android:process=":Manager" />
在插件中的子进程没有启起来,是什么原因导致的?
插件Manifest中声明的process都是无效的。实际上插件的Manifest对系统来说不可见,它其中能生效的配置都是通过插件框架进行解析后,转换为运行时逻辑使其生效的。比如插件的ContentProvider声明后可以被找到,也是插件框架通过宿主中的壳子Provider调用参数进行转换而实现的。
对于进程process字段来说,没有运行时的API可以使我们动态创建新进程,因此无法支持这一字段。插件框架最多可以做到将其绑定到宿主中已注册的进程中。Shadow目前是通过PPS来绑定不同进程的。
与此相关的知识可以自行搜索,应该来说插件技术都无法支持动态新增进程。
另外,Wiki有一篇与此相关:Shadow的跨进程设计与插件Service原理
那一个插件中可以启多个进程吗?
你好,如果一个插件要启多个进程,要怎么处理? @shifujun
可以参考测试代码: https://github.com/Tencent/Shadow/blob/aa7dcf4b834fccb3d024f2c87b8a7485a2366545/projects/test/dynamic/host/test-dynamic-host/src/main/AndroidManifest.xml#L90-L93
添加多个PPS,然后由不同的manager持有它们操作对应进程。