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

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?

¿Fue útil?

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'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top