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.