今天我们来看下四大金刚之一的另外一个Sevice。
他和Activity一样,也需要提前占坑,然后HOOK才可以使用。
就让我们来看性下整个过程会涉及到的过程,顺便温习下Service的启动流程吧。
源码探索系列30---插件包PackageManagerService/PMS
PMS主要管理了手机上的所有APK,可提供一些例如安装与卸载,查询包的信息(如我们在AndroidManifest.xml写的内容),清数据等功能。
做插件化,想欺骗系统不让他们知道我们悄悄安装多了个APP,对PMS做点手脚当然不可避免的啊,今天就让我们来看下他在插件化过程担当的角色和作用吧!
源码探索系列29---插件化基础之启动插件的Activity
昨天的那篇简答的描述了如何利用HOOK来劫持Intent事件,从何来控制关于Activity的开启,
在这个基础上,我们需要来看下怎么开启我们的插件中的Activity
源码探索系列28---插件化基础之代理Hook
代理有两种,一种是常见的静态代理模型,这个在设计模式系列2—幕后黑手的代理模式就有写过,他可以让我们在调用实际的api时做一些别的工作,从而达到某种程度的AOP效果。
但当时并没有提到动态代理的概念,因为目前自己的开发需要用到的场景偏少。不过在DroidPlugin里面就很多,因为他需要hook很多的内容。
源码探索系列27---插件化基础之类加载器DexClassLoader
Java有个概念叫做类加载器
(ClassLoader),它的作用就是动态的装载Class文件
。借助ClassLoader
这个类我们可以装载任何我们想要的Class文件,只需提供路径即可。
像下面这样:
Class.forName("OurClassName");
啊!这是反射,嗯!应该是下面这样
ClassLoader.loadClass("OurClassName")
等等!
这Java不是可以import就可以了吗,为何还要这个类加载器?
因为用import的话得类文件必须在本地且编译的时候必须有这个类文件,否则报错。若想让程序在运行的时候动态调用怎么办呢?显然import不合要求,他已经写死的了,所以我们需要ClassLoader来做这件事。
利用它来加载Class文件到JVM,以供程序使用。
这也是我们能够通过加载补丁包来修复紧急的bug的一个基础
反射和这个类加载有什么关系嘛?后面再讲