android中使用net.sf.json

android中自带的json使用起来不是很方便,想使用net.sf.json,结果运行的时候又发现有异常:java.lang.VerifyError: net/sf/json/JSONObject

经过各种搜索,发现原来是我们使用的json-lib-2.4-jdk15.jar包要引用其他的几个jar包,这就表示想使用net.sf.json还不能只是简单的加一个jar包

参考官网配置:http://json-lib.sourceforge.net/index.html

所有需要的jar包如下

commons-beanutils-1.8.0.jar

commons-collections-3.2.1.jar

commons-lang-2.5.jar

commons-logging-1.1.1.jar

ezmorph-1.0.6.jar

json-lib-2.4-jdk15.jar

 

配好以上jar包后还不够,编译的时候会报冲突错误:multiple dex files define Lorg/apache/commons/collections/Buffer

发现commons-beanutils-1.8.0.jar包中有和commons-collections-3.2.1.jar冲突的类,但是本人又想使用commons-collections-3.2.1.jar包

方法一(简单粗暴):直接把commons-beanutils-1.8.0.jar中的org/apache/commons/collections目录和目录下的class直接删掉(用解压缩工具打开,直接删除操作),这样再编译就不会报错了

方法二:

首先修改Gradle配置文件,启用MultiDex并包含MultiDex支持:

defaultConfig {
        multiDexEnabled true
   }
dependencies { compile 'com.android.support:multidex:1.0.1' } 

 (我到这一步就好用了,但是要是还不行就得继续)

然后让应用支持多DEX文件。在MultiDexApplication JavaDoc中描述了三种可选方法:

1、在AndroidManifest.xml的application中声明android.support.multidex.MultiDexApplication;
2、如果你已经有自己的Application类,让其继承MultiDexApplication;
3、如果你的Application类已经继承自其它类,你不想修改它,那么可以重写attachBaseContext()方法:

@Override   
protected void attachBaseContext(Context base) {  
    super.attachBaseContext(base); MultiDex.install(this);  
}  

 最后运行就可以了,也可能打包了,这个问题貌似是工程中的方法数量超过安卓规定65536个方法数了

猜你喜欢

转载自ch-kexin.iteye.com/blog/2396672