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!