Ahora en Android con Koin — Parte 1 | de Arnaud Giuliani | diciembre 2022

Koined del banner original: https://github.com/android/nowinandroidEste año hablé en varias conferencias de Android sobre el diseño de la arquitectura de Android con Koin (Silicon Brighton) y sobre la nueva experiencia de desarrollador de Kotlin desde Koin 3.2 (Droicon Berlin y Kotlin Dev Day Ámsterdam). Al mismo tiempo, el equipo de Android de Google trabajó arduamente para recopilar las mejores prácticas para la comunidad relacionadas con las últimas tecnologías de desarrollo, como Jetpack Compose, Material Design Kotlin Coroutines y otros estándares tecnológicos para crear aplicaciones de Android 2022. Now In Android is an Open – Aplicación de origen de Android que cubre estas prácticas recomendadas y las mantiene actualizadas. La aplicación es mantenida por el equipo de Android. ¡Muchas gracias a ellos por tales recursos! Te propongo hoy hacer un recorrido especial por Now In Android: una Versión construido con el marco de inyección de dependencia de Koin. Este es un buen momento para actualizar las prácticas con Koin y el desarrollo moderno de Android, desde la estructura de componentes estándar hasta casos más avanzados. Todas las fuentes relacionadas se pueden encontrar aquí: https://github.com/InsertKoinIO/nowinandroidEste artículo se divide en varias partes:Parte 1: configuración de Koin, revisión de la aplicación y recorrido del primer móduloParte 2: componentes comunes del módulo (base de datos, red, dominio … ) y módulos de funciones Parte 3 – Configuración y código con anotaciones koin… tal vez más 🙂Koin es un marco de inyección de dependencia de Kotlin muy popular (https://insert-koin.io/), conocido por su facilidad de uso y su capacidad para proporcionar una funcionalidad elegante y potente gracias al lenguaje Kotlin. En Android, Koin está mágicamente listo para usar gracias al mecanismo de extensión de Kotlin. Esto significa que puede usar fácilmente las funciones de Koin directamente desde cualquier parte de Android. El ahora en Android (también conocido como Nia) La aplicación es un gran ejemplo para jugar. Gran contenido, pero ¿por dónde empezar? 🤔Imagen funcional de https://github.com/android/nowinandroidEl proyecto proporciona una descripción general de los módulos existentes. Puede consultar el documento de modularización. Aquí hay una vista previa rápida de cómo están organizados los módulos actuales:Organización del módulo – https://github.com/android/nowinandroidPodemos examinar el proyecto en las siguientes partes:

  • Módulo de aplicación: el módulo principal y el punto de entrada para la aplicación
  • Módulos comunes: recopilación de todos los componentes comunes (base de datos, repositorio, red, dominio…)
  • Módulos Funcionales – Implementando cada parte/pantalla de la aplicación
  • Módulo de sincronización: dedicado a resincronizar datos

Primero configuramos todo. Usamos las siguientes dependencias de Koin en el proyecto:

  • koin-android – Funciones de Android (partes comunes de Android)
  • koin-androidx-compose – Funciones relacionadas con Jetpack Compose (módulo de funciones)
  • koin-androidx-workmanager – Funciones de WorkManager (módulo común de sincronización de datos)
  • koin-core: componentes puros de Kotlin (solo para el módulo común de Kotlin)
  • koin-test – piezas de verificación y prueba

Para esta serie de artículos utilizamos el últimas versiones de Koin 3.3. Consulte la página de configuración para obtener más detalles: https://insert-koin.io/docs/setup/koinActualizó la configuración de Gradle para usar el paquete Koin directamente con el catálogo de versiones ya configurado. Verifique el archivo libs.versions.toml para artefactos Koin. El archivo AndroidFeatureConventionPlugin también se actualizó para proporcionar koin-androidx-compose para cada módulo de funciones. Abramos la clase NiaApplication, el punto de entrada de la aplicación, para ver el método onCreate escrito para iniciar Koin usando la función startKoin:Iniciando KoinUtilizamos varias opciones:

  • androidLogger: habilita el registro de koin en un android
  • androidContext – se refiere al contexto de la aplicación de Android
  • workManagerFactory: inicia los componentes de WorkManager declarados en Koin

Usamos la función de módulos () para cargar módulos de Koin. Aquí cargaremos el niaAppModule. Llamar a Sync.initialize() hará que WorkManager vuelva a sincronizar los datos. Veremos esos detalles más tarde.

Nota: AndroidLogger inicia sesión en el nivel INFO de forma predeterminada. Puede seleccionar el nivel DEBUG para obtener información más completa cuando necesite investigar Koin.

Lo primero que necesitamos es un módulo principal que contenga todos los demás submódulos. El archivo NiaAppModule.kt declara el módulo Koin principal de la siguiente manera:El módulo principal de la función Incluye de Koin utiliza un Lista de módulos a cargar con el módulo actual. Esto también ayuda a Koin a aplanar todos sus diagramas de módulos y optimizar el lanzamiento de su aplicación. A continuación, declaramos MainActivityViewModel como ViewModel en Koin con la función viewModelOf(). esta función apunta directamente a un constructor de clase para crear.viewModelOf(::MainActivityViewModel) Por esta razón usamos los signos :: para identificar el constructor de la clase MainActivityViewModel. Recomendamos usar la función Incluye () para garantizar esto Recopilación de todos los módulos de la aplicación en el módulo principal. La función Incluye no solo lo ayuda a organizar módulos y submódulos, sino que también le permite inspeccionar globalmente su configuración de Koin. Comprobemos a continuación. Una nueva característica importante de Koin, recientemente introducida con Koin 3.3, es la capacidad de verificar una configuración de Koin en unos pocos milisegundos con solo una prueba JUnit. Se requiere la prueba koin del paquete Gradle para tener acceso a dicha funcionalidad de prueba. ¿Como funciona? Usar la para verificar() Función de expansión en un módulo Koin. ¡Eso es todo! Debajo del capó, esto será Verifique todas las clases de constructores y valide con la configuración de koin para saber si un componente está declarado para esa dependencia. En caso de error, la función lanza una excepción MissingKoinDefinitionException. Veamos el archivo NiaAppModuleCheck.kt:verificar () en el módulo principal de Koin ¡Inicia la prueba JUnit y listo! ✅Como puede ver, usamos el parámetro extraTypes para enumerar los tipos que se usan en la configuración de Koin pero que no se declaran directamente. Este es el caso de los tipos SavedStateHandle y WorkerParameters, que se utilizan como parámetros inyectados. El contexto es declarado por la función androidContext() al inicio. La API de verificar () es muy fácil de ejecutar y no requiere ningún simulacro/stub para ejecutarse en el módulo de su aplicación. Hay un pequeño módulo que puede usar para crear instancias de JankStats para una actividad: JanksStatsModule. A continuación se muestra la versión original de Dagger:JankStatsModule en versión DaggerLa idea es crear un objeto JankStats para que Habilitar/deshabilitar el rendimiento Seguimiento en una actividad:Propiedad Lazy Dagger para JankStatsUsando LazyStatsEn la versión koin Escribiríamos esta parte con una definición simple. Abramos el archivo JankStatsKoinModule:Módulo JankStats Koin Aquí tenemos una definición de fábrica que crea la instancia del objeto JankStats a partir de una actividad entrante.¿Cómo pasamos una actividad a una definición? Usamos parámetros inyectados para declarar que tomaremos una actividad como parámetro: factory { (actividad: actividad) -> JankStats.createAndTrack (actividad.ventana, createOnFrameListener()) } Usamos una función (bloque lambda detrás de la palabra clave de fábrica) para escribir una función de Kotlin que cree nuestro componente. Desde nuestra MainActivity, simplemente necesitamos declarar JankStats con una llamada a la función de inyección como esta: val lazyStats: JankStats by inject { parametersOf(this) } La expresión parametersOf pasa argumentos a su definición de koin.Inyección diferida en Actividad con Koin y parámetros inyectados La propiedad lazyStats es una el verdadero chico flojo de Kotlin y se puede utilizar directamente:

Deja una respuesta

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