
---【VirtualAPK框架分析】
文章平均质量分 87
Achillisjack
这个作者很懒,什么都没留下…
展开
-
Resources Hook
8, Resources Hook由于资源做过分区,则在Android L后直接将插件包的apk地址 addAssetPath 之后就可以使用该插件的资源。LoadedPlugin的createResources方法如下,Resources resources = new ResourcesManager().createResources(context, apk.getAbsolu原创 2017-08-02 20:36:50 · 831 阅读 · 0 评论 -
BroadcastReceiver Hook
6,BroadcastReceiver HookBroadcastReceiver过程在插件加载时论述过,并且在插件加载的过程中完成。LoadedPlugin的构造方法中有关BroadcastReceiver方法如下,Map receivers = new HashMap();for (PackageParser.Activity receiver : this.mPackage.r原创 2017-08-02 20:31:48 · 934 阅读 · 0 评论 -
ContentProvider Hook解析
5, ContentProvider Hook解析ContentProvider和service一样,也是通过代理分发机制进行Hook,并且比service更简单,没有周期的处理,只有几个简单的方法,例如, query/insert/delete/update等,在AndroidManifest中注册了一个多进程的ContentProvider,<provider andro原创 2017-08-02 20:31:23 · 2267 阅读 · 0 评论 -
Service Hook解析
4,Service Hook解析Service/ContentProvider由于没有Activity那么复杂的启动过程,并且Activity的生命周期是由用户交互决定的,而Service的声明周期是主动通过代码调用的。因此虽然也有替换/还原过程,但是有点不同,是采用代理分发技术。就是启动宿主的Service/ContentProvider对象,然后管理插件的Service/Conte原创 2017-08-02 20:23:30 · 2617 阅读 · 0 评论 -
Activity Hook解析
3, Activity Hook解析VirtualAPK框架中的Activity Hook主要包括以下步骤:1,穿马甲(替换)过程2,脱马甲(还原)为什么有这些过程,因为组件需要在AndroidManifest中注册的,而插件apk中的组件是不可能预先知晓名字,提前注册中宿主apk中的,所以首先替换成在AndroidManifest中注册的组件,在system_server进程原创 2017-08-02 20:15:22 · 1152 阅读 · 0 评论 -
插件加载
2,插件加载插件加载调用的是PluginManager的loadPlugin方法,该方法主要逻辑如下,1,利用LoadedPlugin来解析和加载插件LoadedPlugin plugin = LoadedPlugin.create(this, this.mContext, apk);2,将插件的包名和LoadedPlugin对象放入哈希表mPlugins中,this.mPlu原创 2017-08-02 20:04:18 · 907 阅读 · 0 评论 -
PluginManager分析
1, PluginManagerPluginManager框架的初始化以及插件的加载都在PluginManager中, PluginManager的getInstance方法调用流程图如下,PluginManager的getInstance方法如下,public static PluginManager getInstance(Context base) {原创 2017-08-02 19:55:09 · 3972 阅读 · 0 评论 -
VirtualAPK 框架简介
前言: VirtualAPK是滴滴出行自研的一款优秀的插件化框架,主要有如下几个特性:1, 功能完备支持几乎所有的Android特性;2,四大组件四大组件均不需要在宿主manifest中预注册,每个组件都有完整的生命周期。Activity:支持显示和隐式调用,支持Activity的theme和LaunchMode,支持透明主题;Service:支持显示和隐式调用,原创 2017-08-02 19:50:25 · 3963 阅读 · 0 评论