Skip to content

使用360的DroidPlugin,实现了网络获取并安装插件,升级插件,修改默认启动动画。

Notifications You must be signed in to change notification settings

leafseelight/PluginMaster

Repository files navigation

PluginMaster

研究成果分享(Droidplugin版本是2017.3.29的版本):

  • 插件升级,签名可以不一致
  • 插件不能使用multidex的包,所以instant-run也不行(即快速编译用的包,会有多个dex)
  • 宿主与插件,签名可以不一致
  • 不同插件包名要做区分
  • 插件升级,代码去检查版本号是否增加,然后下载apk,安装(传入覆盖安装的参数,好像没有升级的),PluginManager会自动去找到相同包名的插件覆盖安装(低版本也可以覆盖高版本)。
  • 宿主跳转插件的界面,修改:
    • a方案:修改静图,(插件机制,类似一个app把插件包裹在内部,这个界面实际上这个插件管理器的主题【就比如app打开比较慢,如果没有设置主题透明,就会显示白色背景】)
    • b方案:使用动画,把插件管理的主题设置为透明,然后,宿主跳转时加入动画界面,在宿主onReStart()或者onResume()时关闭动画。(有点投机取巧,黑科技)

不科学方案:使用动画,把插件管理的主题设置为透明,然后,宿主跳转时加入动画界面,在插件中发送广播,进行关闭。(不建议,因为这样每个插件主页面都要发送关闭动画广播,插件存在代码侵入),不能在宿主关闭,因为不知道关闭的时机,即无法知道插件多久启动成功。

  • 如果插件有使用推送不建议使用这个机制,由于Droidplugin要求权限申请需要放在宿主,而推送的权限带着包名,宿主与插件app包名不一致,宿主上是不允许申请包名不一致的权限的(可以自己测试),这样就存在矛盾,另外还有一个原因,插件必须启动的时候才能接收到广播(插件中静态广播会变成动态注册)想通过宿主接收推送,透传给插件不大方便,需要保证插件都有运行,但是插件只有一个入口,又是矛盾。

About

使用360的DroidPlugin,实现了网络获取并安装插件,升级插件,修改默认启动动画。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages