关于这个方法其实很简单,他有两个参数:
第一个参数:需要构造出来Context的包名字符串
第二个参数:构造出来的Context的开启模式
下面我们可以直接使用一个例子来看看效果:
首先我们弄一个插件工程:ShareUserIdPlugin
这个工程很简单,我们编译安装运行即可。
在弄一个宿主工程:ShareUserIdHost
这里有一个核心方法,我们首先通过插件工程的包名:cn.wjdiankong.shareuseridplugin;创建出一个Context对象。
这里看到第二参数有两个模式:
Context.CONTEXT_INCLUDE_CODE:这个标志是在我们需要执行插件中的某段代码需要加上的值。
CONTEXT_IGNORE_SECURITY:这个标志是必须的,是忽视安全性,如果没有这个值的话,那么我们访问什么都是失败的。
得到了Context变量之后,我们下面就可以通过反射来执行代码和获取资源了,这里需要注意的是,一定要先拿到Context对应的ClassLoader,然后才能加载对应的类,ClassLoader一定是Context的,是插件工程中的类加载器。
下面我们运行结果看看:
运行成功了啦~~是不是很简单呢。
下面如果我们把CONTEXT_INCLUDE_CODE去掉,在运行:
发现报错了,找不到指定的类。所以如果想运行代码的话,这个值一定要加上。
我们再把CONTEXT_IGNORE_SECURITY去掉,运行结果:
看到了,爆出了安全错误,所以要想构造成功Context出来,必须要加上这个值。
===================================================================
好了,到这里我们就介绍了如何通过包名构造一个Context变量出来,然后执行对应的代码和获取资源。那么这个我们看到工程中貌似没有用到shareU