Shadow icon indicating copy to clipboard operation
Shadow copied to clipboard

插件中的ContentProvider需要指定进程,要怎么处理?

Open BBNO opened this issue 2 years ago • 5 comments

插件中AndroidManifest定义如下,这样框架需要做什么兼容处理吗? @shifujun

<provider
            android:name="com.server.ServiceProvider"
            android:authorities="${applicationId}.server.ServiceProvider"
            android:enabled="true"
            android:exported="true"
            android:process=":Manager" />

BBNO avatar Mar 22 '22 08:03 BBNO

在插件中的子进程没有启起来,是什么原因导致的?

BBNO avatar Mar 22 '22 08:03 BBNO

插件Manifest中声明的process都是无效的。实际上插件的Manifest对系统来说不可见,它其中能生效的配置都是通过插件框架进行解析后,转换为运行时逻辑使其生效的。比如插件的ContentProvider声明后可以被找到,也是插件框架通过宿主中的壳子Provider调用参数进行转换而实现的。

对于进程process字段来说,没有运行时的API可以使我们动态创建新进程,因此无法支持这一字段。插件框架最多可以做到将其绑定到宿主中已注册的进程中。Shadow目前是通过PPS来绑定不同进程的。

与此相关的知识可以自行搜索,应该来说插件技术都无法支持动态新增进程。

另外,Wiki有一篇与此相关:Shadow的跨进程设计与插件Service原理

shifujun avatar Mar 22 '22 09:03 shifujun

那一个插件中可以启多个进程吗?

BBNO avatar Mar 22 '22 09:03 BBNO

你好,如果一个插件要启多个进程,要怎么处理? @shifujun

BBNO avatar Mar 23 '22 02:03 BBNO

可以参考测试代码: https://github.com/Tencent/Shadow/blob/aa7dcf4b834fccb3d024f2c87b8a7485a2366545/projects/test/dynamic/host/test-dynamic-host/src/main/AndroidManifest.xml#L90-L93

添加多个PPS,然后由不同的manager持有它们操作对应进程。

shifujun avatar Mar 23 '22 02:03 shifujun