Skip to content
Gray Liu edited this page Sep 20, 2018 · 2 revisions

Neptune是什么?

Neptune是爱奇艺研发的一套灵活,稳定,轻量级的插件化框架,已经适配了Android P,能够在数亿的设备上动态加载和运行插件APK,为爱奇艺众多的垂直业务团队提供了稳定的服务。

Neptune的特性

功能完善,支持Activity/Service/Recevier组件,几乎支持所有Android原生特性。

  • 四大组件无需在宿主Manifest中预先注册,组件具备完整的生命周期
  • Activity:支持显式和隐式调用,支持theme,luanchMode,taskAffinity,支持透明主题
  • Service:支持显式和隐式调用,支持start,stop,bind,unbind等操作
  • BroadcastReceiver:支持静态广播和动态广播
  • ContentProvider:暂时没有支持
  • 支持共享宿主的代码和资源,实现资源分区
  • 支持插件之间存在相互依赖,代码共享
  • 插件ClassLoader和资源互相隔离,避免类冲突和资源重名
  • 宿主Activity容器支持加载插件中的Fragment和View

兼容性和稳定性

  • 几乎兼容市面上所有的Android设备
  • 极少的Hook,核心Hook点只有Instrumentation和AssetManager,没有binder hook
  • 插件可以运行在独立进程,与宿主完全隔离,互不干扰
  • 插件之间类是隔离的,不会出现重复类的问题
  • 插件使用自身的AssetManager,没有Hook宿主的Resources,无需适配小米,vivo等ROM

侵入性低

  • 插件开发和开发原生APP类似
  • 插件可以依赖宿主的代码和资源,也可以完全不依赖
  • 插件和宿主可以独立打包和编译,并行迭代
  • 插件依赖宿主的资源,通过Gradle插件自动完成资源适配和处理,对开发者透明

实现原理

Neptune的整体设计架构图 架构图

整个框架是非常轻量级的,提供了PluginClassLoader,PluginContextWrapper,ActivityProxy, ResourceProxy等基础组件实现了插件类加载、资源加载和生命周期的必要条件,更多细节可以阅读 《Neptune的技术实现原理》

如何接入