问题
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 whilecom.fasterxml.jackson.core
is defined inbuild.gradle
. Is there a mismatch causing the problem? - I temporarily moved the
dependencies
block into theandroid
block since I found other build.gradle configurations structured this way. However it seems to make no difference.
回答1:
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).
回答2:
Gradle
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'
}
Add permission and dependency into you Gradle and then build gradle you will get Object wrapper class
来源:https://stackoverflow.com/questions/19245855/noclassdeffounderror-using-jackson-2-2-x-on-android-with-gradle