1、替换 (把系统的 替换成 动态代理)
2、动态代理 (添加自己的业务逻辑)
1、在执行startActivity前Hook AMS将TragetActivity替换成有效的ProxyActivity,绕过AMS检查
2、ASM检查后,要把ProxyActivity换成TragetActivity
实现步骤:
第一步:找到宿主dexElements得到此对象 PathClassLoader代表是宿主
第二步:找到插件dexElements 得到此对象,DexClassLoader--代表插件
第三步:创建出新的newDexElements []. 类型必须是Element,必须是数组对象
第四步:宿主dexElements + 插件dexElements → 融合新的newDexElements for遍历
第五步:把新的newDexElements.设置到宿主中去。
以上操作,就可以去加载插件里面的class
缺点:
不稳定,兼容性存在问题,同时当插件越来越多之后,内存中新融合的 DexElements 就会越来越大。
可以弥补方式一的缺点
思路:
PathClassLoader加载宿主的class;
自定义ClassLoader加载插件的class。