Come posso usare JAR esterni in un progetto Android?


326

Ho creato un progetto Android e aggiunto un JAR esterno (hessian-4.0.1.jar) al mio progetto. Ho quindi aggiunto il JAR al percorso di generazione e l'ho verificato in Ordine ed Esportazione.

Sembra che l'ordine e l'esportazione vengano ignorati, e tutte le classi dal JAR esterno mancano in fase di esecuzione.

Esiste un trucco per includere correttamente le classi necessarie da un JAR esterno quando si crea un'applicazione Android utilizzando il plug-in Eclipse? Non voglio usare la formica o Maven.


1
come hai già scoperto: questo è causato dalle dipendenze in hessian-4.0.1.jar. Se vuoi usare Hessian con Android, usa Hessdroid ( code.google.com/p/hessdroid ). Non molto attivo, ma funziona bene anche per me su Android 4.0.
Ice09,

1
Vedi anche "NoClassDefFoundError per il codice in una libreria Java su Android" per un problema comune quando si usano barattoli esterni. Soluzione semplice .
Flusso

Risposte:


443

Per Eclipse

Un buon modo per aggiungere JAR esterni al tuo progetto Android o qualsiasi progetto Java è:

  1. Crea una cartella chiamatalibs nella cartella principale del tuo progetto
  2. Copia i tuoi file JAR nella libscartella
  3. Ora fai clic destro sul file Jar e quindi seleziona Percorso di costruzione> Aggiungi a percorso di creazione , che creerà una cartella denominata "Librerie di riferimento" all'interno del tuo progetto

    In questo modo, non perderai le tue librerie a cui fai riferimento sul tuo disco rigido ogni volta che trasferisci il tuo progetto su un altro computer.

Per Android Studio

  1. Se sei in Visualizzazione Android in Esplora progetti, modificalo in Visualizzazione progetto come di seguito

Immagine mancante

  1. Fare clic con il tasto destro del mouse sul modulo desiderato in cui si desidera aggiungere la libreria esterna, quindi selezionare Nuovo> Directroy e denominarlo come " libs "
  2. Ora copia blah_blah.jar nella cartella ' libs '
  3. Fai clic con il pulsante destro del mouse su blah_blah.jar, quindi seleziona " Aggiungi come libreria ... ". Questo aggiungerà e inserirà automaticamente in build.gradle come file di compilazione ('libs / blah_blah.jar') e sincronizzerà il gradle. E il gioco è fatto

Nota: se si utilizzano librerie di terze parti, è preferibile utilizzare dipendenze transitive in cui lo script Gradle scarica automaticamente il JAR e il JAR delle dipendenze quando viene eseguito lo script Gradle.

Esempio: compila "com.google.android.gms: play-services-ads: 9.4.0"

Ulteriori informazioni su Gradle Dependency Mangement


49
Si noti che quando si utilizzano le recenti versioni di Eclipse / ADT i vasi esterni devono trovarsi in una cartella chiamata libs(anziché lib)
THelper

4
@THelper - Grazie! Hai ragione, la cartella deve essere denominata "libs" e non "lib". Stavo sbattendo la testa per questo problema.
Camille Sévigny,

7
Nelle versioni recenti di SDK, il passaggio 3 (aggiunta manuale del JAR al percorso di generazione) non è necessario. Ma se hai un IDE, come Eclipse aperto al momento del rilascio del file, dovrai fare un aggiornamento del progetto (F5 e / o il menu contestuale Aggiorna in Esplora pacchetti).
Jon Adams,

4
Come viene eseguito dalla riga di comando? Quale file di configurazione devo modificare e come?
Kristian Spangsege,

13
Questo approccio è obsoleto dall'inizio del 2012. Basta aggiungere il JAR a libs/. Non modificare manualmente il percorso di compilazione.
CommonsWare

127

Sì, puoi usarlo. Ecco come:

  1. Il tuo progetto -> clic destro -> Importa -> File system -> yourjar.jar
  2. Il tuo progetto -> tasto destro -> Proprietà -> Percorso build Java -> Librerie -> Aggiungi vaso -> yourjar.jar

Questo video potrebbe essere utile in caso di problemi.


5
Questo approccio è obsoleto dall'inizio del 2012. Basta aggiungere il JAR a libs /. Non modificare manualmente il percorso di compilazione.
CommonsWare

Ho provato vari modi per aggiungere il percorso di compilazione. Solo in questo modo posso correggere l'eccezione di Classe non trovata dopo la migrazione di un progetto su un altro PC
Mickey

La PRIMA soluzione è obsoleta e non funzionerà BENE.
Yousha Aleayoub,

5

Attualmente sto usando SDK 20.0.3 e nessuna delle soluzioni precedenti ha funzionato per me.

Il motivo per cui hessdroid funziona dove hess ha avuto esito negativo è perché i due file jar contengono java compilato per diverse macchine virtuali. Il codice byte creato dal compilatore Java non è garantito per essere eseguito sulla macchina virtuale Dalvik. Il codice byte creato dal compilatore Android non è garantito per l'esecuzione sulla macchina virtuale Java.

Nel mio caso ho avuto accesso al codice sorgente e sono stato in grado di creare un file jar Android per esso utilizzando il metodo che ho descritto qui: https://stackoverflow.com/a/13144382/545064


5

So che l'OP termina la sua domanda con riferimento al plugin Eclipse, ma sono arrivato qui con una ricerca che non specificava Eclipse. Quindi ecco qui per Android Studio:

  1. Aggiungi jarfile alla directory libs (come copia / incolla)
  2. Fare clic con il tasto destro del mouse sul jarfile e selezionare "Aggiungi come libreria ..."
  3. fai clic su "Ok" nella finestra di dialogo successiva o rinominato se lo desideri.

Questo è tutto!


4

A quanto pare non sono stato abbastanza bravo con la mia traccia dello stack, il problema non è che il JAR esterno non sia incluso.

Il problema è che manca la piattaforma Android javax.naming. * E molti altri pacchetti che hanno anche dipendenze sul JAR esterno.

L'aggiunta di file JAR esterni e l'impostazione di Ordine ed esportazione in Eclipse funzionano come previsto con i progetti Android.


3

Vai al progetto corrente

Fare clic destro-> Proprietà-> Percorso build Java-> Aggiungi file Jar nelle librerie -> Fare clic su OK

Quindi viene aggiunto al file delle librerie di riferimento nel progetto corrente.


1

L'API Java di Android non supporta javax.naming. * E molte altre cose javax. *. È necessario includere le dipendenze come vasetti separati.


1

Se usi Android Studio, procedi come segue (Ho copiato e modificato la risposta di @Vinayak Bs):

  1. Seleziona la vista Progetto nella vista laterale Progetto (anziché in Pacchetti o Android)
  2. Crea una cartella chiamata libs nella cartella principale del tuo progetto
  3. Copia i tuoi file JAR nella cartella libs
  4. La vista laterale verrà aggiornata e i file JAR verranno visualizzati nel progetto
  5. Ora fai clic destro su ogni file JAR che desideri importare e quindi seleziona "Aggiungi come libreria ...", che lo includerà nel tuo progetto
  6. Successivamente, tutto ciò che devi fare è fare riferimento alle nuove classi nel tuo codice, ad es. import javax.mail.*

1

in Android Studio se si utilizza Gradle

aggiungi questo a build.gradle

compile fileTree(dir: 'libs', include: ['*.jar'])

e aggiungi il file jar alla cartella libs


1

Se si utilizza il sistema di creazione gradle , attenersi alla seguente procedura:

  1. inserisci i jarfile nella rispettiva libscartella della tua app Android. Sarà generalmente trovare in Project> app> libs. Se libsmanca la cartella, crearne una.

  2. aggiungi questo al tuo build.gradlefile il tuo app. (Non per il tuo Project's build.gradle)

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        // other dependencies
    }

    Ciò includerà tutti i tuoi jarfile disponibili nella libscartella.

Se non vuoi includere tutti i jarfile, puoi aggiungerlo singolarmente.

compile fileTree(dir: 'libs', include: 'file.jar')


0

crea una cartella (come lib) all'interno del tuo progetto, copia il tuo jar in quella cartella . ora vai a configurare il percorso di compilazione dal tasto destro del mouse sul progetto, lì nella selezione del percorso di compilazione

'aggiungi vaso' cerca la cartella che hai creato e scegli il vaso.


0

Copiare il file .jar nella cartella del progetto Android non è sempre possibile.
Soprattutto se si tratta di un output di un altro progetto nell'area di lavoro e viene continuamente aggiornato.

Per risolvere questo problema dovrai aggiungere il vaso come file collegato al tuo progetto, invece di importarlo (che lo copierà localmente).

Nell'interfaccia utente scegli:

Progetto -> Importa -> File system -> yourjar.jar -> (area Opzioni) Avanzate -> Crea collegamento nell'area di lavoro.

Il collegamento viene salvato nel file .project :

<linkedResources>
    <link>
        <name>yourjar.jar</name>
        <type>1</type>
        <locationURI>PARENT-5-PROJECT_LOC/bin/android_ndk10d_armeabi-v7a/yourjar.jar</locationURI>
    </link>
</linkedResources>

PARENT-5-PROJECT_LOC significa relativo al file di progetto, 5 directory in alto (../../../../../).

Quindi aggiungilo alle librerie:
Progetto -> Proprietà -> Percorso build Java -> Librerie -> Aggiungi vaso -> yourjar.jar

Nella stessa finestra scegli la scheda Ordina ed esporta e segna il tuo barattolo in modo che venga aggiunto all'apk.

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.