我想在我的例子JadeAndroid.jar中加载使用外部库编译的Android中的类(使用dexClassLoader)。这个类(dex)在包含所有JadeAndroid类的jar中被导出(我使用ant脚本)。我的课程扩展了玉类行为。当我打开这个类我有一个例外:使用dexclassloader编译外部库的Android加载类
09-03 21:53:05.319: W/dalvikvm(23201): Class resolved by unexpected DEX:Lcom/example/dex/lib/LibraryProvider;(0x40d80838):0x411aa8 ref[Ljade/core/behaviours/Behaviour;] Ljade/core/behaviours/Behaviour;(0x40d81d18):0x419158
09-03 21:53:05.319: W/dalvikvm(23201): (Lcom/example/dex/lib/LibraryProvider; had used a different Ljade/core/behaviours/Behaviour; during pre-verification)
09-03 21:53:05.319: W/dalvikvm(23201): Unable to resolve superclass of Lcom/example/dex/lib/LibraryProvider; (337)
09-03 21:53:05.319: W/dalvikvm(23201): Link of class 'Lcom/example/dex/lib/LibraryProvider;' failed
09-03 21:53:05.319: W/System.err(23201): *** Uncaught Exception for agent buyer1 ***
09-03 21:53:05.319: W/System.err(23201): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
09-03 21:53:05.319: W/System.err(23201): at dalvik.system.DexFile.defineClass(Native Method)
09-03 21:53:05.329: W/System.err(23201): at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:195)
09-03 21:53:05.329: W/System.err(23201): at dalvik.system.DexPathList.findClass(DexPathList.java:315)
09-03 21:53:05.329: W/System.err(23201): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:58)
09-03 21:53:05.329: W/System.err(23201): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
09-03 21:53:05.329: W/System.err(23201): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
09-03 21:53:05.329: W/System.err(23201): at pl.edu.kosttek.jadebook.agent.AgentBuyerLoader$GetJarBehaviour.getBehaviour(AgentBuyerLoader.java:227)
09-03 21:53:05.329: W/System.err(23201): at pl.edu.kosttek.jadebook.agent.AgentBuyerLoader$GetJarBehaviour.action(AgentBuyerLoader.java:166)
09-03 21:53:05.329: W/System.err(23201): at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:344)
09-03 21:53:05.329: W/System.err(23201): at jade.core.Agent$ActiveLifeCycle.execute(Agent.java:1532)
09-03 21:53:05.329: W/System.err(23201): at jade.core.Agent.run(Agent.java:1471)
09-03 21:53:05.329: W/System.err(23201): at java.lang.Thread.run(Thread.java:864)
我如何编译我的类的jar:
把JadeAndroid.jarto libs文件夹
它创建DEX使用Ant脚本和把它放入罐子里
可以排除这个AndroidJade类吗?
也许这是不是解决你的问题,但要确保父类加载器你提供给DexClassLoader()来自context.getClassLoader()和*不*从ClassLoader.getSystemClassLoader() 。我愚蠢地浪费了一个小时。 – eocanha