Crea una libreria Jar Android per la distribuzione


160

Conosco progetti della Biblioteca Android, che ti consentono di creare un progetto di origine condivisa che può essere inserito in Applicazioni Android, se necessario. Tuttavia, ciò richiede che la fonte sia disponibile.

Sto cercando un modo per costruire e distribuire una libreria a codice chiuso che può essere utilizzata in altri progetti Android come un JAR tradizionale. Ciò richiederà l'utilizzo del compilatore Android, quindi non è un file JAR vanilla-Java. FWIW, non ho bisogno di incorporare risorse / layout nel JAR.

Ho visto http://andparcel.com/ ma sembra una soluzione alternativa e preferirei utilizzare qualcosa di "supportato ufficialmente" da Google. Inoltre, devo assicurarmi che il JAR che costruisco sia compatibile con la vecchia / nuova versione dell'SDK di Android (cioè ho bisogno di un modo per impostare la versione della piattaforma di destinazione, ecc.).

Gli ultimi set di strumenti Android consentono la creazione / il consumo di file binari JAR? Puoi indicare una documentazione su come posso farlo?


hai una risposta alla tua domanda? Ho un requisito simile ... Come hai fatto a creare file jar?
Krishnabhadra

Per distribuire un file .jar per Android non è necessario il compilatore Android dx, il normale complier Java funziona. Se distribuisci un jar, questo viene convertito in bytecode dx quando viene creata l'app.
ThomasW,

Risposte:


49

Se si crea un progetto Libreria Android senza risorse, ADT (notato per la prima volta in r16) creerà un file .jar con lo stesso nome del progetto nella cartella 'bin'.



1
Questo mi dà il vaso, ma devo ancora distribuire la cartella delle risorse? Sto provando a creare un blocco dello sherlock della barra delle azioni e i miei progetti non verranno compilati perché non riescono a trovare le risorse della barra delle azioni.
Nathan Schwermann,

1
@schwiz funziona solo per progetti senza risorse (come affermo nella risposta). Altrimenti è necessario importarlo come progetto di libreria Android standard.
Freddroid,

1
È ancora vero? Non vedo myapp.jarnella /bincartella. C'è classes.jar, ma non è così, vero?
garbagecollector

Sto eseguendo l'ultimo ADT e ottengo ancora un <nome del progetto> .jar nella mia cartella / bin. Ma se il tuo progetto dipende dalle risorse non va bene e il progetto deve essere incluso come progetto di biblioteca (hai comunque un file .jar.
Freddroid

23

Android non fornisce un tipo speciale di Android-JAR. Ma quello che puoi fare è aggiungere un build.xml al tuo progetto e costruire il JAR con la formica.

Il mio build.xml è simile al seguente:

<project name="MyAndroidLib" default="dist" basedir=".">
  <description>
This is my Android lib
  </description>
  <!-- set global properties for this build -->
  <property name="src" location="src" />
  <property name="bin" location="bin" />

  <target name="jar">
    <jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
      <!-- replace 'com' by what ever you are using -->
      <!-- as first part of the package name -->
      <!-- e.g. de, org, ... -->
      <!-- the ** is important to include the directory recursively -->
      <include name="com/**" />
    </jar>
  </target>
</project>

Costruisci il JAR eseguendolo ant jarnella cartella principale dei tuoi progetti.


Ho provato questo ed è stato in grado di creare un file JAR, ma la dimensione era dispari (solo 343 byte), rispetto a quando si esportava una libreria in JAR. Qualche idea su quali bandiere manchino?
Shane Oliver,

Puoi controllare il contenuto del JAR con un programma di archiviazione (JAR è ZIP) e vedere cosa manca e aggiungerli. Puoi trovare maggiori informazioni qui: ant.apache.org/manual/Tasks/jar.html
white_gecko

5
Con gli ultimi SDK Android, i file Java vengono compilati bin/classes, quindi <jar destfile="MyAndroidLib.jar" basedir="bin/">dovrebbe essere<jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
Theo

17

È possibile creare un progetto Java "normale" e importare da lì Android.jar. Quindi, avrai accesso a tutti i componenti dell'SDK. Quindi, puoi esportare il tuo progetto come jar ... e caricarlo dalla tua app Android. Funziona benissimo e sembra un modo semplice per farlo.


1
In tal caso, come dichiarare i componenti della biblioteca come servizi, attività, emittenti televisive, filtri di intent. L'applicazione client deve contenere manifest tutte queste dichiarazioni?
Ron,

@ferostar Come posso importare android.jar nel progetto java?
Krishnabhadra

Nel caso in cui la libreria disponga di risorse, come generare un R.java e aggiungerlo a JAR

15

vai alle proprietà del progetto di cui vuoi creare jar. Fai clic sulla scheda Android. e spunta nella libreria Is. ora puoi vedere il file .jar nella cartella bin. usalo dove vuoi usare.


2
Questo sembra funzionare se LibraryProject non ha risorse. Qualche idea su come farlo funzionare con le risorse?
Nathan Schwermann,

Questa è una cattiva risposta, tuttavia, se il progetto della biblioteca dipende da altri progetti. Tali riferimenti non saranno raccolti.
stevebot,

10

L'unica soluzione "ufficialmente supportata" da Google è il progetto Library e richiede la distribuzione del codice sorgente. È possibile creare un JAR in modo normale, ma non è possibile includere o fare riferimento a risorse al suo interno.

Sfortunatamente penso che non sia anche possibile includere un JAR impacchettato all'interno di un progetto Library, come mezzo per aggirare il requisito del codice sorgente.


"È possibile creare un JAR in modo normale, ma non è possibile includere o fare riferimento a risorse al suo interno." <- Non sembra funzionare correttamente in Eclipse se faccio riferimento a classi Android o utilizzo il compilatore Android. Indizi su come farlo funzionare?
psychotik,

5
Creo semplicemente un normale progetto Java in Eclipse, aggiungo android.jar al percorso di compilazione, quindi seleziona Esporta - Java - File Jar.
Jeff Gilfelt,

@JeffGilfelt e se includi android.jar per l'esempio della directory sdk android-13, sarai in grado di usare la tua libreria jar ancora nei progetti per un livello API superiore?
Fran Marzoa,

10

Nell'ultima build di Android Studio 1.2, la creazione della libreria JAR è stata semplificata come punta e clicca.

Passaggi da seguire:

  • Vai a File -> Nuovo -> Nuovo modulo inserisci qui la descrizione dell'immagine
  • Selezionare "Libreria Java" alla fine dell'elenco delle opzioni inserisci qui la descrizione dell'immagine
  • Inserisci il nome della libreria jar e il nome della classe in esso e premi il pulsante Fine inserisci qui la descrizione dell'immagine
  • Questo è tutto !

Il prossimo passo è aggiungere la tua libreria Jar come dipendenza nella tua app. Semplice come quello

  • Vai a File -> Struttura del progetto -> Seleziona 'app' -> Seleziona 'Dipendenza'
  • Seleziona "+" in basso -> Seleziona "Dipendenza del modulo" inserisci qui la descrizione dell'immagine
  • Seleziona il tuo modulo lib jar che hai appena creato sopra inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine
  • Seleziona Ok e il gioco è fatto!

.... O potresti semplicemente aggiungere la riga sotto al tuo file gradle App

dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar']) // Default Gradle Task, should be already present
      compile 'com.android.support:appcompat-v7:21.0.3' // Default Gradle Task, should be already present

      compile project(':nameOfYourJarLibraryModule') // This is your jar library module
 }

Google sta promuovendo Android Archive (AAR), anche se JAR supportato viene riportato in Android Studio. Per scoprire la differenza tra AAR e JAR, fai riferimento a questo link


Non capisco come questo crei un nuovo file jar. Sembra che tu stia creando un nuovo modulo che verrà utilizzato come libreria nel tuo progetto Android
Jejefcgb,

Che cosa?! crei un nuovo barattolo dal nulla?
Ewoks,

@Ewoks: dopo aver creato il modulo, devi aggiungere le classi ad esso. Una volta fatto, lo aggiungi come dipendenza
Nishant.

2
La domanda era: esiste una libreria implenentata con codice sorgente. Come realizzarlo in modo che solo il jar venga utilizzato in un altro progetto anziché in tutto il codice sorgente della libreria .. O mi sono perso qualcosa?
Ewoks,

2
@Nishant. Ha funzionato per me! Grazie!
ramires.cabral

6

Prova questo: funziona

1) trasforma il progetto della tua biblioteca in un normale progetto deselezionando il flag IsLibrary.

2) Esegui il tuo progetto come Applicazione Android. (Non mostrerà alcun errore)

3) troverai un file .jar nella cartella bin insieme a .apk.

4) Offri .jar a chi desidera utilizzare la tua libreria.

5) Di 'loro di importare solo un vaso esterno nel percorso di costruzione.

questo funzionerà bene con tutte le risorse. buona fortuna.


1
Devo correggere questo post: i file JAR possono contenere solo codice, nessuna risorsa Android. Se sono incluse / necessarie risorse, dobbiamo mantenere aperto il progetto della biblioteca e non possiamo semplicemente usare un semplice file JAR.
cody

@cody: come possiamo generare il file jar insieme alle risorse e utilizzarlo in un altro progetto?
Mahantesh M Ambi

1

L'ADT crea una cartella bin che contiene tutti i file di classe per tutti i file e le directory di origine corrispondenti nel progetto, è possibile utilizzare il comando jar, creare un archivio jar contenente questi file e directory di classe e presumere la propria libreria, ma ovviamente il il livello della piattaforma dei file di classe verrebbe mirato solo per il livello corrente della costruzione del progetto; per ogni livello di piattaforma sarebbe necessario un file jar diverso; Tuttavia, il bello di questo è che il file R.class è incluso nella struttura di directory del progetto e quindi si ha accesso alle sue risorse. Non so se questo è il modo ufficiale di fare cose in Android, ma ha funzionato per me.


0

Nel nostro progetto, stiamo creando apk (usando apkbuilder) che è installato in / system / framework e ha aggiunto questo apk nel percorso di classe predefinito. Per la compilazione di applicazioni utilizzando il jar, stiamo creando un file jar (utilizzando jar c).

Nota: non abbiamo risorse nella libreria.


0

.jar è solo un file .zip che contiene il file .class (puoi provare a cambiare l'estensione di qualsiasi file .jar in .zip, quindi vedere il risultato). Facilmente, puoi creare qualsiasi libreria .jar per qualsiasi scopo comprimendo il file .class.


Non è assolutamente vero, vedi en.wikipedia.org/wiki/JAR_(file_format) per differenze sottili (ordinando principalmente le voci all'interno dello ZIP)
iddo

0

Passaggi:

1) Apri il file project.properties

2) Aggiungi valore android.library=true

3) Salva file

4) Dal menu Eclipse per il progetto, selezionare build automaticamente, quindi selezionare clean

Risultato: il nuovo vaso viene creato sotto il cestino .

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.