2011-11-07 3 views
2

Je suis confronté à une situation bizarre où la classe est définitivement sur le chemin de classe de mon application Android, mais je continue à obtenir des exceptions NoClassDefFoundError.NoClassDefFoundError sur android - une situation très bizarre?

J'ai vérifié que la classe existe bel et bien à travers cet extrait de code:

try{ 
    Field dexField = PathClassLoader.class.getDeclaredField("mDexs"); 
    dexField.setAccessible(true); 

    PathClassLoader classLoader = 
    (PathClassLoader)Thread.currentThread().getContextClassLoader(); 
    Log.d("OUT", "Class loader" + classLoader.getClass().getName()); 

    DexFile[] dexs = (DexFile[]) dexField.get(classLoader); 

    Log.d("OUT", "Enumerating"); 
    for (DexFile dex : dexs) { 
    Enumeration<String> entries = dex.entries(); 
    while (entries.hasMoreElements()) { 
    // (3) Each entry is a class name, like "foo.bar.MyClass" 
    String entry = entries.nextElement(); 
    Log.d("OUT", "Entry: " + entry); 
    } 
    } 
}catch(Throwable e){ 
    Log.e("OUT", e.getMessage(), e); 
} 
// Here I reference to the problematic class 

Lorsque vous exécutez l'application sur un périphérique le journal n'imprime le nom de classe, et jette l'erreur NoClassDefFoundError lors de l'accès à elle.

Je suis perdu (e) ici.

Un conseil? Je serais très reconnaissant. Merci.

+0

Stack trace/nom de classe? –

Répondre

4

Vous devez comprendre que, au moins en Java canonique, "NoClassDefFoundError" ne signifie pas que le fichier .class nommé n'a pas pu être trouvé dans le classpath. Au contraire, après avoir été localisé, un problème empêchait le chargement de la classe. Deux raisons communes à cela sont un problème de dénomination (la classe dans le mauvais emplacement dans la structure de classpath, par rapport à son nom de package déclaré en interne, ou simplement mal nommé), ou un problème de chargement d'une autre classe de la classe nommée. Parfois, le problème est dû à une exception dans l'initialiseur statique de la classe.

+1

Juste trouvé la raison. J'ai deux projets un est un projet de bibliothèque qui est référencé du projet principal. Bien que le projet de bibliothèque ait tous les fichiers jar nécessaires et compile sans erreurs, les fichiers jar ne sont pas exportés dans le fichier apk même si l'éclipse est explicitement définie pour exporter toutes les ressources. J'ai donc dû inclure les fichiers jar dans l'application principale et inclure les pots dans le classpath. Je pense que logiquement tous les jars dépendants devraient être portés de l'application de la bibliothèque dans l'application principale, mais apparemment ce n'est pas le cas. –

Questions connexes