Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 链接到外部JAR库时使用DexClassLoader的反射大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为 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的反射所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。