6

Ho iniziato a lavorare su un progetto in cui sarà necessario condividere un gruppo di classi Java attraverso un gruppo di app. In Eclipse è stato possibile creare un progetto con tutte queste classi e utilizzarlo come una libreria in uno spazio di lavoro con tutti i progetti dipendenti, ma in Android Studio non sembra possibile farlo (almeno non facilmente).Condivisione codice in Studio Android

Ho letto un sacco di post e molti di loro suggeriscono di creare un progetto di libreria, generare un file aar e utilizzarlo nei miei progetti. Ma, a quanto ho capito, questo renderà la mia libreria open-source (ho ragione?), Che non voglio. Lo sto facendo per un cliente e voglio che il codice sia privato.

Inoltre, so che un modulo può essere importato in un nuovo progetto. Ma questo crea una COPIA del modulo originale. Questo non è quello che voglio. Non voglio mantenere più copie delle stesse classi, che sconfigge completamente lo scopo della "condivisione del codice".

Esiste un buon modo per ottenere ciò che sto cercando? Qualsiasi aiuto è apprezzato.

+0

Ho modificato la domanda con una spiegazione più accurata di ciò che era possibile con Eclipse. –

+0

@greenapps, il tuo commento non è costruttivo. Google la tua domanda prima, e se per qualche strana ragione, non riesci a trovare nulla su Progetti di biblioteca, torna qui e fai una domanda. – 323go

+2

La generazione di una RAA NON espone il tuo codice. Controlla [la mia domanda su questo] (http://stackoverflow.com/questions/26531709/create-android-library-aar-including-javadoc-and-sources) – jmm

risposta

7

Hai un paio di opzioni diverse.

Un'opzione consiste nel mantenere le librerie come progetti separati e compilarle in un formato di archivio, come JAR o AAR; I file JAR sono per pura libreria Java e AAR è per le librerie Android (che contengono codice che accede alle API Android e/o ha risorse Android). Come è stato sottolineato nei commenti, AAR non ti obbliga a pubblicare il tuo codice per il mondo più di quanto farebbero i file JAR; è solo un formato di file di archivio i cui file possono essere locali al tuo computer o alla tua organizzazione.

Con il file di archivio in mano, è possibile includerlo in altri progetti.Se fai parte di un'organizzazione multi-sviluppatore, potresti trovare conveniente utilizzare un gestore di repository per pubblicare e mantenere tali librerie all'interno della tua organizzazione ed è possibile utilizzare le specifiche Maven in stile coordinato per includere le librerie nei progetti, che non è necessario copiare manualmente sul proprio computer di sviluppo.

Lo svantaggio di questo approccio è che rende un po 'più difficile apportare modifiche a tali librerie: è necessario caricare il progetto, apportare modifiche, creare un archivio e distribuire l'archivio.

L'altro approccio è di mantenere la libreria come un modulo sorgente come è stato fatto in Eclipse. Hai notato che Android Studio eseguirà una copia del modulo se lo importi tramite l'interfaccia utente, ma se elimini l'interfaccia utente e modifichi direttamente gli script di compilazione, puoi fare ciò che desideri, ossia utilizzare il modulo sul posto e condividere una singola copia tra più progetti. Per fare questo, il lavoro nel settings.gradle file di e aggiungere questo:

include ':module_name' 
project(':module_name').projectDir = new File(settingsDir, '../relative/path/to/module') 

caldamente incoraggiarvi a non utilizzare un percorso relativo pura qui; in questo esempio, il percorso è ancorato alla variabile settingsDir fornita da Gradle, che è definita come la directory in cui è stato trovato settings.gradle. Se si utilizza un percorso relativo puro (cioè non ancorato a nulla), si dipenderà dalla directory di lavoro che è la stessa in tutti gli ambienti in cui viene eseguito il file di build (riga di comando contro server Android Studio vs CI), che non è una buona cosa da assumere.

+0

Grazie mille Scott! Ho esplorato il tuo primo suggerimento e ho trovato questo utile post su come raggiungere la soluzione. http://b2cloud.com.au/tutorial/using-local-android-library-packages-aar/. –

+0

@Scott Barta, potresti spiegare un po 'di più perché usare settingsDir come ancoraggio è meglio che usare un percorso relativo puro? Per come la vedo io, il modulo della libreria DEVE essere sempre in un percorso fisso rispetto alle impostazioni del progetto dell'app. Gradino - indipendentemente dal fatto che ci si trovi in ​​CLI/AS/CI. Quindi, non importa se usi un percorso relativo ancorato o un puro. Cosa mi manca qui? – curioustechizen

+2

@curioustechizen Il percorso non è relativo alla directory contenente settings.gradle, è relativo alla directory di lavoro quando viene eseguito lo script di build. Quest'ultimo dipende da dove si esegue il comando se si costruisce dalla riga di comando, oi capricci dell'IDE se si esegue da Android Studio. È meglio renderlo esplicito. –

2

È necessario pensare nei progetti di eclissi come moduli di Android Studio/IntelliJ Idea. Quindi, è possibile generare librerie android (o java) e quindi includerle nel progetto.

Per contrassegnare un modulo Studio Android come una libreria si può andare a File ->Progetto Struttura ->sfaccettature e ci cliccare sul modulo Libreria

enter image description here

+0

. La cosa fondamentale da capire è che un progetto di Android Studio è analogo a uno spazio di lavoro di Eclipse. –

0

Puoi certamente creare e utilizzare una libreria senza renderla open source o disponibile per gli altri.

Per prima cosa, non è necessario renderlo un aar a meno che non contenga Risorse. Se sono solo classi semplici, puoi semplicemente renderlo un file .jar.

In entrambi i casi, il modo più semplice per condividere queste librerie (aar o jar) è impostare il proprio repository. Nexus e Artifactory sono i due gestori di repository più comuni.

Si conserva la libreria nel proprio progetto e quindi la si pubblica nel proprio repository interno.

Quindi, i progetti che devono utilizzare la libreria sono configurati (in gradle) per utilizzare il repository interno e ottenere la libreria da esso.

0

Ero nella stessa situazione come te e ho fondato un approccio utilizzando git. Passi da fare, per avere libreria:

  1. Creare un progetto in Android Studio.
  2. Crea modulo libreria Android in quel progetto.
  3. In tale modulo di libreria creare repository git.
  4. Aggiungi modulename.iml in .gitignore file
  5. Utilizzare GitHub o Bitbucket per l'archivio cloud privato. e spingi la tua biblioteca ad essa.
  6. Creare un nuovo modello di libreria Android in qualsiasi progetto desiderato.
  7. Chiudi Android Studio (non è sicuro che sia obbligatorio).
  8. Utilizzando explorer passare alla cartella del modulo creato.
  9. Rimuovi tutti i dati al suo interno, ad eccezione di modulename.iml.
  10. Clona la tua libreria da "GitHub" al suo interno.

Questo è tutto.

Ora è possibile utilizzare la libreria in più progetti, a casa o al lavoro. Subito dopo aver terminato il lavoro, non dimenticare di trasferire le modifiche alla libreria. E dopo averne aperto uno nuovo, tirali. Penso che tu possa automatizzare questa cosa in qualche modo.

Il vantaggio è che non è necessario costruire alcun vaso o aar.