NoClassDefFoundError using Jackson 2.2.x on Android with Gradle

android, build.gradle, gradle, jackson, json

Solution

Gradle and Android don't always place nicely with dependencies(yet). Running

 gradle clean

seems to fix most problems for me.

Note: If that didn't work, you can run

dexdump classes.dex | grep 'Class descriptor'

on the classes.dex file in the APK. That will check to see if the class is included in the `classes.dex` file. (Sometimes it's useful if you want to double check whats going on).

Problem

For my Android project I set up Gradle with Jackson 2.2.x as follows: ``` // 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.+' } ``` I simply use the `ObjectMapper` here: ``` import com.fasterxml.jackson.databind.ObjectMapper; // ... ObjectMapper objectMapper = new ObjectMapper(); try { Content content = objectMapper.readValue(inputStream, Content.class); } catch (IOException e) { e.printStackTrace(); } ``` When I run `gradle installDebug` and launch the relevant part of the application it crashes: java.lang.NoClassDefFoundError: com.fasterxml.jackson.databind.ObjectMapper Thoughts: - I noticed that in the error message `com.fasterxml.jackson...` is mentioned while `com.fasterxml.jackson.core` is defined in `build.gradle`. Is there a mismatch causing the problem? - I temporarily moved the `dependencies` block into the `android` block since I found other `build.gradle` configurations structured this way. However it seems to make no difference.

Original source

Related problems