2012-03-22 4 views
7

Ho un progetto che fa riferimento a due progetti di libreria. Dopo aver aggiornato gli strumenti ADT e SDK su version 17, l'app si arresta non appena viene raggiunto un riferimento a una classe definita in uno dei progetti di libreria. Errori come ad esempio:Aggiornato Strumenti SDK e ADT a 17 e ora ottenere VerifyErrors

Unable to resolve superclass of Lcom/my/package/name/MyActivity; (118) 
Link of class 'Lcom/my/package/name/MyActivity;' failed 
VFY: unable to find class referenced in signature (Lcom/my/package/name/MyActivity;) 

e:

FATAL EXCEPTION: main 
    java.lang.VerifyError: my/package/name/util/SomeClass 
    at my.package.name.App.onCreate(App.java:120) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3925) 
    at android.app.ActivityThread.access$1300(ActivityThread.java:122) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4340) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    at dalvik.system.NativeStart.main(Native Method) 

(Il mio pacchetto e le classi non sono sono chiamate in questo modo, basta modificato per la pubblicazione qui)

Tutte le idee su ciò che sta accadendo Qui? Per quanto posso dire non ci sono errori di compilazione e il mio progetto sembra che faccia riferimento al progetto della biblioteca correttamente.

+0

Hai provato a pulire e ricostruire i tuoi progetti? –

+0

Mi sono rinfrescato, ho pulito, ricostruito, chiuso, aperto, pianto e un paio di altre cose. ;) La pulizia non sembra cambiare nulla, ma ho trovato qualcosa che ha fatto (vedi sotto). Grazie comunque! – cottonBallPaws

risposta

12

Ho avuto lo stesso identico problema. Trovare questo post: salvami un po 'di frustrazione.

+0

Grazie mille per questo link! Maledizione, tutto quello che dovevo fare era rinominare la cartella "lib" in "libs" – twig

+0

Puoi anche usare la funzione Ordine ed Esporta di eclipse – Bendlas

4

Wow, è stato spaventoso ma ho provato un sacco di cose diverse finché non ha funzionato. Da qualche parte in tutto questo, lo ha risolto. Il mio progetto di libreria ha una manciata di vasi aggiunti alla cartella "lib" e collegati al percorso di generazione.

Ho letto questo registro delle modifiche nota: http://tools.android.com/recent/dealingwithdependenciesinandroidprojects sulle modifiche alle librerie e alle dipendenze. Ho notato questo:

I progetti dispongono di cartelle di origine, oltre a Project Library e dipendenze di file jar. Con nessun altro configurazione necessaria che aggiungere Biblioteca Progetti come una dipendenza in project.properties, classpath di un progetto viene automaticamente popolato con:

The content of the project’s libs/*.jar 
The output of the Library Projects. 
The Library Projects’ libs/*.jar 

Per qualche ragione, la cartella del mio progetto di libreria è stato nominato "lib", non "libs ". L'ho usato in questo modo per quasi due anni senza problemi, ma sono andato avanti e l'ho cambiato in "libs". Ho quindi aggiornato il progetto e disattivato il flag "is Library", quindi nuovamente attivo per verificare che il cambiamento fosse visibile.

Inoltre, con i nuovi strumenti, menzionano che gestisce anche i vasi del progetto della libreria nel progetto che fa riferimento alla libreria. Fino a questo punto avevo aggiunto manualmente i vasi del progetto della biblioteca al progetto di riferimento. Così sono entrato nel progetto di riferimento e ho rimosso i vasi dal percorso di costruzione. Poi, quando sono entrato nelle proprietà del progetto, ho rimosso il progetto della biblioteca e l'ho riaggiunto.

Infine, ho notato che un file jar si trovava nella cartella del progetto della libreria, ma non era in uso. Era solo nella cartella. Ho rimosso quel file.

Quindi da qualche parte ha iniziato a funzionare di nuovo. Immagino che la vera soluzione fosse cambiare "lib" in "libs", ma volevo assicurarmi di averlo menzionato nel caso in cui aiutasse altri sviluppatori a provare paura e panico nei loro cuori. In bocca al lupo!

1

@kargi

Come regola generale, credo che la soluzione here e here è una pessima pratica. Maven ha risolto questa assurda attività di cartelle lib tanto tempo fa, ma anche Maven non è molto efficiente nella creazione di Android, quindi consiglierei di usare la funzione di esportazione di Eclipse, come descrivo here.