Come creare un .jar da un progetto Android Studio


96

Sto usando AndroidStudio e ho questo progetto come mostrato:

inserisci qui la descrizione dell'immagine

Ciò che si trova all'interno del cerchio blu è myLib. myLib ha anche bisogno di usare una libreria esterna che si trova all'interno del cerchio rosso e un pacchetto apache (cerchio verde).

Quindi voglio che tutto questo diventi un unico .jar, così posso usarlo in altri progetti.

Una guida passo passo sarebbe davvero apprezzata, sono un principiante nel mondo degli sviluppatori.

Grazie!


1
Penso che quello che vuoi è un file aar (archivio Android) che può essere collegato in modo semplice come dipendenza. Fondamentalmente è necessario creare un progetto di libreria Android. Ma non riesco a scrivere i passaggi esatti dalla mente.
rekire

2
Ho bisogno di un file .jar in modo da poterlo utilizzare in qualsiasi progetto Java. Non solo Android.
dum4ll3

1
Deve essere quasi lo stesso: crea un progetto di libreria ed esportalo.
Thrash Bean

Questo bug descrive una carenza nel plugin gradle di Android che impedisce di hackerare facilmente il buildfile gradle per aggiungere un target jar ...
mmigdol

Risposte:


135
  • Apri build.gradle per il progetto di libreria inserisci qui la descrizione dell'immagine

  • Scrivi due attività in build.gradle: deleteJar e createJar e aggiungi la regola createJar.dependsOn (deleteJar, build) inserisci qui la descrizione dell'immagine

Il codice dall'alto:

task deleteJar(type: Delete) {
    delete 'libs/jars/logmanagementlib.jar'
}           

task createJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/jars/')
    include('classes.jar')
    rename('classes.jar', 'logmanagementlib.jar')
}

createJar.dependsOn(deleteJar, build)
  • Espandi il pannello gradle da destra e apri tutte le attività nella tua libreria-> altri. Vedrai due nuove attività lì: createJar e deleteJar inserisci qui la descrizione dell'immagine

  • Fare doppio clic su createJar inserisci qui la descrizione dell'immagine

  • Una volta che l'attività è stata eseguita correttamente, ottieni il tuo jar generato dal percorso menzionato nell'attività createJar cioè libs / xxxx.jar inserisci qui la descrizione dell'immagine

  • copia il jar appena generato nella cartella lib del progetto richiesto -> fai clic con il pulsante destro del mouse -> seleziona "aggiungi come libreria"


4
A volte le persone capiscono guardando piuttosto che leggendo. È una buona UX, vedi ☺
Abhinav Tyagi

5
Bene, allora dovrei dirti che non ne sono sicuro release. Ho debuge default, ma nessuna releasecartella. Quale versione del plugin stai usando? Sai se questo è documentato da qualche parte?
Cameron Lowell Palmer

3
Non ho la releasecartella.
Kamran Bigdely

4
Cosa stai cercando di copiare ?? Dovremmo indirizzare le cartelle contenenti il ​​file APK ?? Intendo nella riga da ('build / intermediates / bundles / default') cosa contiene questa directory per te. Non c'è nessuna cartella nel mio studio Android con il nome bundle e continuo a ricevere NESSUNA FONTE nell'attività createJar
Bawender Yandra

12
cambia da ('build / intermediates / bundles / release /') a da ('build / intermediates / packaged-classes / release /') per Android Studio 3.1.3 e Gradle versione 4.4
Vaishakh

59

Se imposti il ​​codice come un semplice modulo Java in Gradle, è davvero facile che Gradle ti dia un file jar con il contenuto. Quel file jar avrà solo il tuo codice, non le altre librerie Apache da cui dipende. Consiglierei di distribuirlo in questo modo; è un po 'strano raggruppare le dipendenze all'interno della tua libreria, ed è più normale che gli utenti di quelle librerie debbano includere quelle dipendenze da soli (perché altrimenti ci sono collisioni di quei progetti che stanno già collegando copie della libreria, forse di versioni diverse ). Inoltre, eviti potenziali problemi di licenza relativi alla ridistribuzione del codice di altre persone se pubblichi la tua libreria.

Prendi il codice che deve essere compilato anche in un jar e spostalo in un modulo Java semplice separato in Android Studio:

  1. Menu File > Nuovo modulo ... > Libreria Java
  2. Impostare la libreria, il nome del pacchetto Java e i nomi delle classi nella procedura guidata. (Se non vuoi che crei una classe per te, puoi semplicemente eliminarla una volta creato il modulo)
  3. Nel tuo codice Android, imposta una dipendenza dal nuovo modulo in modo che possa utilizzare il codice nella tua nuova libreria:
  4. File > Struttura del progetto > Moduli > (il tuo modulo Android) > Dipendenze > + > Dipendenza del modulo . Guarda lo screenshot qui sotto: inserisci qui la descrizione dell'immagine
  5. Scegli il tuo modulo dall'elenco nella finestra di dialogo che si apre: inserisci qui la descrizione dell'immagine

Si spera che il tuo progetto dovrebbe essere costruito normalmente ora. Dopo aver eseguito una compilazione, un file jar per la tua libreria Java verrà inserito nella directory build / libs nella directory del tuo modulo. Se vuoi costruire il file jar a mano, puoi eseguire la sua attività file jar build dalla finestra Gradle: inserisci qui la descrizione dell'immagine


Grazie mille! La tua risposta è stata davvero utile, soprattutto nell'ultimo screenshot che mostra le attività di Gradle. Non lo sapevo. Potrei seguire i tuoi passaggi, ma mi manca ancora org.apache.http.Header. Come posso importarlo nella mia libreria?
dum4ll3

Cosa intendi quando dici che ti manca?
Scott Barta

1
Segui la stessa struttura del progetto> flusso delle dipendenze, ma scegli il modulo della libreria invece del progetto e aggiungi la dipendenza allo stesso modo. Nella mia risposta dico che mette il file jar nella directory build / libs nella sua directory dei moduli.
Scott Barta

1
Ho: java.lang.NoClassDefFoundError: com.loopj.android.http.RequestParams. Questa è la mia libreria esterna che sto compilando con la mia.
dum4ll3

2
Funziona solo con la libreria java e l'attività jar nella libreria Android non esiste
cuasodayleo

26

Nell'IDE di Android Studio, accedi alla " barra Esegui qualsiasi cosa ":

CTRL+ CTRL+ gradle CreateFullJarRelease+ENTER

Dopodiché troverai il tuo artefatto in questa cartella nel tuo progetto
Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


O


Gradle ha già un Taskper quello, nel menu laterale gradle, sotto la othercartella.

barra degli strumenti gradle

Quindi scorri verso il basso createFullJarReleasee fai clic su di esso.

Gradle Tasks

Dopodiché troverai il tuo artefatto in questa cartella nel tuo progetto

Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


2
Non riesco a vedere questa opzione. È stato aggiunto in una versione recente di Studio?
Dibzmania

1
Compilo e quando trovo * .jar il nome è: full.jar. 30 minuti per trovarlo lol
nobjta_9x_tq

1
Nel mio caso, l'ho trovato inbuild\intermediates\intermediate-jars\release
Yusril Maulidan Raji

Ho una domanda. Nel mio caso, genera 3 file jar. classes.jar, full.jare res.jar. Devo importare tutti i file jar ogni volta che voglio usarlo?
Yusril Maulidan Raji

Usa il full.jar
Haroun Hajem

11

Aggiungilo semplicemente al build.gradle del tuo modulo java. Includerà le librerie dipendenti nell'archivio.

mainClassName = "com.company.application.Main"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

Questo risulterà in [nome_modulo] / build / libs / [nome_modulo] .jar file.


Ma una libreria .jar avrebbe una classe principale? L'OP dice che stanno costruendo un file .jar "così posso usarlo in altri progetti" (sic). Sembra una biblioteca.
Steve White

Solo questo ragazzo lo ha effettivamente capito, solo la creazione di jar non risolve il problema. cosa succede se abbiamo bisogno di eseguirlo. Il codice precedente evita l'errore "Impossibile eseguire il file jar:" nessun attributo manifest principale "".
MobileEvangelist

1

Il file .jar verrà generato automaticamente quando si compila / esegui l'applicazione.

Puoi trovare il tuo file class.jar da root_folder / app / build / intermediates / bundles / debug

posizione del file jar


1
  1. Vai alla scheda Gradle in Android Studio, quindi seleziona il progetto della libreria.

  2. Quindi vai su Attività

  3. Quindi vai su Altro

  4. Fare doppio clic su bundleReleaseaar

Puoi trovare i tuoi .aarfile sottoyour_module/build/outputs/aar/your-release.aar

Qui l'immagine


Non vedo nessuna "scheda Gradle" da nessuna parte. Alla fine ho digitato "Gradle" nella ricerca della Guida e ho ottenuto qualcosa di simile alla tua visualizzazione Gradle. Ma l'elenco all'interno è molto diverso, molto più breve del tuo. Non è presente alcun bundleReleaseaar in Attività-> Altro. C'è un "createJar", ma quando lo clicco, ottengo "Attività 'createJar' non trovata nel progetto radice ..." Sono bloccato. E ... perché vogliamo i file .aar? L'OP ha chiesto un file .jar. È la stessa cosa>
Steve White

Ma la domanda è come .jarnon farlo.aar
Aleksey Timoshchenko

0

il modo in cui ho trovato è stato trovare l'output del compilatore del progetto (struttura del progetto> progetto). quindi trova la cartella conforme del modulo che desideri trasformare in jar, comprimila con zip e cambia l'estensione dell'output da zip a jar.


0
task deleteJar(type: Delete) {
    delete 'libs/mylibrary.jar'
}           

task exportjar(type: Copy) {
    from('build/intermediates/compile_library_classes/release/')
    into('libs/')
    include('classes.jar')
    rename('classes.jar', 'mylibrary.jar')
}

exportjar.dependsOn(deleteJar, build)

0

Se esegui un'attività gradle da AndroidStudio [Altro]

assembleRelease 
//or
bundleReleaseAar

o tramite terminale

./gradlew <moduleName>:assembleRelease
//or
./gradlew <moduleName>:bundleReleaseAar

allora sarai in grado di trovare .aarin

<project_path>/build/outputs/aar/<module_name>.aar
//if you do not see it try to remove this folder and repeat the command

.aarIl file (Android Library) è composto dal file .jar(Java Library) e da ulteriori risorse Android. .aarfile è un file zip con AAR estensione che è il motivo per cui è possibile sostituire .aarcon .zipo correre

unzip "<path_to/module_name>.aar"
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.