Desazúcar en Android

Google ha anunciado oficialmente Kotlin como lenguaje recomendado para el desarrollo de Android y es por eso que tantos desarrolladores están cambiando de Java a Kotlin para el desarrollo de Android. Por lo tanto, día a día, el equipo de Google introduce nuevas API en Android y también están disponibles en versiones más nuevas de dispositivos Android. Por lo tanto, Desugaring también es una de las características importantes de Android que debemos habilitar en nuestra aplicación, lo que permitirá que nuestras aplicaciones funcionen también en niveles de API más bajos. Entonces, en este artículo, aprenderemos sobre Desugaring.

  • ¿Qué es el Desazúcar?
  • ¿Por qué necesitamos Desugaring?
  • Implementación Práctica de Desugaring.
  • ¿Qué está pasando debajo del capó?

¿Qué es el Desazúcar?

Los dispositivos Android se optimizan día a día. Se están optimizando muchas funciones en Android para usuarios y desarrolladores. Cuando se desarrolla cualquier sistema operativo de Android, se entrega con tantas clases de Java que brindan soporte a diferentes aplicaciones en los dispositivos de los usuarios para diversas funcionalidades, como la hora, la fecha y muchas otras características. Ahora, si consideramos la API de tiempo, se introdujo en el nivel de API 26 y las aplicaciones que usan esta API se bloquearán en los dispositivos de nivel de API inferior, como Marshmallow y versiones inferiores. Entonces, en este caso, para evitar que la aplicación se bloquee, entra en juego Desugaring. Permite niveles de API más bajos para trabajar con nuevas bibliotecas JAVA. 

¿Por qué necesitamos desazucarar? 

Supongamos, por ejemplo, que estamos usando una nueva API de tiempo que se introdujo en el nivel de API 26 y hemos usado esta API de tiempo en nuestra aplicación. Esta aplicación funcionará perfectamente para el nivel de API 26 y superior, pero cuando instalemos esta aplicación en el nivel de API más bajo, supongamos que el nivel de API es 23 o inferior, entonces nuestra aplicación se bloqueará porque el sistema operativo de nuestro dispositivo es compatible con las funciones proporcionadas desde el nivel de API 23 y estamos utilizando funciones de API nivel 26 que no funcionarán. Entonces, para evitar fallas en esta aplicación y admitir las nuevas funciones desde el nivel 26 de API hasta el nivel 23 de API, debemos agregar Desugaring en nuestra aplicación. 

Implementación práctica de Desugaring en Android 

Cuando estamos utilizando las funciones proporcionadas por el nivel 26 de API en los dispositivos inferiores al nivel 26 de API, la aplicación se bloqueará. En las aplicaciones con un nivel de API más bajo, veremos un error como NoClassDefFoundError. Entonces, para resolver este error, debemos habilitar Desugaring en Android. 

Implementación paso a paso de Desugaring

Paso 1 : Navegue a Gradle Scripts > build.gradle(:app) y dentro de su sección de dependencias agregue la dependencia que se indica a continuación 

coreLibraryDesugaring ‘com.android.tools:desugar_jdk_libs:1.0.9’

Ahora, después de agregar esta dependencia, debe agregar la siguiente línea en la parte de su código compileOptions 

coreLibraryDesugaringEnabled verdadero

Paso 2 : ahora tenemos que habilitar multiDex en nuestra aplicación para que navegue a su archivo Gradle dentro de eso en la sección de configuración predeterminada, agregue la siguiente línea como 

multiDexEnabled verdadero

Y sincroniza tu proyecto. Después de la sincronización exitosa del proyecto, se implementó Desugaring en nuestra aplicación y ahora no veremos NoClassDefFoundError en los dispositivos con niveles de API más bajos. El código completo para el archivo Gradle se proporciona a continuación: 

Kotlin

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}
  
android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"
  
    defaultConfig {
        applicationId "com.gtappdevelopers.desugaring"
        minSdkVersion 19
        multiDexEnabled true
        targetSdkVersion 30
        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
        coreLibraryDesugaringEnabled true
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}
  
dependencies {
  
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

¿Qué está pasando debajo del capó?

Entonces, ¿qué está sucediendo aquí y cómo las clases de Java que faltaban aparecen de repente aquí? Esto se debe a las herramientas D8 y R8. Anteriormente, para convertir el código de su aplicación en código dex, teníamos que usar Proguard, pero para reducir el tiempo de compilación y el tamaño de la aplicación, se introdujo la nueva herramienta R8. Esta herramienta R8 proporciona soporte para las clases de Java que faltan. Cuando esta herramienta convierte el código de su aplicación en código dex, también agrega código dex de nuevas bibliotecas java que luego se agregan en el APK. Puede obtener una idea clara sobre este proceso a partir del siguiente diagrama. 

Desugaring in Android

De esta manera, Deugaring funciona y proporciona compatibilidad con versiones anteriores para nuevas bibliotecas de Java en los dispositivos con niveles de API más bajos.     

Publicación traducida automáticamente

Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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