DEV Community

Cover image for Android: ¡Adios Groovy! Migrar a Kotlin nuestro build.gradle
Marco Ramírez
Marco Ramírez

Posted on

Android: ¡Adios Groovy! Migrar a Kotlin nuestro build.gradle

Mis niños, hoy es un día un poco ajetreado, sin embargo me he caído de la cama y tengo energía para poder escribirles unas líneas ahora sobre un tema que nosotros hemos visto desde hace tiempo en el desarrollo de Android: migrar los archivos build.gradle a Kotlin.

Recientemente, en la documentación de Google se ha notificado que Kotlin Script (KTS) será el lenguaje por default ahora para la sincronización de dependencias y que a partir de la siguiente versión de Android Studio, este proceso será por default en nuevas apps, por lo que este pequeño tutorial podrá servirte para poder migrar un pequeño proyecto de Groovy a KTS.

¿Qué es KTS?

KTS es el acrónimo para Kotlin Script, en sí el migrar de lenguaje entre Groovy y Kotlin no quiere decir que vamos a cambiar el núcleo de la importación de librerías en Android, que seguirá haciéndose con Gradle. Para los nuevos, Gradle es una herramienta de construcción de aplicaciones y automatización de rutinas compatible con diversos lenguajes de programación; esta fue construida con Java y fue el sustituto de Ant cuando llegó Android Kit Kat (o un poco antes).

Hay varias diferencias entre archivos KT y archivos KTS, una de ellas es que los archivos KT son interpretados por el compilador de Kotlin, mientras que los KTS por el soporte de Scripting de Kotlin, por lo que no necesitan una compilación previa (¿Javascript eres tú?) y en este caso es como Gradle lo tomaría en cuenta sin necesidad de compilarlo previamente.

¿Tarda mucho?

Pensarán muchos que esto es muy difícil y hasta tardado, pero en realidad es muy sencillo, pues solamente hay que cambiar cierta sintaxis dentro de los archivos build.gradle para conseguirlo, así que es hora de meter las manos al fuego

1. Cambiar el settings.gradle

Lo primero sería cambiar de nombre el archivo, agregándole la extensión .kts al archivo y tendrás la siguiente línea:

include ':app'
Enter fullscreen mode Exit fullscreen mode

En KTS, debes cambiarla por las siguientes:

include("app")
Enter fullscreen mode Exit fullscreen mode

Ya no hay que hacer más en este archivo e inclusive si quieres probarlo, te dejará sincronizar tus dependencias. Ahora bien, es importante que no uses comillas simples ('), pues Kotlin te las interpretará como caracteres y te marcará error. Procura siempre usar comillas (") en las cadenas de caracteres para que no tengas ningún problema.

2. Cambiar el build.gradle raíz

Ahora bien, haz lo mismo de cambiar el nombre del archivo en el build.gradle raíz y cambia lo siguiente:

Si tienes asignadas variables de versión (en un nodo ext) haz lo siguiente. Cambia lo siguiente:

buildscript {
    ext.androidGradleVersion = "8.0.1"
    ext.androidKotlinPlugin = "1.8.20"
}
Enter fullscreen mode Exit fullscreen mode

Por esto:

buildscript {
    val androidGradlePlugin by extra("8.0.1")
    val androidKotlinPlugin by extra("1.8.20")
}
Enter fullscreen mode Exit fullscreen mode

Aún no terminamos. Más abajo tendremos el nodo de plugins, cambiémoslo de esto:

plugins {
    id "com.android.application:$androidGradleVersion"
    id "com.android.library:$androidGradleVersion"
    id "org.jetbrains.kotlin.android:$androidKotlinPlugin"
}
Enter fullscreen mode Exit fullscreen mode

a esto

plugins {
    id("com.android.application") version "${extra["androidGradlePlugin"]}" apply false
    id("com.android.library") version "${extra["androidGradlePlugin"]}" apply false
    id("org.jetbrains.kotlin.android") version "${extra["androidKotlinPlugin"]}" apply false
}
Enter fullscreen mode Exit fullscreen mode

Y ya tendremos listo este archivo, ahora es tiempo de pasar al archivo (o archivos) build.gradle de nuestros módulos.

3. Cambiar el build.gradle de nuestro módulo

En este caso cambiaremos el del módulo app, en este caso, si tienes más módulo, tendrás que hacer prácticamente lo mismo para el resto. Igual que los otros 2, cámbiale el nombre al archivo agregando extensión KTS al final. Luego cambia lo siguiente:

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}
Enter fullscreen mode Exit fullscreen mode

por esto:

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}
Enter fullscreen mode Exit fullscreen mode

Igualmente en la parte de la definición de Android, agrega a todas las definiciones un signo de igual (=) a cada una de ellas, es decir, en lugar de esto:

android {
    namespace 'mx.dev1.deadpool'
    compileSdk 33

    defaultConfig {
        applicationId "mx.dev1.deadpool"
        minSdk 24
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}
Enter fullscreen mode Exit fullscreen mode

que quede esto:

android {
    namespace = "mx.dev1.foo"
    compileSdk = 33

    defaultConfig {
        applicationId = "mx.dev1.foo"
        minSdk = 24
        targetSdk = 33
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles (
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}
Enter fullscreen mode Exit fullscreen mode

Finalmente, encierra entre paréntesis los nombres de tus implementaciones para que queden en vez de esto:

dependencies {

    implementation 'androidx.core:core-ktx:1.8.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
    implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
Enter fullscreen mode Exit fullscreen mode

quede esto:

dependencies {
    implementation("androidx.core:core-ktx:1.8.0")
    implementation("androidx.appcompat:appcompat:1.4.1")
    implementation("com.google.android.material:material:1.5.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.3")
    implementation("androidx.navigation:navigation-fragment-ktx:2.5.3")
    implementation("androidx.navigation:navigation-ui-ktx:2.5.3")
    implementation("androidx.legacy:legacy-support-v4:1.0.0")
    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1")
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.3")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
}
Enter fullscreen mode Exit fullscreen mode
 (Best practice: Por ahorita, dejé las versiones de las dependencias "hardcoded", pero siempre tenlas en una variable adicional, en este caso los extras del paso 2.)

Ahora, una vez terminado, sincroniza tu proyecto.

Ya con esto habrás dejado actualizado tu proyecto para tenerlo con KTS y poder disfrutar de sus bondades, así como mantener actualizada tu aplicación.

Espero que este tutorial les haya servido y de ser así compártanlo con más banda para que puedan ver más contenido que les estaré trayendo en este pequeño blog.

Happy coding!

Top comments (0)