Le librerie non vengono più aggiunte ad APK dopo l'aggiornamento a ADT 22


238

Ho un progetto app Android piuttosto grande che fa riferimento a diversi progetti di librerie. Tutto è andato bene fino a quando non ho aggiornato il plug-in ADT eclipse alla versione più recente (v22). Ovviamente ho anche aggiornato l'SDK. Non vedo alcun errore di compilazione in Eclipse, ma quando eseguo il progetto sul telefono ottengo un NoClassDefFoundError.

java.lang.NoClassDefFoundError: org.acra.ACRA
....

La libreria arca è inclusa in uno dei progetti di libreria a cui fa riferimento (nella cartella libs) e posso vederla nelle "Librerie private Android" in Esplora pacchetti, anche come ho detto, nessun errore di compilazione. Il progetto funziona bene sul computer di tutti gli altri che non ha aggiornato ADT.

Ho già provato un sacco di cose tra cui ma non limitato a:

  • reinstallare l'SDK Android
  • scarica un nuovo pacchetto ADT
  • elimina tutto il mio codice e recuperalo da git
  • copia la libreria in questione nel progetto dell'app
  • commentare il codice che utilizza questa libreria - ottengo lo stesso errore per la libreria successiva

tutto senza successo, quindi sto diventando davvero disperato qui.

Sarei davvero felice se qualcuno potesse darmi un suggerimento su come risolvere quel problema.

Risposte:


337

Citando Streets of Boston dal suo post adt-dev :

Durante l'aggiornamento, "Ordine ed esportazione" delle nuove "Librerie private Android" non viene sempre verificato. E Android-support-v4.jar è ora in questa sezione "Librerie private Android".

Per risolvere questo problema, vai su "Ordina ed esporta" e seleziona "Librerie private Android". Quindi aggiorna / pulisci / ricostruisci.

Dopo aver eseguito questa "correzione" per un progetto di libreria, potrebbe essere necessario chiudere e riaprire qualsiasi progetto dipendente, poiché potrebbero non vedere immediatamente questa "correzione".

Prova questo e con un po 'di fortuna risolverà il tuo problema.

inserisci qui la descrizione dell'immagine


32
CommonsWare è come sempre uno dei primi pionieri, grazie mille! :)
Paul Wein,

1
Ogni nuova versione di ADT una nuova sorpresa;) Spero che il nuovo sistema di compilazione sia migliore. Grazie CommonsWare
lujop

3
Sono solo io o sembra sbagliato che ogni sviluppatore [che utilizza Eclipse e Librerie] entri in tutti i suoi progetti di biblioteca e contrassegni "Librerie private Android" come esportate? Questo mi fa pensare che tutti abbiamo sbagliato l'intenzione di Google di aggiungere questa nuova "funzionalità" in primo luogo. Forse non dovremmo contrassegnare le biblioteche come esportate. Forse dovremmo aggiungere qualsiasi file jar mancante direttamente alla nostra cartella "libs". Es .: Questo consentirebbe al mio progetto di libreria di utilizzare l'ultimo android-support-v4.jar [v13], mentre ABS utilizza internamente android-support-v4-12.jar.
svenendo

2
@swooby: "Sono solo io, o sembra sbagliato che tutti gli sviluppatori [che usano Eclipse e Libraries] accedano a tutti i loro progetti di librerie e contrassegnino" Librerie private Android "come esportate?" - è "sbagliato" in quanto è un bug, riconosciuto dalle persone che hanno scritto gli strumenti. "Forse dovremmo aggiungere qualsiasi file jar mancante direttamente alla nostra cartella" libs "- oh, devi farlo anche tu, come hai fatto negli ultimi anni. Tuttavia, devi ancora selezionare questa casella di controllo.
Commons War

9
@Phillip: AFAIK, sono tutti progetti. Più precisamente, suppongo, sono tutti i progetti che contengono elementi libs/, ma potresti anche controllarli per tutti, nel caso in cui aggiungessi elementi a libs/qualche mese dopo e dimenticherai di questo.
CommonsWare,

10

Il semplice controllo delle librerie private Android non era sufficiente, dovevo anche installare gli strumenti di build dell'SDK Android in Android SDK Manager.


Non posso confermare che ciò sia necessario, ma non ho superato l'errore in cui si è verificato SimonSays prima di installarlo. Potrebbe richiedere solo un'impostazione corretta delle caselle di controllo di esportazione come descritto sopra, ma ho sentito che dovrei menzionare che ho installato gli strumenti di costruzione lungo la strada.
Strangeluck,

questo funziona per me. solo cambiare le preferenze di Eclipse non è sufficiente. Potrebbe essere necessario controllare gli strumenti di build installati in Android SDK manager.
Stevens,

4

Ho avuto anche lo stesso problema e il mio adtera 22.0.1. E nessuna delle soluzioni sopra ha funzionato. Inoltre, quando si aggiunge un progetto di libreria esterno a un progetto di lavoro, controllo sempre la gencartella del progetto di lavoro e se Resiste un progetto di libreria esterna (insieme al nome del pacchetto), viene esportato solo il progetto di libreria esterna. E nella mia gencartella non è packagenamestato mostrato nessun catalogo esterno.

Quindi ho controllato il project.propertiesfile e non era presente alcun collegamento alla libreria esterna android.library.reference.1=presente. Quindi ho aggiunto manualmente il riferimento alla libreria esterna lì, anche se avevo aggiunto da project->properties->Java Build Path->Projects->Add. Quindi, la modifica manuale di ha project.propertiesfatto tutto il lavoro per me.

inserisci qui la descrizione dell'immagine


1
Penso che sia successo dal momento che il posto della gui da impostare nonandroid.library.reference.n è , ma piuttosto -> -> -> -> . Un gotcha . java build pathprojectpropertiesAndroidLibraryAdd...
n611x007

4

Ho riscontrato un problema simile, ho trascorso circa 3 ore, ma nessuna delle decisioni qui proposte non ha aiutato ... Alla fine ho trovato una fonte del problema: i miei file di progetto e le proprietà di project.properties erano di sola lettura. Eclipse sta semplicemente ignorando silenziosamente qualsiasi cambiamento nelle dipendenze della libreria quando lo faccio nella GUI!


3

Ho avuto lo stesso problema. Era a causa del progetto Eclipse. Per risolverlo, ho creato un nuovo progetto in eclipse, ho copiato le classi e le risorse del mio progetto esistenti, quindi ho nuovamente lanciato eclipse e aggiunto le mie inclusioni personalizzate.


1
Troppa seccatura, la soluzione di CommonsWare ha funzionato per me e credo che avrebbe funzionato anche per te.
Bilthon,

2

Ho avuto il problema simile e la mia risposta è leggermente diversa da quella di CommonsWare. Ecco il mio screenshot:

inserisci qui la descrizione dell'immagine

Dopo aver ricontrollato le librerie nella mia build, ho ripreso a funzionare.


2
Starei attento con questa soluzione. Android Dependenciesè stato sostituito da Android Private Librariese potrebbe essere ancora lì solo per motivi legacy. Immagino che possa essere rimosso in qualsiasi momento.
Simon

0

Ho avuto anche lo stesso problema,

i) aggiungi gson lib come referecend librairies
ii) controllalo in java Build Path http://i.stack.imgur.com/Gldhs.png

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.