我差不多完成了我的第一个真正的Android项目,一个出租车订购应用程序,只留下了一些小的可用性问题。对于未来的版本,我们计划实现内置的编程代码和资源的自动更新,就像一些好的程序一样。我设法运行了一个基于http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html,How to load a Java class dynamically on android/dalvik?和Is it possible to dynamically load a library at runtime from an Android application?的简单示例。我不会在这里发布完整的代码,它看起来很像上面的链接。 Main apk充当启动器,它从SD卡加载一个jar文件,从那里加载一个特殊的类,实例化一个obect并通过Java Reflect API调用它的方法,这只会调出ab AlertDialog。
但我希望能够在启动器和加载库中使用通用基础Java接口,充当API。所以我试图在启动器和库中声明一个名为Problem的接口。代码是这样的:
Class<?> problemClass = cl.loadClass("ru.homez.euler.Problem1");
Problem problem = (Problem)problemClass.newInstance();
problem.solve(this);
Dalvik VM不喜欢这个,我得
java.lang.IllegalAccessError:已解析的预验证类中的类ref 意外实施
我认为这是因为问题界面在启动器和库中定义,我在这里看到了类似的问题。怎么处理这个?
答案 0 :(得分:2)
我很幸运能找到这个:https://stackoverflow.com/questions/10698049/how-to-dynamically-load-a-jar-with-common-abstract-class。我从库jar中删除了接口,在加载器中我将其可用性更改为public(库类加载器没有看到用apk加载的包可用类)!问题解决了!