Diferentes formas de lidiar con las dependencias de Android Gradle | de Pooja Shaji | marzo 2023

Como desarrollador de Android, usa Gradle para agregar dependencias, configuraciones, tareas, etc. relacionadas con su proyecto. Es fácil actualizar una aplicación básica. A medida que aumenta el tamaño de la aplicación, los desarrolladores también deben considerar el mantenimiento adecuado de las versiones, bibliotecas, complementos y paquetes que son la fuente principal de las aplicaciones. Como teoría común en la codificación, usamos la función para reutilizar un fragmento de código en varias secciones. Si queremos cambiar una sección específica, solo tenemos que cambiar la lógica en la función. Del mismo modo, podemos usar el catálogo de versiones, buildSrc y ext como fuente única que nos ayuda a mantener las dependencias de Gradle. Podemos ver un caso de uso de ejemplo para un proyecto de varios modelos. Por ejemplo, mira lo siguiente compilar: gradle archivos para el proyecto mencionado Muestra, que tiene dos módulos, uno módulo de aplicación, y un segundo submódulo.build.gradle(:aplicación)plugins {id ‘com.android.application’id ‘org.jetbrains.kotlin.android’}android {compileSdk 31defaultConfig {applicationId «com.example.sample»minSdk 21targetSdk 31versionCode 1versionName «0.1.0»testInstrumentationRunner «androidx.test.runner .AndroidJUnitRunner»}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = ‘1.8’} } dependencias { implementación ‘androidx.core:core-ktx:1.7.0’ implementación ‘androidx.appcompat:appcompat:1.4.1’ implementación ‘com.google.android.material:material:1.5.0’ }compilar.gradle(:sub)plugins {id ‘com.android.application’id ‘org.jetbrains.kotlin.android’}android {compileSdk 29defaultConfig {applicationId «com.example.sample»minSdk 21targetSdk 29versionCode 1versionName «0.1.0»testInstrumentationRunner «androidx.test.runner .AndroidJUnitRunner»}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = ‘1.8’} } dependencias { implementación ‘androidx.core:core-ktx:1.7.9’ implementación ‘androidx.appcompat:appcompat:1.6.1’ implementación ‘com.google.android.material:material:1.6.0’} Así que el caso de uso anterior hay dos archivos build.gradle: uno para el módulo de la aplicación y otro para el submódulo. Si miramos de cerca ambos archivos build.gradle, podemos ver que Ambos scripts de compilación usan la misma dependencia con una versión diferente y CompileSdk. Si construimos el proyecto, causará conflicto.

Contenidos

1. Liberación manual

Debe revisar cada módulo y actualizar cada compilación. Cree archivos Grails usted mismo. Si la actualización no se realiza correctamente, existe la posibilidad de un conflicto entre los módulos de compilación. Se siente muy tentador resolver proyectos pequeños, pero para proyectos más grandes se convierte en un dolor de cabeza para los desarrolladores resolver cada script de compilación.

2. externo

Con este enfoque, el script de compilación debe contener información sobre los componentes externos del proyecto, como versiones, dependencias, complementos y paquetes en el bloque ext. Estos componentes se pueden configurar de dos maneras: especificando el bloque ext en la compilación raíz. gradle o creando un nuevo archivo Gradle y haciendo referencia a él en build.gradle.

  • build.gradle (nivel raíz) o crear por separado versión.gradle / versión.gradle.kts en el proyecto y escribir el siguiente script

ext { compileSdk = 31versiones = [core-ktx= «1.7.9»,appcompat = «1.6.1»,material = «1.6.0»]dependencia = [coreLib:»androidx.core:core-ktx:${versions.core-ktx}»,appcompatLib:»androidx.appcompat:appcompat:${versions.appcompat}»,materialLib:»com.google.android.material:material:${versions.material}»]} entonces llámalo construir.gradleaplicar desde: '$rootDir/version.gradle'plugins { id 'com.android.application'id 'org.jetbrains.kotlin.android'}android {dependencia de implementación .coreLibimplementation dependencia.appcompatLibimplementation dependencia.materia lLib}

3. buildSrc

Otro enfoque para resolver el problema es usar buidSrc. Podemos combinarlo con ADSL Kotlin para una mejor dependencia. Para hacer esto, podemos crear un directorio buildSrc con archivos adicionales Configuración.kt, que contiene detalles relacionados con la configuración, y dependencia.kt, que contiene scripts para crear dependencias. Con la activación del modo DSL en construir.gradle.kts por buildSrc.
  • Cree un nuevo directorio buildSrc en el proyecto, luego cree build.gradle.kts en el directorio buildSrc
Complementos {`kotlin-dsl`}Repositorios {mavenCentral()}
  • Cree el directorio src/main/kotlin y cree archivos como
Configuración.ktConfiguración del objeto { const val compileSdk = 31const val targetSdk = 31const val minSdk = 21const val majorVersion = 0const val minorVersion = 1const val patchVersion = 0const val versionName = "$majorVersion.$minorVersion.$patchVersion"const val versionCode = 1const val snapshotVersionName = " $ versiónprincipal.$versiónsecundaria.${parcheVersión + 1}-SNAPSHOT"const val artefactoGroup = "com.example.sample"}dependencias.ktVersiones de objetos {valor constante interno APPCOMPAT = "1.6.1"valor constante interno MATERIAL = "1.6.0"valor constante interno CORE = "1.7.9"}Dependencias de objetos {const val appcompat = "androidx.appcompat:appcompat:${ APPCOMPAT}"const val material="com.google.android.material:material:${Versions.MATERIAL}"const val core="androidx.core:core-ktx:${Versions.CORE}"}Luego en compilar Especifique gradle.kts como complementos {id("com.android.application")id("org.jetbrains.kotlin.android")}android {compileSdk = Configuration.compileSdkdefaultConfig {minSdk = Configuration.minSdktargetSdk = Configuration.compileSdkversionCode = Configuration.versionCodeversionName = Configuration.versionNametestInstrumentationRunner = " androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled = falseproguardFiles (getDefaultProguardFile("proguard-android -optimize.txt"),"proguard-rules.pro")}}compileOptions {sourceCompatibility = JavaV ersion.VERSION_1_8targetCompatibility = JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = "1.8"}} Dependencias {implementación(Dependencies.core) implementación(Dependencies.appcompat) implementación(Dependencies.material)}

4. Catálogo de versiones

El último método que mencionaré es usar el catálogo de versiones. Un catálogo de versiones contiene una lista de dependencias, representadas como coordenadas. Tenemos dos opciones de implementación. La primera es especificarlo en el archivo settings.gradle y otra forma es crear un archivo libs.versions.toml en la sección Gradle del proyecto.
  1. settings.gradle agrega lo siguiente
DependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()}versionCatalogs {libs {version('appcompat','1.6.1')version('core','1.7.9')version(' material','1.6.0')library('core-ktx','androidx.core','core-ktx').versionRef('core')library('appcompat','androidx.appcompat','appcompat ').versionRef('appcompat')library('material','com.google.android.material','material').versionRef('com.google.android.material')}2. Uso del formato de archivo TOMLEl TOML consta principalmente de cuatro secciones.
  • Versiones: esta sección proporciona detalles sobre las versiones.
  • Bibliotecas: aquí se especifica la biblioteca que se utilizará en el proyecto.
  • Paquete: La sección cubre los paquetes que se utilizarán en los proyectos.
  • complementos: se utiliza para definir complementos para el proyecto.
Cree un nuevo archivo de extensión TOML en Gradle y asígnele el nombre libs.version.toml y agregue el siguiente código[versions]núcleo="1.7.9"appcompat="1.6.1"material="1.6.1"[plugins]aplicación-android = { id = "com.android.aplicación", versión.ref = "agp" }kotlin-android = { id = "org.jetbrains.kotlin.android", versión.ref = "kotlin" }[libraries]material = { módulo = "com.google.android.material:material", version.ref = "material" }androidx-core-ktx = { grupo = "androidx.core", nombre = "core-ktx", versión. ref = "core" }androidx-appcompat = { grupo = "androidx.appcompat", nombre = "appcompat", version.ref = "appcompat" } Usar en construir.gradle como sigueComplementos {id(libs.plugins.android.application.get().pluginId)id(libs.plugins.kotlin.android.get().pluginId)}android {compileSdk 29defaultConfig {applicationId "com.example.sample"minSdk 21targetSdk 29versionCode 1versionName "0.1 .0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion .VERSION_1_8targetCompatibility JavaVersion. VERSION_1_8}kotlinOptions {jvmTarget = '1.8'}}dependencias {implementación(libs.material)implementación(libs.androidx.core)implementación(libs.androidx.appcompat)} Este es un resumen del artículo. En este artículo, veremos diferentes formas de manejar las dependencias en Gradle. También puedes incorporarlo en tu próximo proyecto. Si desea un ejemplo, puede usar el siguiente proyecto, Pico, en el que implementé una combinación de varias técnicas mencionadas anteriormente. Si tiene otras técnicas para agregar, puede mencionarlas en los comentarios. Si te gusta esta información, muestra tu apoyo compartiendo este artículo.

Deja una respuesta

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