基于类装载器设计一种“插件”架构(二)

xiaoxiao2021-02-28  130

基于类装载器设计一种“插件”架构

仍以上一节内容DexClassLoader(一)为例,可以使用如下一种方式

步骤:

1.首先在plugin工程中定义一个interface接口,interface仅仅定义函数的输入和输出,却不定义具体的实现,而让PluginClass实现之。

public interface Comm { public int function1(int a,int b); }

2.interface类一方面存在于Plugin中,另外我们再拷贝一份Host(宿主)工程的src中。如图: 然后修改上次MainActivity中的代码,将加载dex文件中的PluginClass中的类直接强制转换成Comm。

Class<?> clazz =classLoader.loadClass(packageName+".PluginClass"); Comm obj = (Comm)clazz.newInstance(); int ret = obj.function1(12, 34); Log.i("计算结果:", ret+""); 这样运行程序会出现问题 06-06 11:16:09.525: E/AndroidRuntime(1698): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation 原因是外部的jar作为程序的一部分被打包成最终的程序文件中,生成验证码不同的类文件。

3.这时候我们可以把我们在Host(宿主)工程中的PluginClass通过开发工具生成一个plugin.jar,把这个jar包拷贝至Plugin工程中的libs中,我们需要通过导入内部jar包的方式把plugin.jar导入到Plugin工程中。导入过程如下: 做好之后


4 重新运行 Plugin Host OK!

转载请注明原文地址: https://www.6miu.com/read-23218.html

最新回复(0)