Estrategias para administrar las dependencias de Gradle | de Saurabh Pantalones | mayo 2022

¡Tú decides cómo gestionar las dependencias!

Fuente: Casual.PM En la vida de un desarrollador de Android, las dependencias de la biblioteca están en el corazón del proyecto. Estas dependencias de la biblioteca crecen a medida que crece el proyecto a medida que crecen nuestros módulos, funcionalidades y requisitos. Por lo tanto, se vuelve algo difícil mantenerlos de la mejor manera posible y ponerlos a disposición de todos los módulos del proyecto.estrategia 1: Entonces, comencemos con la forma estándar de administrar las dependencias: agregando las dependencias en app.gradledependencies del proyecto { androidx.fragment:fragmento-ktx:1.3.6 implementación androidx.actividad:actividad-ktx:1.3.1 implementación}Bueno, esto funciona bien siempre que tenga un proyecto de un solo módulo y al menos nueve o diez bibliotecas. Además, esto no parece una forma simplificada, porque una vez que ingrese al campo de múltiples módulos, encontrará que

  • Los diferentes módulos usan las mismas bibliotecas y luego administrar la actualización de la versión en ellos se vuelve agitado.
  • Uno puede perderse en el conjunto de bibliotecas cuando busca una biblioteca.

Así que intentemos un enfoque diferente.estrategia 2: En esta estrategia intentaremos separar nuestras dependencias de forma que podamos agruparlas fácilmente por categorías o de cualquier otra forma que nos resulte cómoda. Creamos un dependencies.gradle en nuestro proyecto principal y en él creamos extensiones bajo la palabra clave ext como este texto {androidX = [compat : ‘androidx.appcompat:appcompat:1.3.1’,recycler : ‘androidx.recyclerview:recyclerview:1.3.1’,cardview : ‘androidx.cardview:cardview:1.3.0’,]red = [retrofit : ‘com.squareup.retrofit2:retrofit:2.9.0’,]tu = [dagger : ‘com.google.dagger:dagger:2.40.5’,] ….}Como podemos ver ahora, hemos agrupado nuestras dependencias por tipo. Ahora tenemos androidX, dataConverters, network, di, etc. Ahora, ¿qué pasa si tenemos la misma versión para varias bibliotecas? Podemos crear constantes como def CompatVersion = ‘1.3.1’def DaggerVersion = ‘2.40.5’def NetworkVersion = ‘2.9.0’ Ahora podemos hacer referencia a estas constantes como compat: ‘androidx.appcompat:appcompat:$CompatVersion’ Entonces, ¿cómo consulte estas extensiones en nuestra app.gradle? Para esto, primero proporcionamos la referencia a dependencies.gradle de esta manera: «../dependencies.gradle» Ahora podemos agregar estas dependencias agrupadas usando la extensión del objeto del proyecto de esta manera {Proyecto de implementación.ext.androidX.values() Proyecto de implementación.ext.ktx.values() Proyecto de implementación.ext.dataConverters.values() Proyecto de implementación.ext.network.values() Proyecto de implementación.ext.di.values()}¡Sí! Ahora esto parece mejor y manejable. Si bien no he encontrado un problema importante con este enfoque, sus dependencias no aparecen en el módulo de configuración del proyecto.Estrategia 3: Si desea un método más específico para sus dependencias, use catálogos de versiones. Según Gradle, la definición del catálogo de versiones es la siguienteFuente: Wikipedia

Un catálogo de versiones es una lista de dependencias, representadas como coordenadas de dependencia, que un usuario puede elegir al declarar dependencias en un script de compilación.

Las ventajas del catálogo de versiones son

  • habilita la finalización automática en el IDE
  • Centralización de dependencias para todos los módulos.
  • Agrupación de Dependencias

El resultado del catálogo de versiones parece dependencias. {Implementación libs.core.ktx Implementación libs.bundles.compose Implementación libs.bundles.lifecycle}¿No es genial? Veamos la configuración para este tipo de gestión. Si está utilizando una versión de Gradle anterior a la 7.0, puede habilitar esta función agregando la siguiente línea en settings.gradleenableFeaturePreview(«VERSION_CATALOGS»). Tienes una sección de gestión de resolución en settings .gradle comodependencyResolutionManagement {}Ahora podemos definir nuestras dependencias en versionCatalogs -> libsdependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)Repositorios {google()mavenCentral()}catálogos de versiones { bibliotecas {}}}En los catálogos de versiones tenemos muchas opciones que podemos utilizar como queramos en el proyecto. Defina una versión para la versión de dependencia (‘compose’, ‘1.4.0’). Activity’, ‘activity-compose’). abrigarse Palabra clave. Incluso podemos definir un complemento como plugin(‘jmh’, ‘me.champeau.jmh’).version(‘0.6.5’). Hay una última sección importante que debemos cubrir si desea compartir sus dependencias entre proyectos. Podemos hacer esto usando el formato de archivo TOML (Tom’s Obvious Minimal Language). Es decir, el formato TOML contiene cuatro secciones [versions], [libraries], [bundles] y [plugins]. Por ejemplo, el módulo libs anterior se puede definir en TOML como[versions]componer=»1.4.0″composeui=»1.1.1″[libraries]componer-actividad = { módulo = «androidx.actividad:actividad-componer», versión.ref = «componer» }componer-ui = { módulo = «androidx.compose.ui:ui», versión.ref = «composeui» }[bundles]componer = [«composeui», «<other libraries ref>»][plugins]jmh = { id = «me.champeau.jmh», version = «0.6.5» }Y podemos importar esto en nuestro Gradle asfrom(files(«../libs.versions.toml»)).

De forma predeterminada, el archivo libs.versions.toml es una entrada para el catálogo de libs. Es posible cambiar el nombre del catálogo por defecto, por ejemplo si ya tienes una extensión con el mismo nombre

dependencyResolutionManagement {defaultLibrariesExtensionName.set(‘projectLibs’)}Y hay muchas más opciones que proporcionan los catálogos de versiones. Puedes consultar aquí si quieres saber más al respecto. Puede elegir qué método se adapta a su proyecto, pero pruebe la catalogación de versiones. Además, si usa una forma diferente de administrar las dependencias, compártala. Espero que esto sea útil. Hasta la proxima vez !! ¡De abajo hacia arriba!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.