Android Gradle agrega una biblioteca externa y bibliotecas externas anidadas a un proyecto
-
20-12-2019 - |
Pregunta
¿Cómo agrego una biblioteca externa y bibliotecas externas anidadas a un proyecto de Android?
Estructura de mi proyecto (No se permite cambiar)
- Aplicaciones/
- Aplicación1/
- construir.gradle
- configuración.gradle
- bibliotecas/
- biblioteca1/
- grado de construcción
- configuración.gradle
- biblioteca2/
- grado de construcción
- configuración.gradle
- biblioteca3/
- grado de construcción
- configuración.gradle
- biblioteca4/
- grado de construcción
- configuración.gradle
- biblioteca1/
- Aplicación1/
Aplicación1
Aplicación1/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 no depende directamente de library3
o library4
, sin embargo, se quejará si no los incluyo en las dependencias del build.gradle
archivo y el settings.gradle
archivo.Entonces, los incluí solo para evitar que se queje.
Aplicación1/settings.gradle
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
biblioteca1
biblioteca1/build.gradle
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':..:library3')
compile project(':..:library4')
}
android {
...
}
biblioteca1/settings.gradle
include ':'
include '..:library3'
include '..:library4'
biblioteca2..4
biblioteca2..4/build.gradle
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
...
}
biblioteca2..4/settings.gradle
include ':'
Al intentar gradlew clean build
en App1
Obtuve el siguiente error:
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'.
La línea 15 es compile project(':..:library3')
en el library1/build.gradle
archivo.
¿Cómo agrego una biblioteca externa y bibliotecas externas anidadas a un proyecto de Android?
Solución
En su archivo de nivel superior settings.gradle (App1/settings.gradle), haga algo como esto para cada biblioteca
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')
Elimine los otros archivos settings.gradle, no los necesita
luego, en cada script de compilación solo necesitas usar
compile project (':library1')
compile project (':library2')
etc....
como se indicó anteriormente, simplemente use un único archivo settings.gradle en el proyecto raíz (App1).
Luego, desde su carpeta App1, ejecute gradlew clean :library1:build
para validar que la biblioteca1 se esté compilando correctamente.
En cuanto al problema de que App1 se queja de que faltan las bibliotecas 3 y 4, ¿está seguro de que no tiene ningún código en la aplicación que haga referencia directa a estas bibliotecas? O eso o las bibliotecas no se encuentran al compilar la biblioteca1.Construya cada biblioteca individualmente para validar que todas se construyan correctamente.
Otros consejos
Una pregunta.¿Necesita este árbol de dependencia?
--- App
|--- Library 2
|--- Library 1
|--- Library 3
|--- Library 4
En caso afirmativo, su aplicación no necesita importar las bibliotecas 3 y 4.Estas dependencias están disponibles en la Biblioteca 1.
Acerca de los archivos settings.gradle.¿Por qué uno en cada módulo?Este archivo solo se usa en el proyecto raíz (como el espacio de trabajo de Eclipse) para hacer referencia a sus módulos (Aplicación, Biblioteca 1, Biblioteca 2, etc.)
¿Esto te ayuda?
Estoy haciendo esto para rutas relativas:
include '..:ambilWarna'
include '..:excel'
include '..:pdfjet'
include '..:commons'
include '..:volley'
include ':odb2'
include ':azure'
include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'