NoClassDefFoundError在Android上使用Jackson 2.2.x和Gradle

对于我的Android项目,我使用Jackson 2.2.x设置Gradle,如下所示:

// build.gradle buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.+' } } apply plugin: 'android' repositories { mavenCentral() } android { compileSdkVersion 18 buildToolsVersion "18.1.0" defaultConfig { minSdkVersion 8 targetSdkVersion 18 } } dependencies { compile 'com.android.support:appcompat-v7:18.0.0' compile 'com.android.support:support-v4:18.0.0' compile 'com.google.android.gms:play-services:3.1.36' compile 'com.fasterxml.jackson.core:jackson-databind:2.2.+' compile 'com.fasterxml.jackson.core:jackson-core:2.2.+' compile 'com.fasterxml.jackson.core:jackson-annotations:2.2.+' } 

我简单地在这里使用ObjectMapper

 import com.fasterxml.jackson.databind.ObjectMapper; // ... ObjectMapper objectMapper = new ObjectMapper(); try { Content content = objectMapper.readValue(inputStream, Content.class); } catch (IOException e) { e.printStackTrace(); } 

当我运行gradle installDebug并启动应用程序的相关部分时,它会崩溃:

java.lang.NoClassDefFoundError:com.fasterxml.jackson.databind.ObjectMapper


思考:

  • 我注意到,在错误消息com.fasterxml.jackson...被提到,而com.fasterxml.jackson.core定义在build.gradle 。 是否有导致问题的不匹配?
  • 我暂时将dependencies块移到了android块,因为我发现其他的build.gradleconfiguration这样的结构。 但是,这似乎没有什么区别。

Solutions Collecting From Web of "NoClassDefFoundError在Android上使用Jackson 2.2.x和Gradle"

Gradle和Android并不总是很好地依赖(依然)。 运行

  gradle clean 

似乎为我解决了大多数问题。

注意:如果这不起作用,您可以运行

 dexdump classes.dex | grep 'Class descriptor' 

在APK中的classes.dex文件上。 这将检查该类是否包含在classes.dex文件中。 (有时如果你想仔细检查是怎么回事,这很有用)。

摇篮

 apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.app.test" minSdkVersion 9 targetSdkVersion 22 versionCode 4 versionName "1.3" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:22.2.0' `enter code here` compile 'com.fasterxml.jackson.core:jackson-databind :2.5.3' } 

添加权限和依赖到你的Gradle,然后构buildgradle你将得到对象包装类