Moderniza tu app Android

Si tus proyectos se están quedando atrás en cuanto a las tecnologías utilizadas, te estás perdiendo un mundo de mejoras que podrían hacer tus aplicaciones más mantenibles y tu día a día más fácil. Chequea algunos pequeños cambios que podrías aplicar para que tu código aproveche las últimas características del desarrollo Android.

Maribel Maisano
Droid LATAM
4 min readNov 28, 2020

--

Photo by Michael Jasmund on Unsplash

Posiblemente te abrume la cantidad de novedades que se presentan periódicamente acerca de Android: nuevas librerías, actualizaciones de Kotlin, enfoques y paradigmas que cambian con el transcurso del tiempo. Aunque no es necesario que adoptes todo lo que se ofrece, te aconsejo que te esfuerces en mantener tus conocimientos actualizados ya que, a pesar de que no encuentres casos de uso inmediatos, te servirá para poder tomar mejores decisiones a futuro.

De todos modos, mantener tu proyecto actualizado siempre es aconsejable: Aprovechas correcciones de errores, mejoras de performance, facilidad y claridad en el código y buenas prácticas en general que harán que tu proyecto no quede obsoleto y con riesgo a que ciertas características dejen de recibir soporte.

En este artículo quiero compartirte pequeñas acciones concretas que puedes tomar para reemplazar rápidamente partes de tu código de acuerdo a las nuevas recomendaciones y poder mantener tu proyecto a punto con tecnologías de vanguardia.

findViewById no va más… ¿y entonces?

Las formas de evitar el uso de findViewById ha mutado con el tiempo. Comenzamos por ButterKnife, el cual perdió sentido con la migración de Java a Kotlin ya que este introdujo synthetic para importar nuestros Views en el código, reduciendo gran cantidad de líneas. La mala noticia es que synthetic ha sido deprecado en Octubre de 2020.

Por eso, es aconsejable que comiences a eliminar su uso para prevenir problemas de compatibilidad con futuras versiones de Kotlin. Para esto, podrías utilizar View Binding. Una ventaja es que evitarás importar por error el id de un view que se encuentra en un layout que no es el que realmente necesitas. Synthetic es capaz de importarlo por el simple hecho de existir en el proyecto, pero debes colocar especial atención a corroborar que realmente está en el layout que necesitas, lo cual evitará que ocurra un NPE. Además View Binding es compatible con Kotlin y Java.

Adiós SharedPreferences… ¡Hola DataStore!

Esta es una migración que deberías poder realizar sin mayores complicaciones, aprovechando todo el potencial de esta nueva librería que se suma a la familia de Jetpack y que reemplaza a la antigua forma de almacenar datos en formato clave-valor en un archivo. Algunas de las ventajas son:

  • Las operaciones de acceso al disco son realizadas en background, haciendo uso de las corutinas de Kotlin, lo cual representa una mejora de performance y de experiencia de uso de tu app en general.
  • La migración de una API a otra es relativamente sencilla ya que sus interfaces son similares.
  • Gracias a ProtoDataStore la serialización y deserialización de objetos puede ser directamente especificada, sin depender, por ejemplo, de librerías externas para convertir un objeto a JSON para ser persistido, práctica muy común utilizando SharedPreferences.

No más APKs ¡a producir App Bundles!

El APK ha sido durante todos estos años el producto final del desarrollo de nuestras aplicaciones: un archivo instalable que puede ser fácilmente distribuido y, si está firmado digitalmente, ser publicado en Play Store. Desde 2018 se presentó App Bundle como alternativa y desde la segunda mitad de 2021 será el formato obligatorio.

El archivo .aab contiene los recursos y clases compiladas de la aplicación, pero es Google Play quien se encarga de la posterior firma y generación del APK. De hecho, este APK está optimizado para ciertos dispositivos en particular, por lo cual cuando los usuarios descarguen la app estarán obteniendo solamente los recursos óptimos para su dispositivo en lugar de todos los que existan en tu proyecto, lo cual deriva en una considerable reducción del tamaño del ejecutable final.

Aprovecha las características de Kotlin

La idea es que podamos utilizar al máximo las características de Kotlin para no depender de librerías externas. Esto, además de disminuir la inclusión de dependencias con todo lo que ello significa (reducción de tamaño del proyecto y cantidad de métodos, no depender de actualizaciones, menor riesgo de bugs introducido por código se terceros) está alineado con el enfoque de la gran apuesta de Jetbrains: Kotlin Multiplatform.

Si tienes planes de que tu código o parte de él sea portable a iOS y/o web, deberías ir tomando ciertas acciones. Por ejemplo, utilizar Flow o StateFlow en lugar de LiveData, Kotlinx Serialization en lugar de alguna librería como Gson o Jackson, Ktor para networking en lugar de, por ejemplo, Retrofit y corutinas y high order functions en lugar de RxJava, siempre y cuando sea posible.

Recuerda que un proyecto actualizado te evitará problemas a futuro como grandes migraciones, problemas de compatibilidad o ausencia de soporte, incluso imposibilidad de publicar en Play Store.

Con estos consejos ya tienes punto de partida ¿Por dónde empezarás?

--

--

Maribel Maisano
Droid LATAM

Android Dev @ Equinox Media· WTM Ambassador @ GDG & WTM Buenos Aires