VirtualAPK 是滴滴出行自研的一款优秀的插件化框架,通过将业务模块插件化,可随时更新插件来发布新功能,具备版本随时发布的能力。
支持几乎所有的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。
兼容市面上几乎所有的Android手机,这一点已经在滴滴出行客户端中得到验证;
资源方面适配小米、Vivo、Nubia等,对未知机型采用自适应适配方案;
极少的Binder Hook,目前仅仅hook了两个Binder:AMS和IContentProvider,hook过程做了充分的兼容性适配;
插件运行逻辑和宿主隔离,确保框架的任何问题都不会影响宿主的正常运行。
插件开发等同于原生开发,四大组件无需继承特定的基类;
精简的插件包,插件可以依赖宿主中的代码和资源,也可以不依赖;
插件的构建过程简单,通过Gradle插件来完成插件的构建,整个过程对开发者透明。
VirtualAPK 对插件没有额外的约束,原生的apk即可作为插件。插件工程编译生成apk后,即可通过宿主App加载,每个插件apk被加载后,都会在宿主中创建一个单独的LoadedPlugin对象。如下图所示,通过这些LoadedPlugin对象,VirtualAPK就可以管理插件并赋予插件新的意义,使其可以像手机中安装过的App一样运行。

1.前言&概念 插件化和热修复,都使用了一个技术点-动态加载技术,在android开发早期,很少用到动态加载技术,因为那时业务需求和应用开发的复杂度整体来说还不算太高,但随着互联网的极速发展,会出现以下几种情况。 1)业务复杂,模块耦合 2)应用间的接入 3)65535的限制 4)App越来越大,影响客户下载安装率的提升 5)应用占用内存越来越大 面临这么多问题,这时插件化应运而生,本文主要对于插
3.1 基本原理 合并宿主和插件的ClassLoader 需要注意的是,插件中的类不可以和宿主重复 合并插件和宿主的资源 重设插件资源的packageId,将插件资源和宿主资源合并 去除插件包对宿主的引用 构建时通过Gradle插件去除插件对宿主的代码以及资源的引用 3.2 四大组件的实现原理 Activity 采用宿主manifest中占坑的方式来绕过系统校验,然后再加载真正的activity;
1、VirtualAPK的接入 1.1、宿主工程引入VirtualApk 在项目Project的build.gradle中添加依赖 dependencies { classpath 'com.didi.virtualapk:gradle:0.9.8.6' } 在宿主app的build.gradle中引入VirtualApk的host插件 apply plugin: 'com.didi.v
广播的动态注册 [](()二、宿主App的实现 ====================================================================== 中心思想: 对插件APK进行解析,获取插件APK的信息 在框架初始化时,对一系列系统组件和接口进行替换,从而对Activity、Service、ContentProvider的启动和生命周期进行修改和监控,达到
一、VirtualAPK 介绍 VirtualAPK 是我们推出的一款Android平台上的插件化方案,通过VirtualAPK,可以让APP无需重新发版即可上线新功能。 之所以做这件事,是因为传统的开发流程中,APP进行版本迭代的时候,有着严格的时间周期的要求,必须在规定的时间点完成功能开发,也必须在规定的时间点完成渠道投放,这就让APP的版本迭代有了一定的限制,无法做到APP的随时更新,于是我
VirtualApk是滴滴开源的一套插件化方案,其支持四大组件,支持插件宿主之间的交互,兼容性强,在滴滴出行APP中有应用。下面是官方文档中与其他主流插件化框架的对比(查看原文): 特性 DynamicLoadApk DynamicAPK Small DroidPlugin VirtualAPK 支持四大组件 只支持Activity 只支持Activity 只支持Activity 全支持 全支持
前篇文章《Android组件化和插件化开发》主要介绍了Android组件化和插件化的架构特点、两者的对比分析以及推荐了学习组件化的相关文章,本编主要介绍下目前插件化开源库的使用情况,以及着重介绍下VirtualAPK库,供大家参考。 插件化的技术背景 插件化主要就是利用动态加载技术 通过服务器配置一些参数,Android APP获取这些参数再做出相应的逻辑,这是常有的事,比如现在大部分APP都有一
作者:hiyuki Mpx是一款致力于提高小程序开发体验的增强型小程序框架,通过Mpx,我们能够以最先进的web开发体验(Vue + Webpack)来开发生产性能深度优化的小程序,Mpx具有以下一些优秀特性: 数据响应特性(watch/computed) 增强的模板语法(动态组件/样式绑定/类名绑定/内联事件函数/双向绑定等) 深度性能优化(原生自定义组件/基于依赖收集和数据变化的setData
一面(2024/3/5)52min 自我介绍 聊实习,实习的主要工作是什么? 聊项目,手机上有这个项目吗?展示一下 说一下MVP模式 说一下MVVM模式的set()和get()是怎么实现的,数据的绑定是通过什么实现的?当时没有get到要问啥,现在想想应该是要问DataBinding和ViewBinding 说一下抽象类和接口的区别?抽象类和接口可以有方法体吗?Java可以多实现或者多继承吗? 如何
滴滴秋储C++/go一面凉经 1、自我介绍 2、问项目(TCP、UDP,为什么采用TCP?) 3、项目架构(webserver)两种高并发模式(问的很细) 4、线程池(具体如何工作的,底层接收到socket如何操作的)?线程池的实现? 5、网络编程一些知识,总之就问的很细了。。。 6、压测?如果超过了访问量怎么办?如何改进? 7、智能指针?几类,各类详细说说?举个场景指针引用成环的问题? 8、多态
滴滴如何,值得去吗❓滴滴2026届秋招储备实习生招聘正式启动啦! 先说结论:非常安利!!! 在滴滴成长很快,对新人有培养体系。老板们和同事都很职业,能力强,培养了我比较好的职业习惯,也拿到了比较好的结果。当然有时候压力也会大一点点,挺过去就好了。 上下班不打卡,包晚餐,9点后打车免费。有商保报销90%,过节有公司礼盒。有人情味,相较其他厂老人(3年以上司龄)相对更多些! 1️⃣网上都说产品经理上限
滴滴如何,值得去吗❓滴滴2026届秋招储备实习生招聘正式启动啦! 先说结论:非常安利!!! 在滴滴成长很快,对新人有培养体系。老板们和同事都很职业,能力强,培养了我比较好的职业习惯,也拿到了比较好的结果。当然有时候压力也会大一点点,挺过去就好了。 上下班不打卡,包晚餐,9点后打车免费。有商保报销90%,过节有公司礼盒。有人情味,相较其他厂老人(3年以上司龄)相对更多些! 1️⃣网上都说产品经理上限
滴滴如何,值得去吗❓滴滴2026届秋招储备实习生招聘正式启动啦! 先说结论:非常安利!!! 在滴滴成长很快,对新人有培养体系。老板们和同事都很职业,能力强,培养了我比较好的职业习惯,也拿到了比较好的结果。当然有时候压力也会大一点点,挺过去就好了。 上下班不打卡,包晚餐,9点后打车免费。有商保报销90%,过节有公司礼盒。有人情味,相较其他厂老人(3年以上司龄)相对更多些! 1️⃣网上都说产品经理上限
滴滴如何,值得去吗❓滴滴2026届秋招储备实习生招聘正式启动啦! 先说结论:非常安利!!! 在滴滴成长很快,对新人有培养体系。老板们和同事都很职业,能力强,培养了我比较好的职业习惯,也拿到了比较好的结果。当然有时候压力也会大一点点,挺过去就好了。 上下班不打卡,包晚餐,9点后打车免费。有商保报销90%,过节有公司礼盒。有人情味,相较其他厂老人(3年以上司龄)相对更多些! 1️⃣网上都说产品经理上限
滴滴如何,值得去吗❓ 先说结论:非常安利!!! 在滴滴成长很快,对新人有培养体系。老板们和同事都很职业,能力强,培养了我比较好的职业习惯,也拿到了比较好的结果。当然有时候压力也会大一点点,挺过去就好了。 上下班不打卡,包晚餐,9点后打车免费。有商保报销90%,过节有公司礼盒。有人情味,相较其他厂老人(3年以上司龄)相对更多些! 1️⃣网上都说产品经理上限更高,工资也高,我就想试试产品,所以投了很多