Gradle Android Aggiunta di biblioteca esterna e librerie esterne annidate a un progetto
-
20-12-2019 - |
Domanda
Come aggiungo una libreria esterna e librerie esterne annidate a un progetto Android?
.
La mia struttura del progetto (non è consentita modificare)
- .
- apps /
- .
- app1 /
- .
- build.gradle
- Impostazioni.Gradle
- app1 /
- Biblioteche /
- .
- library1 /
- .
- build.grade
- Impostazioni.Gradle
- library1 /
- Library2 /
- .
- build.grade
- Impostazioni.Gradle
- .
- build.grade
- .
- build.grade
.
app1
app1 / build.gradle
buildscript {
...
}
apply plugin: 'android'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':..:libraries:library1')
compile project(':..:libraries:library2')
compile project(':..:libraries:library3')
compile project(':..:libraries:library4')
}
android {
...
}
.
APP1 non dipende direttamente da library3
o library4
, tuttavia, si lamenterà se non li includerà nelle dipendenze nel file build.gradle
e nel file settings.gradle
. Quindi, li ho inclusi solo per fermarlo dal lamentarsi.
App1 / Impostazioni.Gradle
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
.
.
Library1
Library1 / build.gradle
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':..:library3')
compile project(':..:library4')
}
android {
...
}
.
Library1 / Impostazioni.Gradle
include ':'
include '..:library3'
include '..:library4'
.
.
Library2..4
Library2..4 / build.gradle
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
...
}
.
Library2..4 / Impostazioni.Gradle
include ':'
.
.
Quando si tenta di generarecodicitagcode su gradlew clean build
ottengo il seguente errore:
FAILURE: Build failed with an exception.
* Where:
Build file '/home/user/projects/branches/branch1/Apps/libraries/library1/build.gradle' line: 15
* What went wrong:
A problem occurred evaluating project ':..:library:library1'.
> Project with path ':..:library3' could not be found in project ':..:library:library1'.
.
Linea 15 è App1
nel file compile project(':..:library3')
.
Come aggiungo una libreria esterna e librerie esterne annidate a un progetto Android?
Soluzione
Nel tuo livello Top Levetti.Gradle (App1 / Impostazioni.Gradle) File Fai qualcosa del genere per ogni libreria
include ':library1'
include ':library2'
include ':library3'
include ':library4'
project(':library1').projectDir = new File(rootProject.projectDir, '../libraries/library1')
project(':library2').projectDir = new File(rootProject.projectDir, '../libraries/library2')
project(':library3').projectDir = new File(rootProject.projectDir, '../libraries/library3')
project(':library4').projectDir = new File(rootProject.projectDir, '../libraries/library4')
.
Rimuovi gli altri file Settings.Gradle, non ne hai bisogno
Quindi in ogni script di build devi solo usare
compile project (':library1')
compile project (':library2')
etc....
.
Come indicato sopra, usa un singolo file Impostazioni.Gradle nel progetto Root (APP1).
Poi dalla cartella APP1 eseguire gradlew clean :library1:build
per convalidare che la libreria1 è la costruzione corretta.
Per quanto riguarda il problema su APP1 che si lamentano delle librerie mancanti 3 e 4, sei sicuro di non avere alcun codice nell'app che fa riferimento direttamente a queste librerie, o che o le librerie non vengono trovate durante la compilazione della libreria1.Costruisci ogni biblioteca singolarmente per convalidare, costruiscono tutti ok.
Altri suggerimenti
Una domanda. Hai bisogno di questo albero di dipendenza?
--- App
|--- Library 2
|--- Library 1
|--- Library 3
|--- Library 4
.
Se sì, la tua app non ha bisogno di importare le librerie 3 e 4. Queste dipendenze sono disponibili sulla libreria 1.
Informazioni sui file Impostazioni.Gradle.Perché uno in ogni modulo?Questo file viene utilizzato solo nel progetto root (come l'area di lavoro Eclipse) per fare riferimento ai moduli (app, libreria 1, libreria 2, ecc ...)
Questo ti aiuta?
Lo sto facendo per i relativi percorsi:
include '..:ambilWarna'
include '..:excel'
include '..:pdfjet'
include '..:commons'
include '..:volley'
include ':odb2'
include ':azure'
include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'
.