10

对于我的 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...中提到了 while com.fasterxml.jackson.coreis defined in build.gradle. 是否存在不匹配导致问题?
  • 我暂时将dependencies块移动到android块中,因为我发现其他build.gradle配置以这种方式构造。不过好像没什么区别。
4

2 回答 2

11

Gradle 和 Android 并不总是与依赖关系很好地放置(还)。跑步

 gradle clean

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

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

dexdump classes.dex | grep 'Class descriptor'

在 APK 中的 classes.dex 文件上。这将检查该类是否包含在classes.dex文件中。(有时,如果您想仔细检查发生了什么,这很有用)。

于 2013-10-09T16:02:21.660 回答
3

摇篮

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 中添加权限和依赖项,然后构建 gradle,您将获得 Object wrapper 类

于 2016-03-14T13:52:45.947 回答