2010-03-16 11 views
7

Eventuali duplicati:
NoClassDefFoundError - Eclipse and AndroidApproccio per correggere NoClassDefFoundError?

sto vedendo questa domanda è sempre chiesto un sacco in molti contesti differenti. Forse possiamo impostare alcune strategie per individuarlo e risolverlo? Io sono noobish in modo che tutto quello che posso contribuire sono storie dell'orrore e domande, mi dispiace ...

Sembra che questo viene generato quando una classe è visibile in fase di compilazione ma non in fase di esecuzione ... come può accadere?

Nel mio caso sto sviluppando un'applicazione che utilizza le API di Google, in Eclipse, per la piattaforma Android. Ho configurato le proprietà del progetto/Java Build Path/Libraries per includere gdata .jars e tutto va bene. Quando eseguo nell'emulatore ottengo una forza chiusa e il logcat mostra un NoClassDefFoundError su un nuovo semplice ContactsService ("myApp"); Ho anche provato un nuovo CalendarService ("myApp") con gli stessi risultati.

È possibile o consigliabile legarsi staticamente in fase di compilazione per evitare il problema?

In che modo l'associazione dinamica di una libreria aggiuntiva può funzionare comunque nell'ambiente mobile? O deve essere associato a .apk oppure è necessario "installarlo"? ... hmmm.

Consigli molto apprezzati.

risposta

9

Sembra che questo è gettato quando una classe è visibile al momento della compilazione, ma non a fase di esecuzione ... come può accadere?

Il percorso di classe di build può includere JAR che non vengono impacchettati nell'APK.

E 'possibile o auspicabile impegnare staticamente in fase di compilazione per evitare il problema?

È possibile, desiderabile e necessario.

Al di fuori di Eclipse, è sufficiente inserire i JAR necessari in libs/ nel progetto, compilare con Ant e il gioco è fatto.

All'interno di Eclipse, un modello che ho avuto studenti utilizzano con successo è quello di mettere i JAR necessari nel libs/ nel progetto, aggiungerli come JAR al percorso di generazione (nota: non JAR esterni), e ottengono confezionati come parte dell'APK. Nota, però, che io personalmente non uso Eclipse, e quindi la mia esperienza con esso è limitata.

+0

Con il plugin Eclipse per lo sviluppo Android, tutti i jar inclusi nel percorso di generazione del progetto vengono impacchettati come parte dell'APK (a condizione che si utilizzi il plug-in per creare l'APK). I vasi non devono essere all'interno del progetto, o in una determinata directory o altro. –

+0

Di recente c'è stata un'ondata di lamentele a riguardo. Di nuovo, non sono un utente di Eclipse. Ho visto che c'è "Aggiungi JAR" e "Aggiungi JAR esterno" nella scheda della finestra di dialogo del percorso di una costruzione - c'è forse un impatto se si sceglie "Aggiungi JAR esterno"? – CommonsWare

+0

Ho usato "Aggiungi JAR esterno", sì. Ho creato una directory libs e ho spostato direttamente le installazioni gdata. Poi ho usato "Aggiungi JAR" e i vasi appaiono come "Biblioteche di riferimento" e il compilatore è felice. Quindi ho eseguito un Project Clean, riavviato Eclipse e l'emulatore e ho eseguito. Stesso problema. Grrr. Questa cosa mi sta dando di matto .. :) Sembra un bug di ambiente di sviluppo? – DJC

1

Quando ho ottenuto questo, il problema era in realtà più profondo nella coda; Convertitore Dalvik non era riuscito a convertire alcune delle librerie referenziate e ancora Eclipse mi ha permesso di avviare il progetto.

Controllare la console di Android SDK per vedere se ci sono degli errori segnalati.

1

Nel mio caso, sto utilizzando la mia libreria (MyLib) condivisa tra 2 app. L'app A è stata chiusa quando ho aggiunto una nuova classe alla libreria.

Quando ho aperto l'App A per lavorarci sopra, Eclipse ha riconosciuto la nuova classe e sono riuscito a farvi riferimento. Comunque durante la corsa ho avuto l'errore.

Si è scoperto che la cartella della libreria importata nell'App A (denominata qualcosa come MyLib_src) non rifletteva le modifiche apportate al mio progetto di libreria (MyLib).

  • Per risolvere questo problema ho aggiornato l'App A, le modifiche si sono riflesse e Android potrebbe creare correttamente il mio progetto.

Non ho trovato alcun riferimento a questa versione del problema, quindi ho pensato di aggiungerlo a questa lista.

2

Per coloro che hanno problemi ho avuto lo stesso errore con la mia app. quello che ho fatto per risolverlo è stato creare un nuovo progetto e copiare le mie risorse e le mie cartelle di sorgenti insieme al mio file manifest nel nuovo progetto (ho cancellato in anticipo quelle all'interno del nuovo progetto creato) e voilà.

Problemi correlati