Aggiunta di una libreria / JAR a un progetto Android Eclipse


130

Questa è una domanda in due parti sull'aggiunta di una libreria di terze parti (JAR) a un progetto Android in Eclipse.

La prima parte della domanda è, quando provo ad aggiungere un JAR (libreria) di terze parti al mio progetto Android, ho prima il problema di

Errore durante l'analisi di XML: prefisso non associato

perché sto cercando di usare una classe da quel JAR (e ho bisogno che il prefisso sia in qualche modo definito). Cosa sta succedendo?

In secondo luogo, (dopo aver risolto il problema, la risposta è riportata di seguito), la mia applicazione non funziona su Android e scopro tramite il debugger (LogCat) che la classe che sto tentando di consumare non esiste.

Causato da: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView ...

Perché, quando non ricevo alcun errore di compilazione o linker in Eclipse, si verifica questo problema nell'emulatore?

Queste due domande sono retoriche perché ho intenzione di rispondere a me stesso di seguito. Altri post in questo forum si insinuano nel problema e altrove c'è discussione, ma sento che posso essere più esplicitamente utile per il prossimo ragazzo a venire.

Risposte:


316

Ora per il problema di classe mancante.

Sono uno sviluppatore di Eclipse Java EE e ho l'abitudine per molti anni di aggiungere librerie di terze parti tramite il meccanismo "User Library" in Build Path. Certo, ci sono almeno 3 modi per aggiungere una libreria di terze parti, quella che uso è la più elegante, a mio modesto parere.

Ciò non funzionerà, tuttavia, per Android, il cui Dalvik "JVM" non può gestire una normale classe compilata da Java, ma deve averla convertita in un formato speciale. Questo non succede quando aggiungi una libreria nel modo in cui non lo farò.

Invece, segui le istruzioni (ampiamente disponibili) per importare la libreria di terze parti, quindi aggiungila usando Build Path (che lo rende noto a Eclipse per scopi di compilazione). Ecco la procedura dettagliata:

  1. Scarica la libreria sul tuo sistema di sviluppo host.
  2. Crea una nuova cartella, libs , nel tuo progetto Eclipse / Android.
  3. Fai clic con il pulsante destro del mouse su libs e scegli Importa -> Generale -> File system, quindi Avanti, Sfoglia nel filesystem per trovare la directory principale della libreria (es .: dove l'hai scaricata).
  4. Fare clic su OK, quindi fare clic sul nome della directory (non sulla casella di controllo) nel riquadro a sinistra, quindi selezionare il JAR pertinente nel riquadro a destra. Questo inserisce la libreria nel tuo progetto (fisicamente).
  5. Fai clic con il pulsante destro del mouse sul progetto, scegli Percorso build -> Configura percorso build, quindi fai clic sulla scheda Librerie, quindi Aggiungi JAR ..., passa al nuovo JAR nella directory libs e aggiungilo. (Questo, per inciso, è il momento in cui il tuo nuovo JAR viene convertito per l'uso su Android.)

NOTA

Il passaggio 5 potrebbe non essere necessario, se la lib è già inclusa nel percorso di compilazione. Basta assicurarsi che la sua esistenza prima di aggiungerlo.

Quello che hai fatto qui realizza due cose:

  1. Include un JAR convertito Dalvik nel tuo progetto Android.
  2. Rende le definizioni Java disponibili per Eclipse al fine di trovare le classi di terze parti durante lo sviluppo (ovvero la compilazione) del codice sorgente del progetto.

Russ, probabilmente dovresti iniziare un'altra domanda separata. Questa "risposta" sembra strana seduta qui.
Paul Gregoire,

3
Quindi, ho riscritto alcune parti della domanda. Ho resistito alla tentazione di fare la cosa facile (cosa suggerisci qui) perché penso davvero che entrambi i problemi derivino dal tentativo di aggiungere una libreria di terze parti e sto scommettendo che chiunque abbia il secondo problema probabilmente avrà avuto il anche il primo. Grazie.
Russ Bateman,

Vorrei che ci fosse stato qualcosa di più esplicito in questo nei documenti Android formali (non ci siamo ancora imbattuti su di esso) e altre risposte in altri forum si avvicinano, ma non si vede mai il problema. Si noti che su BlackBerry, questo stesso problema è un enorme incubo in cui nessuno fornisce informazioni affidabili su come risolverlo, non sono sicuro di cosa farò lì.
Russ Bateman,

2
Ciao @RussBateman Ho provato i passaggi che hai menzionato sopra ed è stato in grado di includere con successo il jar della libreria nel mio progetto Android e quindi le classi della libreria erano accessibili al mio progetto al momento della compilazione. Ma quando eseguo il progetto, ottengo un errore nella mia console: "Conversione nel formato Dalvik non riuscita con errore 1" .. e il mio progetto non sarebbe stato avviato!
Zeba,

In determinate circostanze questo non funziona ... Non ricordo esattamente cosa ho fatto, ho eliminato la cartella libs, l'ho letta ... ora ha fatto tutto ciò che hai detto, aggiungi libs, importa il jar, aggiungi al percorso di compilazione .. Gli errori del compilatore sono spariti, ma ottengono comunque un'eccezione di runtime che la classe non è stata trovata :(
Ixx

20

Assicurati che i tuoi vasetti di terze parti siano nella cartella "libs" dei tuoi progetti e che verranno inseriti nel file .apk quando impacchetti la tua applicazione. Potresti vedere errori di runtime sul dispositivo se qualcosa nel vaso non è supportato, ma a parte questo ho avuto un grande successo con questo.


1
È tutta una questione di esperienza, ho avuto lo stesso problema prima :)
Paul Gregoire,

Grazie signore, ma fa schifo vedere che la cartella libs ha bisogno della copia dei file Jar esterni che abbiamo già nel repository Maven o da qualche parte.
chiede il

1
Purtroppo questo non funziona più automaticamente, devi anche dire a eclipse di includere le librerie nei file del pacchetto.
Neil Townsend,

Quando è cambiato? Questo è un grande cambiamento a cui siamo tutti abituati.
Paul Gregoire,

5

Impostazione di un progetto di biblioteca

Un progetto di libreria è un progetto Android standard, quindi puoi crearne uno nuovo come faresti con un nuovo progetto di applicazione.

Quando si crea il progetto di libreria, è possibile selezionare qualsiasi nome dell'applicazione, pacchetto e impostare altri campi in base alle esigenze, come mostrato nella figura 1.

Successivamente, imposta le proprietà del progetto per indicare che si tratta di un progetto di libreria:

In Esplora pacchetti, fare clic con il pulsante destro del mouse sul progetto della libreria e selezionare Proprietà. Nella finestra Proprietà, seleziona il gruppo di proprietà "Android" a sinistra e individua le proprietà della Libreria a destra. Seleziona la casella di controllo "is Library" e fai clic su Applica. Fare clic su OK per chiudere la finestra Proprietà. Il nuovo progetto è ora contrassegnato come progetto di biblioteca. Puoi iniziare a spostare il codice sorgente e le risorse al suo interno, come descritto nelle sezioni seguenti.


4

Se si utilizza ADT versione 22, è necessario controllare le dipendenze Android e le librerie private Android nella scheda ordine ed esportazione nel percorso di creazione del progetto


2

Innanzitutto, il problema del prefisso mancante.

Se si consuma qualcosa nel file di layout che proviene da una terza parte, potrebbe essere necessario consumarne anche il prefisso, qualcosa come "droidfu:" che si verifica in diversi punti del costrutto XML di seguito:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

Questo viene fuori dal JAR, ma dovrai anche aggiungere il nuovo "xmlns: droidfu"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

oppure ricevi l'errore del prefisso non associato. Per me, non è stato possibile copiare e incollare tutti gli esempi forniti dalle pagine della libreria di terze parti.


1

Errore durante l'analisi di XML: prefisso non associato

La risorsa '/ playteddy / res' non esiste.

Ho ottenuto i due errori precedenti e alla fine l'ho risolto.

Fare clic con il tasto destro del mouse sul progetto -> proprietà -> percorso build java -> googleadmobadsdk (selezionarlo e inserirlo in alto), quindi eseguire e risolvere il problema. È stato risolto il mio errore di runtime.


0

Metti la fonte in una cartella fuori dal tuo spazio di lavoro. Fai clic con il tasto destro del mouse in Esplora progetti e seleziona "Importa ..."

Importa il progetto nell'area di lavoro come progetto Android. Prova a crearlo e assicurati che sia contrassegnato come progetto di libreria. Assicurati anche che sia compilato con il supporto dell'API di Google, in caso contrario otterrai errori di compilazione.

Quindi, con il tasto destro del mouse sul progetto principale in Esplora progetti. Seleziona le proprietà, quindi seleziona Android a sinistra. Nella sezione della libreria in basso, fai clic su "Aggiungi" ..

La libreria dei palloncini mapview ora dovrebbe essere disponibile per essere aggiunta al tuo progetto.


0

Vai a creare il percorso in eclipse, quindi fai clic su ordina ed esporta, quindi controlla la libreria / jar, quindi fai clic sul pulsante su per spostarlo in cima all'elenco per compilarlo prima.

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.