Android Arsenal – Gradle Plugin

¿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.

.

Compruebe también

El arsenal de Android: la cámara

Ser permitido cámara casera Seleccione Foto Enviar resultado Instalar Soporta API 21 y posteriores Paso …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *