NoClassDefFoundError在带有Gradle的Android上使用Jackson 2.2.x

NoClassDefFoundError在带有Gradle的Android上使用Jackson 2.2.x,android,json,jackson,gradle,build.gradle,Android,Json,Jackson,Gradle,Build.gradle,对于我的Android项目,我使用以下方法设置Gradle: // build.gradle buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.+' } } apply plugin: 'android' repositories { mavenCentral(

对于我的Android项目,我使用以下方法设置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
    块中,因为我是这样构造的。然而,这似乎没有什么区别

Gradle和Android并不总是能够很好地处理依赖关系。运行

 gradle clean
似乎为我解决了大部分问题

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

dexdump classes.dex | grep 'Class descriptor'
在APK中的classes.dex文件上。这将检查类是否包含在
classes.dex
文件中。(有时候,如果你想仔细检查发生了什么,这很有用)。

Gradle
将权限和依赖项添加到Gradle中,然后构建Gradle您将获得对象包装器类

您能否解压缩APK并运行
dextump classes.dex | grep“class descriptor”
并查看Lcom/fasterxml/jackson/databind/ObjectMapper?@Ethan No,
Foobar debug unaligned.apk的
ObjectMapper
类中不包含
ObjectMapper
的类描述符。能否执行
gradle clean installDebug
,查看是否失败,是否发布
gradle依赖项的输出
@Ethan同时发现了相同的提示。运行
gradle clean
是问题的解决方案。请将您的评论摘录到答案中。也许可以合并这两个评论,因为它们都很有用!很高兴听你这么说。注释摘录。+1表示干净,几天前由于gradle未正确评估情况,测试失败时收到类似问题。清洁FTW
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'

}