-
Notifications
You must be signed in to change notification settings - Fork 113
Home
Gray Liu edited this page Sep 20, 2018
·
2 revisions
Neptune是爱奇艺研发的一套灵活,稳定,轻量级的插件化框架,已经适配了Android P,能够在数亿的设备上动态加载和运行插件APK,为爱奇艺众多的垂直业务团队提供了稳定的服务。
功能完善,支持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的技术实现原理》