Shadow
Shadow copied to clipboard
关于多个插件运行在同一个进程的问题
请教一下两个问题: 1、经过测试发现,同一个进程中不能运行多个PPS,那么如何实现同一个进程运行多个插件的场景? 2、多个插件能否共用一个PPS?
一个进程能运行多个插件。可以仔细调试一下sample和test工程,它们都是多插件的。
一个进程多个插件,native不会冲突的吗?看了sample,是一个插件一个进程的啊
经过试验,同名so解压会覆盖,除非使用android:extractNativeLibs="false"
程多个插件,
sample-base
和sample-app
是两个插件apk,它们是在同一个插件进程的。
native的动态库so是会冲突的,不仅仅是so文件名不能冲突,里面的符号也是不能冲突的。
这种不可冲突性和普通的app引入两个aar库都包含so是一样的。
我的使用场景是多个插件同一个进程,插件是都是使用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路径:
有一个不方便的点:extractSO方法是私有的,解压的目录无法修改。我不得已通过file.rename的方式进行移动so文件。并且只能串行解压,移动。 如果像sample那样线程池4个线程并发,那么就会导致so在处理过程中覆盖丢失,或者未知问题。