滴滴首个开源项目 VirtualAPK 加载耦合插件首选

时间:2021-11-10 12:14:28
来源:开源最前线 猿妹 整编


号称手机“打车神器”的滴滴在 6 月 30 日正式宣布开源其 Android 插件化框架 —— VirtualAPK ,这也是滴滴公司的首个对外开源项目。业内认为,在加载耦合插件方面,VirtualAPK 可以说是开源方案的首选。


插件化框架 VirtualAPK


授权协议:Apache

开发语言:Java

操作系统:Android

开发厂商:滴滴

Github:https://github.com/didi/VirtualAPK  4360



滴滴首个开源项目 VirtualAPK 加载耦合插件首选VirtualAPK 简介 滴滴首个开源项目 VirtualAPK 加载耦合插件首选


VirtualAPK 是滴滴出行自研的一款优秀的插件化框架,滴滴表示于去年开始研究 Android 插件化方面的技术,经过半年的开发、测试、适配和线上验证,最终形成了现在的 VirtualAPK 。VirtualAPK 已在滴滴内部得到了很好的验证,并已应用于滴滴乘客端和优步中国 APP 中。



滴滴首个开源项目 VirtualAPK 加载耦合插件首选VirtualAPK 特性 滴滴首个开源项目 VirtualAPK 加载耦合插件首选


1、功能完备


  • 支持几乎所有的 Android 特性;

  • 四大组件方面:四大组件均不需要在宿主manifest中预注册,每个组件都有完整的生命周期。

    • Activity:支持显示和隐式调用,支持 Activity 的 theme 和 LaunchMode,支持透明主题;

    • Service:支持显示和隐式调用,支持 Service 的 start、stop、bind 和 unbind,并支持跨进程 bind 插件中的 Service;

    • Receiver:支持静态注册和动态注册的 Receiver;

    • ContentProvider:支持 provider的所有操作,包括 CRUD 和 call 方法等,支持跨进程访问插件中的 Provider。

  • 自定义View:支持自定义 View,支持自定义属性和 style,支持动画;

  • PendingIntent:支持 PendingIntent 以及和其相关的 Alarm、Notification 和AppWidget;

  • 支持插件 Application 以及插件 manifest 中的 meta-data;

  • 支持插件中的so。


2、优秀的兼容性


  • 兼容市面上几乎所有的 Android 手机,这一点已经在滴滴出行客户端中得到验证;

  • 资源方面适配小米、Vivo、Nubia 等,对未知机型采用自适应适配方案;

  • 极少的 Binder Hook,目前仅仅 hook 了两个 Binder:AMS 和 IContentProvider,Hook过程做了充分的兼容性适配;

  • 插件运行逻辑和宿主隔离,确保框架的任何问题都不会影响宿主的正常运行。

3、入侵性极低


  • 插件开发等同于原生开发,四大组件无需继承特定的基类;

  • 精简的插件包,插件可以依赖宿主中的代码和资源,也可以不依赖;

  • 插件的构建过程简单,通过Gradle插件来完成插件的构建,整个过程对开发者透明。



滴滴首个开源项目 VirtualAPK 加载耦合插件首选整体结构图 滴滴首个开源项目 VirtualAPK 加载耦合插件首选


滴滴首个开源项目 VirtualAPK 加载耦合插件首选



滴滴首个开源项目 VirtualAPK 加载耦合插件首选VirtualAPK 工作过程 滴滴首个开源项目 VirtualAPK 加载耦合插件首选


VirtualAPK 对插件没有额外的约束,原生的 apk 即可作为插件。插件工程编译生成 apk 后,即可通过宿主 App 加载,每个插件 apk 被加载后,都会在宿主中创建一个单独的 LoadedPlugin 对象。如下图所示,通过这些 LoadedPlugin 对象,VirtualAPK 就可以管理插件并赋予插件新的意义,使其可以像手机中安装过的App一样运行。


滴滴首个开源项目 VirtualAPK 加载耦合插件首选


滴滴自行研发了这款插件化框架,功能全面、兼容性好,还能够适用于有耦合的业务插件,这就是VirtualAPK存在的意义。业内认为,在加载耦合插件方面,VirtualAPK 可以说是开源方案的首选。



滴滴首个开源项目 VirtualAPK 加载耦合插件首选