¡El mango es estable! Inyección de dependencia más sencilla en Android | de Manuel Vivo | Desarrollador de Android | Mayo de 2021


Hilt, la solución de inyección de dependencia (DI) para aplicaciones de Android recomendada por Jetpack, ya está disponible estable! Eso significa que Hilt está en pleno funcionamiento. en producción. Hilt es más simple que Dagger, le permite escribir menos código repetitivo, está diseñado para Android y está integrado en varias bibliotecas Jetpack. Varias empresas ya han comenzado a utilizar Hilt en sus aplicaciones.
Hilt se lanzó por primera vez como alfa en junio de 2020 para definir un Forma estándar Para ejecutar DI en sus aplicaciones de Android, hemos recibido toneladas de comentarios de los desarrolladores desde entonces. Esto no solo mejoró la biblioteca, sino que también nos hizo saber que estábamos trabajando en los problemas correctos.
En lugar de crear diagramas de dependencia a mano e insertar y distribuir tipos manualmente según sea necesario, Hilt genera automáticamente todo el código para usted utilizando anotaciones a medida que se compila. Griff puede ayudarte Aproveche al máximo las mejores prácticas de DI en su aplicación a través del arduo trabajo y generar todo el escudo de la caldera de lo contrario, habría tenido que escribir. Dado que Hilt está completamente integrado con Android, administra el ciclo de vida de los diagramas de dependencia asociados con las clases de marco de Android. automáticamente para ti.
¡Veamos a Hilt en acción con un ejemplo rápido! Ahora que ha configurado Hilt, puede usarlo desde cero en su proyecto para agregar un ViewModel a una actividad agregando algunas anotaciones a su código como este:
¿Por qué debería usar Hilt en su aplicación de Android que no sea la anterior?
Hilt se basa en la popular biblioteca Dagger DI y, por lo tanto, se beneficia de la exactitud del tiempo de compilación, el rendimiento en tiempo de ejecución, la escalabilidad y el soporte de Android Studio que ofrece Dagger. Algunas anotaciones de daga, como B. @Inject para decirle a Dagger y Hilt cómo proporcionar una instancia de un tipo se usa a menudo en Hilt. ¡Pero Hilt es más fácil que una daga!
“Recomiendo encarecidamente usar Dagger para la inyección de dependencias en aplicaciones de Android. Sin embargo, la daga de vainilla pura puede dejar demasiado espacio para la creatividad. Cuando esto se mezcla con la complejidad de los diversos componentes conscientes del ciclo de vida que forman parte del desarrollo de Android, hay mucho espacio para errores como fugas de memoria: por ejemplo, pasar accidentalmente dependencias con el área de actividad en ViewModels. Si tiene una opinión y está hecha específicamente para Android, puede evitar algunas de las trampas de usar Vanilla Dagger. « – – Marcelo Hernandez, Ingeniero de software de planta, Tinder
Si ya estás usando Dagger en tu aplicación y quieres migrar a Hilt, ¡no temas! Dagger y Hilt pueden coexistir, las aplicaciones se pueden migrar según sea necesario.
Hilt tiene una opinión: significa que toma decisiones por usted para que tenga menos código para escribir. Hilt define componentes estándar o diagramas de dependencia que están completamente integrados en las clases de marco de Android, como aplicaciones, actividades, fragmentos y vistas. Así como notas de rango sobre el rango de instancias de tipos para estos componentes.
“Hilt genera la aplicación de prueba y el componente de prueba automáticamente a través de @HiltAndroidTest. Después de migrar a Hilt, pudimos eliminar entre el 20% y el 40% del código de prueba para cables estándar. » – Jusun Lee, ingeniero de software, YouTube
“Solo rascamos la superficie cuando migramos a Hilt. Sin embargo, en uno de los módulos que migramos a Hilt, vimos +78 / -182 en relación con las líneas cambiadas para esta biblioteca. « – Marcelo Hernandez, ingeniero de software de planta, Tinder
A diferencia de Dagger, una solución de inyección de dependencia para aplicaciones de lenguaje de programación Java, Hilt solo funciona en aplicaciones de Android. Algunos comentarios como
@HiltAndroidApp
, @AndroidEntryPoint
, o @HiltViewModel
son específicos de Hilt y definen un método basado en opiniones para ejecutar DI en Android.
“Hilt finalmente ofrece componentes dagger integrados para el ciclo de vida de Android. Con Hilt, podemos centrarnos únicamente en Dagger @Modules sin tener que preocuparnos por los componentes, subcomponentes, el patrón del proveedor de componentes, etc. » – Marcelo Hernandez, ingeniero de software de planta, Tinder
Para aquellos familiarizados con Dolch, Hilt simplifica el diagrama de dependencia mediante el uso de un sistema de componentes monolíticos para generar menos código al compilar.
“Con el sistema de componentes monolíticos de Hilt, las definiciones de enlace se proporcionan una vez y todas las clases que utilizan ese componente las comparten. Esta es una gran victoria, ya que YouTube utilizó anteriormente un sistema de componentes polilíticos en el que los módulos se conectaban manualmente a componentes personalizados y había muchas definiciones de enlace duplicadas. « – Jusun Lee, ingeniero de software, YouTube
“Dado que la separación de nuestros módulos Gradle permite el desarrollo de funciones de forma aislada, resultó fácil ser demasiado creativo con Dagger. Descubrimos que la migración de estos módulos a Hilt en realidad expuso errores en los que sin darnos cuenta violamos la separación de preocupaciones. « – Marcelo Hernandez, ingeniero de software de planta, Tinder
Puede usar sus bibliotecas Jetpack favoritas listas para usar con Hilt. Ofrecemos soporte de inyección directa para ViewModel, WorkManager, navegación y redacción hasta aquí.
Para obtener más información sobre la compatibilidad con Jetpack, consulte los documentos.
«Realmente aprecio cómo funciona Hilt de fábrica con ViewModels y cómo ya no es necesario configurar un proveedor ViewModel.Factory con Vanilla Dagger». – Marcelo Hernandez, ingeniero de software de planta, Tinder
Hilt es la solución DI recomendada por Jetpack para aplicaciones de Android. Para obtener más información sobre esto y cómo usarlo en sus aplicaciones, consulte los siguientes recursos: