为什么删掉AndroidMainfest.xml里的广告java activityy之后就这样了

但是所谓的插件化就是要在不安裝新的apk的情况去修复bug或者增加新的功能增加一个新的java activityy是再正常不过的要求,所以我们就需要利用反射和动态代理去实现这一个要求

之湔分析过,要启动一个java activityy我们需要把Intent发送给AMS校验只要校验通过,才会启动java activityy因为我们无法去Hook AMS,直接修改AMS的逻辑所以我们就必须要在app端做掱脚,欺骗AMS让我们的Intent通过校验

java activityy启动过程简单总结如下:

我们的核心思路是在发送Intent给AMS之前,替换掉真正的Intent将事先已经在manifest申明的java activityy送给AMS校验。校验成功后再把真的替换回来,到达欺骗AMS的目的

首先我们如果要在任何情况下都能启动一个没有在manifest注册的java activityy,必然不能只修改java activityy的逻辑所以只能在想办法在第二步里实现我们的需求。

 
上面的代码是AMS在检查manifest前在app端走的最后一段代码所有启动java activityy的代码都会走这里,所以我们鈳以在这里hook
 
这个Stubjava activityy内部没有任何实现,作用只是用来欺骗AMS
 
之前提到的动态代理就派上用场了
我们需要取得这个实现这个接口的对象,然後生成这个对象的代理对象并用代理对象替换到原来的对象
 


mH是H类,H类是Handler的子类重写了handleMessage方法在里面处理相关逻辑。根据Handler如果设置了callback会优先调callback里的方法的特性我们可以利用反射对mH设置一个callback,那么就能在处理启动逻辑前还原intent
 

  package="/apk/res/android"这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据

  · 任何被用户看作顶层应用程序,并能被程序启动器所用的package,需要包含至少一个java activityy组件来支持MAIN操作和LAUNCHER种类如上述代码中所见。

我要回帖

更多关于 java activity 的文章

 

随机推荐