android – 链接到外部JAR库时使用DexClassLoader的反射

android – 链接到外部JAR库时使用DexClassLoader的反射,第1张

概述我正在尝试为 Android应用程序整合插件架构.我有一个宿主应用程序,它将检查apk“插件”文件的目录,将它们加载到DexClassLoader中,并调用一个方法来获取DerivedLibraryObjects数组. 我认为问题在于DerivedLibraryObject扩展了包含在外部JAR库中的基类.所以主机和插件都引用了这个JAR.当我尝试获取DerivedLibraryObjects数组 我正在尝试为 Android应用程序整合插件架构.我有一个宿主应用程序,它将检查apk“插件”文件的目录,将它们加载到DexClassLoader中,并调用一个方法来获取DerivedlibraryObjects数组.

我认为问题在于DerivedlibraryObject扩展了包含在外部JAR库中的基类.所以主机和插件都引用了这个JAR.当我尝试获取DerivedlibraryObjects数组时,我得到以下异常:

04-01 14:26:57.996: ERROR/AndroIDRuntime(23386): java.lang.IllegalAccessError: Class ref in pre-verifIEd class resolved to unexpected implementation

从我收集的内容来看,这意味着插件中的对象与主机中的对象不匹配.但是,主机和插件应用程序都链接到同一个完整jar文件的副本.如果我返回一个只是扩展Object的对象,那么代码工作正常,但是一旦我开始处理DerivedlibraryObject,它就会抛出这个错误.

有没有人有什么建议?

解决方法 我可以回答我自己的问题 – 问题是主机和插件都包含外部jar库,所以当类加载器发现同一个类有两个版本时,它就会失败.

你可以做的是通过编译所有类文件来手动构建你的插件(我让Eclipse这样做),然后使用dex构建一个jar / apk:

dx --dex --output=<outputdir>\plugin.jar <projectpath>\bin\

projectpath是你的androID项目的根.当您进入bin目录时,应该找到您的类文件.

如果有人可以发布一个蚂蚁脚本来执行此 *** 作,那么添加到此问题将是一件好事.

总结

以上是内存溢出为你收集整理的android – 链接到外部JAR库时使用DexClassLoader的反射全部内容,希望文章能够帮你解决android – 链接到外部JAR库时使用DexClassLoader的反射所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1128305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存