Android 使用fastjson找不到fastjson包问题的解决方法

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android 使用fastjson找不到fastjson包问题的解决方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

JSON解析库有很多,诸如Jackson,Json-lib,org.json,Gson和fastjson等,但是fastjson以其解析速度最快而脱颖而出。详细的测试地址如下:
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
fastjson是国内alibaba公司的wenshao开发的,项目GIT地址:
https://github.com/alibaba/fastjson

今天测试了下发现fastjson挺好用,比AndROId自带的org.json库要好用多了。当然我没有对fastjson的性能进行测试,只是因为Android自带的不太好。
在普通的java项目下,只需要导入fastjson.jar就可以,无需依赖其他包,这一点相比json-lib要好多,json-lib依赖五六个包。但是将fastjson.jar导入Android工程后,在使用时会出现 java.lang.NoClassDefFoundError:can't find com.alibaba.fastjson.JSON等错误消息。

初步认为是与Android自带的org.json冲突。于是Build Path->configure Build Path->Order And export下将fastjson.jar上调至Android xx.jar上(xx为android 版本号)。再运行工程,这个错误不再出现了,奇迹般的没问题了。

然后现在再调整fastjson.jar和Android.jar顺序也不会出现can't not find com.alibaba.fastjson的错误,不知道为何,继续看。

文章Java虚拟机类加载顺序讲解了java 虚拟机加载class和jar包的顺序。
bootstrap classloader ->extension classloader->System classloader
其中bootstrap引导类加载器;
extension classloader扩展类加载器,它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的类包;
system classloader系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性或者 CLASSPATH操作系统属性所指定的JAR类包和类路径.
该文中还有一句话是这么说的,应该能解决我们的疑惑:

“此外类加载还采用了cache机制,也就是如果 cache中保存了这个Class就直接返回它,如果没有才从文件中读取和转换成Class,并存入cache,这就是为什么我们修改了Class但是必须重新启动JVM才能生效原因。”

我想应该是Android虚拟机中已经有了fastjson的cache了,所以导致如何更改项目的fastjson.jar和Android.jar顺序都不会有任何反应。我的理解是这样,不知道对不对,欢迎大侠指正。

解释到这里,也解决了我另外一个疑问,就是在Android的工程中新建一个java类,并生成main方法,然后Run->Java Application. 结果会出现如下的错误:

# # A fatal error has been detected by the Java Runtime environment: # #  Internal Error (classFileParser.cpp:3494), pid=5940, tid=5632 #  Error: ShouldNotReachHere() 

这个问题的产生就是和bootstrap classloard 有关了,文件上右键Run As->Run Configuration选择Java Application下的这个Java类,然后选择右侧的Classpath标签页下有两个目录,分别是Bootstrap Entries 和 User Entries。
Android工程中Bootsrap下默认的是Android Classpath Container,而Java则应该是JRE System Library。所以按照该文Error: ShouldNotReachHere()的解决方法,更改就好了。

脚本宝典总结

以上是脚本宝典为你收集整理的Android 使用fastjson找不到fastjson包问题的解决方法全部内容,希望文章能够帮你解决Android 使用fastjson找不到fastjson包问题的解决方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

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