gpt4 book ai didi

使用 dexclassloader 使用外部库编译的 Android 加载类

转载 作者:行者123 更新时间:2023-11-29 02:01:51 25 4
gpt4 key购买 nike

我想在我的案例 JadeAndroid.jar 中加载使用外部库编译的 Android 类(使用 dexClassLoader)。此类 (dex) 在 jar 中导出(我正在使用 ant 脚本),其中还包含所有 JadeAndroid 类。我的类(class)扩展了 jade 类(class)行为。当我加载此类时出现异常:

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:

  1. 将JadeAndroid.jar放到libs文件夹

  2. 使用 ant 脚本创建 dex 并将其放入 jar

可以排除这个 AndroidJade 类吗?

最佳答案

我认为问题在于您在 Jar 中有 Jade 类,并且相同的 Jade 文件已经在您的类加载器中,这对 JVM 具有误导性。

也许您可以尝试编译 JAR,但不向其中编译 Jade 类?所以只包含它进行编译,但它们不会出现在 JAR 中?在这种情况下,您在加载类时不会遇到任何问题,并且可以实现目标。

Upd:如果你是用Android方式编译Jar,那么我会建议链接Jade编译,但不要放到libs/文件夹下。它将阻止它被编译到 jar 中。

祝你好运

关于使用 dexclassloader 使用外部库编译的 Android 加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com