2010-05-04 7 views
1

J'ai développé une application qui a plusieurs paquets dans son projet ... Une classe dans un de ces paquets est appelée tout de suite dans la première ligne de code, ce qui jette l'erreur redoutée java.lang.NoClassDefFoundError ... Je ne comprends pas, le paquet est tout simplement dans le projet, et il fonctionne très bien sur mon appareil Android 1.6, mais ne fonctionnera pas avec mon périphérique 1.5 .. Je dois dire que le projet a été initialement défini pour 1.6, mais j'ai ensuite changé le dans le manifeste de 4 à 3 ... Est-ce une mauvaise pratique? Ou peut-être que cela n'a rien à voir avec la version de la plateforme?java.lang.NoClassDefFoundError lancé avec mes propres paquets dans Android 1.5

Aussi je reçois ces lignes comme wel du DDMS:

05-04 17:24:59.921: WARN/dalvikvm(2041): VFY: unable to resolve static field 2 (MANUFACTURER) in Landroid/os/Build; 
05-04 17:24:59.921: WARN/dalvikvm(2041): VFY: rejecting opcode 0x62 at 0x0034 
05-04 17:24:59.921: WARN/dalvikvm(2041): VFY: rejected ***/android/managementModule/Management;.getDeviceSpecifics()V 
05-04 17:24:59.921: WARN/dalvikvm(2041): Verifier rejected class ***/android/managementModule/Management; 

Cest le ManagementModule qui tente également de récupérer plusieurs informations des champs de l'appareil lui-même ... Encore une fois, cela fonctionne très bien sur le dispositif 1.6, même s'il s'agit d'un périphérique de développement alors que mon périphérique 1.5 est un périphérique sans développement ...

+1

Pour des raisons de compatibilité ascendante: http://android-developers.blogspot.com/2009/04/backward-compatibility-for-android.html. Si c'est juste ce seul champ, utilisez la réflexion. – fadden

Répondre

1

Le vérificateur n'a pas beaucoup changé entre 1,5 et 1,6, il devrait donc être tout aussi heureux ou malheureux sur chacun. (On> = 2.0, il lancerait un NoSuchFieldError au moment où le champ est utilisé au lieu de rejeter la classe entière.)

Le problème semble être que le champ Build.MANUFACTURER n'existait pas dans Android 1.5 ("Cupcake"). Je crois qu'il a été introduit en 1.6 ("Donut").

+0

merci j'ai vérifié la documentation et vous avez raison, il n'a pas été pris en charge sur 1.5 encore je dois trouver un moyen de rendre compatible vers l'arrière – TiGer

Questions connexes