Android动态加载系列——非Hook方案下的插件启动acti

2019-09-30  本文已影响0人  Ex_Joe

现状

基于上述可安装的插件化方案,跳转Activity由于android底层机制限制,是需要在宿主中的AndroidManifest.xml 注册该Activity。但插件化宿主无法预先知道插件需要使用到的Activity并提前注册,所以位于插件的Activity是无法被直接使用的。但恰恰Activity属于日常开发中最最常用的视图容器类,因此咱们还是需要兼容插件模式下的Activity调用。

方案设计

着眼于突破底层限制,首先了解Activity启动流程,ActivityThread中总线Instrumentation.execStartActivity 为启动Activity的入口,一系列对待跳转的Activity的判断逻辑都在里面,这里是很好的一个hook点。总体而言是可以新增代理类InstrumentationProxy重写execStartActivity方法干一些有趣的事情_

首先在宿主AndroidManifest.xml中注册一个代理Activity,插件启动Activity时首先调起代理Activity,再通过ClassLoader加载并调用插件Activity的实现方法,模拟Activity启动及生命周期的整个过程。

本次介绍的是代理Activity方案,减少对系统SDK的侵入性。

实现篇:

示例代码:

接口类.png

示例代码:

代理类.png
上一篇 下一篇

猜你喜欢

热点阅读