欢迎使用CSDN-markdown编辑器
来源:互联网 发布:安宫教务网络管理系统 编辑:程序博客网 时间:2024/06/05 07:14
基于类装载器设计一种“插件”架构
仍以上一节内容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!
阅读全文
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 学习笔记——JAVA线程<7>线程的总结
- 面向对象的三大特征
- Python 装饰器
- 逆向最大匹配分词RMM
- java实现生产者消费者问题
- 欢迎使用CSDN-markdown编辑器
- SQLlite新建数据库
- 使用EA画类图
- div模拟textarea
- java守护线程见解
- Thymeleaf+Spring+Maven MacOS
- UIKit之UILabel
- 牛客2017.6.06直播记录(一部分)
- Linux下的iscsi配置