¿Qué es esto?
// ¡Publicación de blog con plena motivación para venir! Estén atentos
Para grandes proyectos de Android alojados en repositorios mono, administrar nombres de módulos podría ser una verdadera molestia, especialmente cuando tenemos muchas partes móviles bajo una estructura impulsada por subproyectos de Gradle anidados.
Este complemento experimental intenta resolver eso. Analice un árbol de proyecto como este
.
├── aplicación
│ └── src
│ └── principal
│ ├── AndroidManifest.xml
│ ├── java
│ └── res
├── build.gradle
├── buildSrc
│ ├── build.gradle.kts
│ └── src
│ └── principal
│ └── kotlin
├── común
Core ├── core
│ │ ├── build.gradle
│ │ └── src
│ │ └── principal
│ └── utils
│ ├── build.gradle.kts
│ └── src
│ └── principal
├── características
│ ├── en casa
│ │ ├── build.gradle
│ │ └── src
│ │ └── principal
│ └── iniciar sesión
│ ├── build.gradle
│ └── src
│ └── principal
El |
El |
└── settings.gradle
y
- incluyen automáticamente todos los módulos encontrados en
settings.gradle
- escribe 2 archivos Kotlin en su
buildSrc / src / main / kotlin
:
// Generado por el complemento MagicModules. ¡Cuidado con tus linters!
import kotlin.String
import kotlin.collections.List
objeto Bibliotecas {
const val FEATURES_HOME : String = ": Características: inicio " [19659021] const val FEATURES_LOGIN : String = ": características: inicio de sesión " [19659021] const val [19659016] COMMON_CORE : String [19659015] = ": común: núcleo "
const val COMMON_UTILS : Cadena = ": común : utils "
val allAvailable : List < String > =
listOf (
FEATURES_HOME ,
FEATURES_LOGIN ,
COMMON_CORE ,
UTILES COMUNES
)
}
// Generado por el complemento MagicModules. ¡Cuidado con tus linters!
import kotlin.String
import kotlin.collections.List
object Aplicaciones {
const val APP : String = ": app "
val allAvailable : [19659018] Lista < Cadena > =
listOf (
APLICACIÓN
)
}
De esta forma, los refactores alrededor de la estructura del proyecto serán un poco más fáciles, ya que las dependencias de build.gradle
configuración
{
proyecto de implementación ( Bibliotecas . COMMON_UTILS )
implementación " org.jetbrains.kotlin: kotlin-stdlib-jdk8: $ k otlin_version "
implementación .. .
}
se detendrá si common / utils
se mueve. La nueva constante en buildSrc
se asignará y estará lista para su uso.
También podemos agregar fácilmente todas las bibliotecas a una aplicación monotlítica
dependencias {
Bibliotecas . allAvailable . cada {proyecto de implementación (it)}
}
Configuración
Para probar este complemento, puede tomar una compilación de instantánea desde Jitpack. Agregue este fragmento a su settings.gradle
buildscript {
repositorio {
mavenCentral ()
maven {url & # 39; https://jitpack.io & # 39; }
}
dependencias {
classpath & # 39; com.github.dotanuki-labs: magic-modules: & # 39;
}
}
aplique el complemento : " io.labs.dotanuki.magicmodules "
y elimine todo incluyendo
incluyendo ] & # 39; aplicación & # 39;
incluye & # 39; característica A & # 39; & # 39;
incluye & # 39; característica B incluye
incluye
característica C & # 39;
incluye .. .
Ya no son necesarios.
Si su proyecto utiliza un diseño de múltiples aplicaciones, con aplicaciones que son autónomas para sus funciones / pantallas, puede optar por no incluir todos los módulos com.android.application
para reducir el tiempo de configuración a nivel local y eventualmente construir tiempos en CI.
rootProject . nombre = & # 39; proyecto-impresionante & # 39; [19659083]
aplique el complemento : " io.labs.dotanuki.magicmodules "
magicModules {
includeApps = falso
}
incluye & # 39; : aplicación & # 39;
Archivos de compilación de Gradle correspondientes Este complemento acompaña su árbol de proyectos e inspecciona todos build.gradle
y build.gradle.kts
archivo para saber si el módulo relacionado corresponde a una biblioteca de Android, una biblioteca JVM o una aplicación de Android. Esto significa que Magic Modules
es sensible a cómo se aplican los complementos en los scripts de compilación de Gradle, por ejemplo, utilizando
para aplicar el complemento : & # 39; com.android. biblioteca & # 39;
o
complemento {
Kotlin ([19659064] " JVM " [19659106])
}
Este complemento hace todo lo posible para detectar todos los casos comunes, pero puede no funcionar si
- (1) tiene alguna estrategia para compartir la lógica de construcción a través de los módulos Gradle y
- (2) aplicó el complemento de aplicación
o biblioteca
usando esta lógica de compilación compartida para módulos
Creación y prueba
Para crear este complemento y publicarlo localmente para prueba [19659112] ./ gradlew publishingToMavenLocal
Para realizar todas las comprobaciones, incluidas las pruebas de integración
./ gradlew ktlintCheck prueba
Para verificar los registros generados por este complemento y averiguar cómo este complemento funciona, tenemos un proyecto de muestra disponible
cd muestra
./gradlew clean app: assembleDebug --info | grep MagicModulesPlugin
Limitaciones
La principal limitación que encontré con este enfoque es que, en este momento, el complemento genera las bibliotecas .kt
y Applications.kt
bajo el conjunto fuente principal de buildSrc
lo que significa que eventualmente hay problemas con las linters que funcionan para los archivos .
Necesito más tiempo para determinar si podemos generar dichos archivos en buildSrc / build
de alguna manera.
Trabajo adicional
Me di cuenta de que
- Podría ser útil configurar la salida de carpeta / paquete para
Libraries.kt
y Applications.kt
- Podría ser útil para capturar múltiples acopladores de script de compilación Gradle utilizando la configuración de complemento
Autor
Codificado por Ubiratan Soares (sígueme en Twitter )
Licencia
La licencia MIT (MIT )
Copyright (c) 2020 Dotanuki Labs
La autorización se otorga de forma gratuita a cualquier persona que obtenga una copia
este software y los archivos de documentación asociados (el "Software"), para ser procesados
el Software sin restricciones, incluidos, entre otros, los derechos de
usar, copiar, modificar, fusionar, publicar, distribuir, licenciar y / o vender copias de
el Software y para permitir que las personas que reciben el Software lo hagan,
sujeto a las siguientes condiciones:
El aviso de copyright anterior y esta nota de autorización deben incluirse en todos
copias o partes sustanciales del software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O
IMPLÍCITO, INCLUIDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, APTITUD
PARA UN PROPÓSITO EN PARTICULAR Y SIN INCUMPLIMIENTO. EN NINGÚN CASO LOS AUTORES O
LOS TITULARES DE LOS DERECHOS DE AUTOR SON RESPONSABLES DE CUALQUIER RECLAMACIÓN, DAÑO U OTRA RESPONSABILIDAD, SI
EN ACCIÓN DEL CONTRATO, TORTUARIO O DE OTRA MANERA, VINIENDO, FUERA O EN
CONEXIÓN CON EL SOFTWARE O USO U OTRAS OFERTAS EN EL SOFTWARE.
Necesito más tiempo para determinar si podemos generar dichos archivos en buildSrc / build
de alguna manera.
Trabajo adicional
Me di cuenta de que
- Podría ser útil configurar la salida de carpeta / paquete para
Libraries.kt
yApplications.kt
- Podría ser útil para capturar múltiples acopladores de script de compilación Gradle utilizando la configuración de complemento
Autor
Codificado por Ubiratan Soares (sígueme en Twitter )
Licencia
La licencia MIT (MIT )
Copyright (c) 2020 Dotanuki Labs
La autorización se otorga de forma gratuita a cualquier persona que obtenga una copia
este software y los archivos de documentación asociados (el "Software"), para ser procesados
el Software sin restricciones, incluidos, entre otros, los derechos de
usar, copiar, modificar, fusionar, publicar, distribuir, licenciar y / o vender copias de
el Software y para permitir que las personas que reciben el Software lo hagan,
sujeto a las siguientes condiciones:
El aviso de copyright anterior y esta nota de autorización deben incluirse en todos
copias o partes sustanciales del software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O
IMPLÍCITO, INCLUIDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, APTITUD
PARA UN PROPÓSITO EN PARTICULAR Y SIN INCUMPLIMIENTO. EN NINGÚN CASO LOS AUTORES O
LOS TITULARES DE LOS DERECHOS DE AUTOR SON RESPONSABLES DE CUALQUIER RECLAMACIÓN, DAÑO U OTRA RESPONSABILIDAD, SI
EN ACCIÓN DEL CONTRATO, TORTUARIO O DE OTRA MANERA, VINIENDO, FUERA O EN
CONEXIÓN CON EL SOFTWARE O USO U OTRAS OFERTAS EN EL SOFTWARE.
.