Shadow icon indicating copy to clipboard operation
Shadow copied to clipboard

关于多个插件运行在同一个进程的问题

Open zhuqichao opened this issue 3 years ago • 4 comments

请教一下两个问题: 1、经过测试发现,同一个进程中不能运行多个PPS,那么如何实现同一个进程运行多个插件的场景? 2、多个插件能否共用一个PPS?

zhuqichao avatar Feb 23 '22 07:02 zhuqichao

一个进程能运行多个插件。可以仔细调试一下sample和test工程,它们都是多插件的。

shifujun avatar Feb 25 '22 08:02 shifujun

一个进程多个插件,native不会冲突的吗?看了sample,是一个插件一个进程的啊

经过试验,同名so解压会覆盖,除非使用android:extractNativeLibs="false"

wangkai4556 avatar Apr 09 '22 07:04 wangkai4556

程多个插件,

sample-basesample-app是两个插件apk,它们是在同一个插件进程的。 native的动态库so是会冲突的,不仅仅是so文件名不能冲突,里面的符号也是不能冲突的。

这种不可冲突性和普通的app引入两个aar库都包含so是一样的。

shifujun avatar Apr 11 '22 10:04 shifujun

我的使用场景是多个插件同一个进程,插件是都是使用Flutter实现。每个插件apk都有自己的libapp.so。 android 6.0以下通过改造sample流程,解压so的到不同目录,数据库isntalledApk的so记录也是记录为对应目录。 android 6.0及以上使用android:extractNativeLibs="false" 经过试验,同进程,不同flutter实现的插件没有互相影响,并且同时存在时各自的状态都是正常的。猜想可能跟flutter的加载流程和dart的并发模型本身到设计有关,不同的引擎之间isolate刚好是隔离的,全局变量,单例之类的东西不会互相影响。 感觉如果是其他类似ijkplayer之类的第三方native,可能就会有问题。

原so路径: 改造前 新so路径: 改造so

有一个不方便的点:extractSO方法是私有的,解压的目录无法修改。我不得已通过file.rename的方式进行移动so文件。并且只能串行解压,移动。 如果像sample那样线程池4个线程并发,那么就会导致so在处理过程中覆盖丢失,或者未知问题。

wangkai4556 avatar Apr 11 '22 10:04 wangkai4556