这个插件的工程结构是什么样的?
答:请先导入到Android Studio工程。你会发现有两个工程,一个是TestPlugin,它引用了DroidPlugin的库工程,通过代码简单展示了如何使用DroidPlugin;APITest是一个测试工程,编译后可以当作插件运行在插件系统,用来测试android的各种api。
2.为什么我集成后,奇数次可以打开,偶数次就打不开了?
答:请按照文档中修改PluginManager.STUB_AUTHORITY_NAME="com.example.droidplugin_stub"的值。
为什么我运行demon的时候安装不上?
答:如果你安装了360手机助手,则是ContentProvider冲突了,请参照文档第四步修改authorities和PluginManager.STUB_AUTHORITY_NAME。
如何实现插件和宿主、插件直接的通讯?
答:DroidPlugin系统本身并不提供通讯机制。如有需要请使用Android系统提供的标准apk之间的通讯方式,如广播、AIDL等方式。但是目前我正在实现更优雅的通讯方式。
插件和宿主、插件之间如何共享代码?
答:不行。插件和宿主之间、插件之间都使用了不同的ClassLoader,所以不能互相访问彼此的代码,即使通过反射也不行。因为在一些情况下,插件和宿主可能会使用相同的开源库,比如support V4,但是使用的版本不一致,如果使用同样的ClassLoader来加载,则可能会因为开源库的版本不一致导致冲突。
插件和宿主、插件之间如何共享资源?
答:不行。插件和宿主之间、插件之间都使用了不同的AssetManager加载资源,故它们的资源互相隔离,这样才可以实现插件免重新打包。只有这样严格的隔离,才能防止插件和宿主、插件之间的资源id不会冲突。其它插件则通过修改aapt,指定生成的资源id段来解决此事,私以为不够优雅。
7.DroidPlugin支持插件带一个so库吗?64位支持如何?
答:支持。64位支持情况请参见我的提交:https://github.com/Qihoo360/DroidPlugin/commit/534a970440ff149f369f5a11611b191523a0ebe7
8.DroidPlugin增加宿主app中所有的权限
9.host的app中的project.properties文件中增加manifestmerger.enabled=true
10.@Andy Zhang 张总,插件App里面有一个NFC服务,需要在manifest里面配置aid,但是这个aid系统读不到,一直刷不了卡
Andy Zhang 14:53:18
嗯,对,需要在宿主中配置。
勇敢的少年啊。 14:53:43
只需要配置aid就行了吗?
Andy Zhang 14:55:18
activity都要配置。
Andy Zhang 14:55:24
这种系统读的必须要转发。。
Andy Zhang 14:55:27
否则不行的
勇敢的少年啊。 14:57:49
怎么转发
勇敢的少年啊。 14:58:45
哦~ 意思就是插件的Activity都要配置在宿主里吗?
11、您好,DroidPlugin的开发者,想基于DroidPlugin做一些应用,现在碰到这个问题:无法在插件中注册一些具有特殊Intent Filter的Service以供Android系统、已经安装的其他APP调用。 请问是否有解决方案了
Andy Zhang 16:50:05
这个暂时不行
Andy Zhang 16:50:18
只宿主做转发
12. 先入为主 16:16:18
宿主完全不能调用插件的代码吗?@Andy Zhang
Andy Zhang 16:58:58
不能
Andy Zhang 16:59:15
不可以,除非用contentprovider
Andy Zhang 10:27:03
1、插件与宿主没法共用jar,因为如果共用,可能会导致插件无法独立运行、插件的其它class如果跟宿主名称重复会出现冲突、无法解耦合。
奋斗 10:27:32
@Andy Zhang ApkPlug这个差简化,他们 做的就是插件和host运行在同一个进程里面的
Andy Zhang 10:28:20
2、通讯目前只能用android标准协议,目前正在做更好的费那个事。
奋斗 10:28:33
@Andy Zhang 插件的classLoader跟host的classLoader不一样
Andy Zhang 10:28:42
3、不运行在同一个进程是为了保证稳定性和动态升级。
Andy Zhang 10:28:45
嗯,对的。
(∩_∩)Joe 10:28:57
如果不是要求plugin越小越好,我也不赞成共用
Andy Zhang 10:29:21
平行空间 也是基于DroidPlugin做的,有大部分代码是基于DroidPlugin
Andy Zhang 10:29:37
所以DroidPlugin经过剪裁和修改时可以支持任何APP的启动的。