NoClassDefFoundError с помощью Jackson 2.2.x на Android с Gradle
Для моего Android-проекта я настроил Gradle с Jackson 2.2.x следующим образом:
// 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
, так как я нашел другие конфигурации build.gradle
, структурированные таким образом. Однако, похоже, это не имеет никакого значения.
Ответы
Ответ 1
Gradle и Android не всегда хорошо сочетаются с зависимостями (пока). Выполнение
gradle clean
кажется, устраняет большинство проблем для меня.
Примечание. Если это не сработало, вы можете запустить
dexdump classes.dex | grep 'Class descriptor'
в файле classes.dex в APK. Это проверит, будет ли класс включен в файл classes.dex
. (Иногда это полезно, если вы хотите дважды проверить, что происходит).
Ответ 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'
}
Добавьте в вас разрешение и зависимость Gradle, а затем постройте Gradle, вы получите класс обертки объекта