2015-06-10 13 views
9

Ho creato una libreria di Android (chiamato MyLib) che dipende altra libreria accessibile esperto di pronti contro termine (come GSON, retrofit, etc.).Come specificare le dipendenze nella libreria di aar?

MyLib 
| 
|-- Retrofit 
|-- Gson 
|-- ... 

MyLib è confezionato in un file aar.

L'obiettivo è quello di pubblicare una libreria AAR, che può essere incluso in un app Android (chiamato MyApp) senza specificare una seconda volta le dipendenze che MyLib usi.

MyApp 
| 
|-- MyLib 
| |-- Retrofit 
| |-- gson 
| |-- ... 

Questo è il mio build.gradle programma per MyLib

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.google.code.gson:gson:2.3.1' 
} 

Ora, se voglio costruire e gestire MyApp senza dipendenza problema, ho dovuto usare la seguente configurazione .gradle per MyApp (se non si specifica retrofit e gson come deps, un runtime ex viene lanciata l'inganno perché i deps non sono disponibili).

dependencies { 
    compile('[email protected]') 

    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.google.code.gson:gson:2.3.1' 
} 

Non voglio specificare in MyApp le dipendenze che vengono utilizzati all'interno MyLib, Come dovrei scrivere i miei file build.gradle?

Thansk in anticipo

+0

Se MyLib è locale, è necessario utilizzare il progetto di compilazione (': MyLib') –

+0

Sì, MyLib è locale ma impacchettato in un aar. MyLib e MyApp non sono nello stesso progetto. Si tratta di due diversi progetti. – reevolt

+0

È sempre possibile fare riferimento a un'altra cartella esterna al projetc –

risposta

2

Quando la pubblicazione di un aar in un repository maven (locale o remoto) e comprendente utilizzando compile ([email protected]) dipendenze transitive sono disattivati.

Per abilitare le dipendenze transitive per una libreria aar:

compile ('com.mylib:mylib:[email protected]'){ 
     transitive=true 
} 

Si può leggere di più su questo qui:

Can an AAR include transitive dependencies?

Questo funziona con aar librerie che sono pubblicati in una remota o locale repository di maven, nel tuo caso sembra che la libreria non verrà pubblicata nemmeno su un repository di maven locale. Non riesco a trovare alcuna informazione definitiva sul fatto che funzionerà nelle tue circostanze, ma dovresti fare un tentativo.

+1

Sono ora in grado di generare un file pom-default.xml che contiene i deps quando si costruisce la libreria di aar da pubblicare sul repository locale (usando i plugin maven e maven-publish gradle). Ma questo file pom non è incluso nell'archivio di aar (è visibile solo nella cartella build ma non è incluso nell'archivio finale).Come posso inserirlo all'interno dell'archivio di aar? – reevolt

+0

@BrentM, è la stessa cosa menzionata nella domanda possibile, se il file di aar è presente nella directory libs dell'applicazione Android: compile (nome: 'library_name', ext: 'aar') Capisco che non hai trovato qualsiasi informazione definitiva per questo caso d'uso. Ma, c'è qualche aggiornamento che hai riguardo a questo? Grazie! – garnet

Problemi correlati