NoClassDefFoundError mit Jackson 2.2.x auf Android mit Gradle

Für mein Android Projekt einrichten ich Gradle mit Jackson 2.2.x wie folgt:

//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.+'
}

Ich einfach die ObjectMapper hier:

import com.fasterxml.jackson.databind.ObjectMapper;

//...

ObjectMapper objectMapper = new ObjectMapper();
try {
    Content content = objectMapper.readValue(inputStream, Content.class);
} catch (IOException e) {
    e.printStackTrace();
}

Wenn ich gradle installDebug und starten Sie den relevanten Teil der Anwendung stürzt es ab:

java.lang.NoClassDefFoundError: com.fasterxml.jackson.databind-Methode.ObjectMapper


Gedanken:

  • Ich bemerkt, dass in der Fehlermeldung com.fasterxml.jackson... erwähnt wird, während com.fasterxml.jackson.core definiert ist, in build.gradle. Ist es ein Konflikt, der das problem verursacht?
  • Ich zog vorübergehend die dependencies - block in den android block, da ich gefunden anderen build.gradle - Konfigurationen strukturiert auf diese Weise. Aber es scheint keinen Unterschied zu machen.
  • Können Sie entpacken die APK und führen Sie dexdump classes.dex | grep 'Class descriptor' und sehen, ob Lcom/fasterxml/jackson/databind/ObjectMapper ?
  • Nein, der klassendeskriptor für ObjectMapper ist nicht enthalten in der classes.dex von Foobar-debug-unaligned.apk.
  • können Sie eine gradle clean installDebug finden Sie unter wenn das nicht funktioniert, wenn es funktioniert poste die Ausgabe von gradle dependencies
  • Fand den gleichen Hinweis hier, gleichzeitig. Läuft gradle clean ist die Lösung des Problems. Entnehmen Sie bitte Ihren Kommentar in eine Antwort. Vielleicht kombinieren Sie die beiden Kommentare da waren beide hilfreich!!!
  • gut zu hören, dass für Sie gearbeitet. Kommentare extrahiert.
  • Genial. Nochmals vielen Dank. Dies war gegessen, eine Menge meiner Zeit. Haben eine schöne Woche.
  • Ich habe einige Gedanken zu deinen Gedanken. Gradle wird Sie in irgendeine Abhängigkeit benötigt, die durch Ihre definierten Abhängigkeiten. Sie können dies durch ausführen gradle dependencies. Die top-Ebene des Diagramms Ihre Abhängigkeiten definiert sind, etwas niedriger, (eingerückt) sind die 'transiente' Abhängigkeiten. Es gibt drei Phasen für den Aufbau der gradle-Skript. Hier der Link: gradle.org/docs/current/userguide/build_lifecycle.html

InformationsquelleAutor JJD | 2013-10-08
Schreibe einen Kommentar