android - ejemplo - gradle project
Estructura de Gradle y Multi-Proyecto (2)
Estoy tratando de entender cómo debería abordar la siguiente configuración del proyecto:
┌Top Android Project
│
├── Project 1 - (Pure Java Modules)
│ │
│ ├── Module A1
│ ├── Module B1
│ :
│ └── Module Z1
│
├── Project 2 - (Android Libraries Modules)
│ │
│ ├── Module A2
│ ├── Module B2
│ :
│ └── Module Z2
│
└── Module - Actual Android Project
En la configuración actual que tengo hay un build.gradle en cada uno de los módulos, lo que realmente odio de esta configuración es que todo el contenido de build.gradle se duplica entre los módulos.
El hecho es que me gustaría la misma lógica en la mayoría de ellos, '' Pure Java Modules '' son todos los módulos de infrarrojos, que me gustaría Jar el resultado, el JavaDoc y las fuentes, y se implementan en algún repositorio remoto (* predeterminado).
Por otro lado, algunos módulos de los '' Módulos Pure Java '' me gustaría tener una segunda agenda, por ejemplo, aparte de la compilación predeterminada *, me gustaría implementar un contenedor con dependencias para un proyecto específico, o algo así .
Al construir el proyecto real de Android , me gustaría que los módulos se compilen en la compilación predeterminada * y, finalmente, configurar un build.gradle predeterminado para todos mis proyectos de Android, que son bastantes, y no me gustaría duplicarlo. archivo.
=============================================== =============
Creo que lo que estoy buscando es algo así como Maven parent pom, pero como no entiendo completamente cómo funciona Gradle, les estoy abriendo la puerta para que compartan sus pensamientos ...
Teniendo en cuenta que duplicar el mismo archivo de compilación es (me atrevo a decir) inaceptable, debido al hecho de que podría querer cambiar algo en toda la lógica de compilación de todos los módulos
¿Cuál sería el mejor enfoque para manejar este tipo de configuración?
La mayoría de esto es bastante normal en la página http://www.gradle.org/docs/current/userguide/multi_project_builds.html . Sin embargo, vas a necesitar agregar
evaluationDependsOn('':project1'')
evaluationDependsOn('':project2'')
para que gradle evalúe el proyecto1 y el proyecto2 antes del módulo. En todos los proyectos que contienen código, necesitarás tener un archivo build.gradle vacío. Esto también le permitirá personalizar un proyecto si es necesario.
Ejemplo: https://github.com/ethankhall/AndroidComplexBuild
Agregue un build.gradle en la raíz de sus proyectos. Entonces necesitas 4 que tengan información útil.
/build.gradle
/settings.gradle
/project1/build.gradle
/project2/build.gradle
/module/build.gradle
en / build.gradle poner
dependencies {
project(":module")
}
en / settings.gradle put
include '':module''
include '':project1'', '':project1:A1'', '':project1:B1'', '':project1:Z1''
include '':project2'', '':project2:A2'', '':project2:B2'', '':project2:Z2''
en /project1/build.gradle put
apply plugin: ''java''
subprojects {
apply plugin: ''java''
sourceCompatibility = JavaVersion.VERSION_1_6
targetCompatibility = JavaVersion.VERSION_1_6
repositories{
mavenCentral()
}
//Anything else you would need here that would be shared across all subprojects
}
/project2/build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''com.android.tools.build:gradle:0.4.2''
}
}
subprojects {
apply plugin: ''android-library''
android {
compileSdkVersion 17
buildToolsVersion "17.0"
}
sourceCompatibility = JavaVersion.VERSION_1_6
targetCompatibility = JavaVersion.VERSION_1_6
repositories{
mavenCentral()
}
//Anything else you would need here that would be shared across all subprojects
}
en /module/build.gradle poner
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''com.android.tools.build:gradle:0.4.2''
}
}
evaluationDependsOn('':project1'')
evaluationDependsOn('':project2'')
apply plugin: ''android''
android {
compileSdkVersion 17
buildToolsVersion "17.0"
}
dependencies {
compile project(":project1:A1")
compile project(":project1:B1")
compile project(":project1:Z1")
compile project(":project2:A2")
compile project(":project2:B2")
compile project(":project2:Z2")
}
Si tiene carpetas que coincidan con esa estructura, puede aplicar la misma lógica de compilación a múltiples proyectos.
Si su settings.gradle contiene
include '':project2:moduleA2''
entonces '': project2'' también es un proyecto, y puede tener su propio build.gradle, en el que puede escribir:
subprojects { project ->
apply plugin ''android-library''
// more configuration
}
Si no aplicas ningún complemento a '': project2'' en sí, entonces este proyecto simplemente no generará nada (que probablemente sea lo que deseas), pero de esa manera puedes configurar todo su subproyecto de una sola vez.
Entonces también puede hacer que todos sus submódulos pongan alguna lógica que sea específica para ellos
También puede hacerlo técnicamente en project2 / build.gradle si desea mantenerlo todo en el mismo archivo. Puede leer http://www.gradle.org/docs/current/userguide/multi_project_builds.html para ver cómo configurar subproyectos desde un archivo build.gradle primario, acceder a todos los subproyectos o uno específico, o usar el filtrado.