🗡Dagger HILT: How to do DEPENDENCY INJECTION on Android ⚡

Поделиться
HTML-код
  • Опубликовано: 3 окт 2024

Комментарии • 87

  • @devexpert_io
    @devexpert_io  4 года назад +7

    👉 Descarga GRATIS la guía de Principios SOLID: devexperto.com/principios-solid-guia-gratis/
    Si aún no te decides sobre si Kotlin es el lenguaje que deberías aprender, te animo a que te apuntes a mi masterclass gratuita 👉 bit.ly/2ONkWKE

  • @juanesdev
    @juanesdev 4 года назад +1

    Si antes me gustaba Dagger ahora aún más se ha simplificado demasiado, mucha gracias gran video, saludos desde Medellín - Colombia

  • @javstorres
    @javstorres 4 года назад +1

    Esta muy bueno, simplifica mucho, ahora veamos que tan bien se comporta en el testing!

    • @devexpert_io
      @devexpert_io  4 года назад +1

      Muchas gracias! Creo que ahí aún les faltan cosas, pero ya hay algunas facilidades para testing. En tests unitarios da igual, porque no hace falta usar el inyector. En tests de integración o de UI prometen que se pueden cambiar dependencias de forma individual (algo que con Dagger no se puede, hay que rehacer el módulo entero).
      ¿Te gustaría un vídeo sobre esto?

  • @luzperezn4203
    @luzperezn4203 3 года назад +1

    Excelente video, no estaba entendiendo que es Dagger pero ahora ya tengo una muy buena idea y cómo aprovecharlo. Muchísimas gracias!
    Estuve viendo tu canal y creo que me va a servir para continuar viendo cosas que no conocía de Android, nueva sub!

    • @devexpert_io
      @devexpert_io  3 года назад +1

      Muchas gracias Luz! Bienvenida!

  • @AngelLopez1
    @AngelLopez1 3 года назад +3

    Que tal Antonio. Gracias por el video. Solo como retroalimentación: sería bueno si los tutoriales los pudieras hacer desde cero. Por ejemplo yo no vi el video de dagger por que ahorita lo único que necesito hacer es aprender a usar hilt y al ver este video, no me quedó muy claro por que usaste un proyecto empezado como ejemplo. Para mi fue como llegar tarde a una fiesta. Sería mejor si hilt lo hubieras explicado con un proyecto de cero. Solo mi punto de vista. Gracias nuevamente

    • @devexpert_io
      @devexpert_io  3 года назад

      Gracias por el feedback, lo tengo en cuenta. Pero sería muy difícil hacer un proyecto desde cero cada vez que se explica algo un poco más avanzado. Todos los vídeos durarían muchísimo y serían muy repetitivos, no? Qué propones?

  • @ameamemx
    @ameamemx 4 года назад +2

    Excelente 👍🏻 hace ya un tiempo ⏳ que esperamos del tema ✌🏻 saludos 😉

    • @devexpert_io
      @devexpert_io  4 года назад

      No puede hacer tanto, si haber cómo 2 semanas que publicaron la Alpha 😂. Pero ya está aquí!

  • @alvarogarnett
    @alvarogarnett 4 года назад +5

    Hace un año empecé a usar Koin en vez de Dagger y tras leer mucho de Hilt, lo que veo que han hecho Hilt para parecerse lo máximo posible a Koin, sobretodo a nivel de simplicidad aunque en Koin no hay tantas anotaciones. Podrías hacer una comparación Hilt vs Koin?
    Gracias por el video, ha quedado muy claro su uso

    • @devexpert_io
      @devexpert_io  4 года назад +2

      Lo tengo apuntado. Pero vamos, personalmente pienso que si con Koin estás cómodo, es una opción perfectamente válida. A mí me gusta mucho por lo sencillo que es (más que Hilt, como bien dices). Gracias por tu comentario!

  • @drackon1995
    @drackon1995 2 года назад +1

    Excelente video, pero una duda.
    Donde prodria ver los videos anteriores para desarrollarlo desde antes que integras dagger hilt?
    Saludos desde Mexico.

    • @devexpert_io
      @devexpert_io  2 года назад

      No hay ninguno donde haga exactamente esto, porque es el código de una formación que tengo. Lo más cercano a eso lo puedes encontrar en este vídeo ruclips.net/video/lX7CeooKCcQ/видео.html

  • @i12capea
    @i12capea 4 года назад +2

    Que buena pinta!
    Con hilt se podría inyectar un viewmodel en un fragmento de una librería, y en la aplicación que integra la librería poder extender ese fragmento para personalizar algo y utilizar el viewmodel inyectado en este fragmento?
    Gracias ,un saludo, muy buen vídeo!

    • @devexpert_io
      @devexpert_io  4 года назад

      No parece la forma más adecuada de trabajar, porque una librería al final es un componente externo sobre el que no tenemos control, y el ViewModel forma parte de nuestra arquitectura.

    • @i12capea
      @i12capea 4 года назад

      @@devexpert_io Ya pero si yo hago la librería y la aplicación que integra estaría bien para realizar personalizaciones de la librería base

    • @devexpert_io
      @devexpert_io  4 года назад

      @@i12capea si tú tienes acceso a todos, entonces en principio no veo por qué no. Pero sin ver el código suena un poco raro lo que intentas ahí.

  • @MayerOlivaresSalinas
    @MayerOlivaresSalinas 4 года назад +1

    súper el video con la explicación precisa.

  • @javiercardona6478
    @javiercardona6478 4 года назад +3

    Muy bueno el video, espero que realice el video de como implementarlo en un modulo kotlin o java donde no esta el framework de android

  • @marcalastalsbota4357
    @marcalastalsbota4357 4 года назад +4

    Muy bueno, como siempre. Voto por que hagas el video de como usarlo en modulos kotlin sin android(no se si me acuerdo de java ya) y me encantaria uno comparando Hilt y Koin

    • @devexpert_io
      @devexpert_io  4 года назад

      Perfecto, pues apuntado queda. Gracias!

    • @carlosmartinezgadea427
      @carlosmartinezgadea427 3 года назад +1

      Esto me parece realmente interesante de cara al multiplatform o a módulos agnósticos de Android (como podrían ser data, use cases, domain en una Clean Architecture). Sería un gran plus ver esto en acción con Hilt! De momento, creo que me quedo con Koin.

    • @devexpert_io
      @devexpert_io  3 года назад +2

      Si los módulos de inyección los declaras todos en el módulo de App, en realidad da igual el inyector que uses. Lo único que tocaría implementar la inyección para cada plataforma en el caso de KMP.
      Si acoplas la inyección a todas las capas (tiene sus pros y sus contras) entonces hay que tener más cuidado.
      Pero si os fijáis, este ejemplo tiene capas que no sin Android y está hecho con Hilt

    • @carlosmartinezgadea427
      @carlosmartinezgadea427 3 года назад +1

      @@devexpert_io inicialmente había pensado que lo más sencillo era justamente eso, realizar la inyección en el app de cada plataforma.
      Me queda claro ahora, gracias! Aunque creo que tardaré aún un poco en meterme con KMP...

    • @albertmartorellgarcia8528
      @albertmartorellgarcia8528 3 года назад

      Apoyo la moción!

  • @hsb12001
    @hsb12001 2 года назад +1

    It is a great work, Congratulation.

  • @adriannieves9660
    @adriannieves9660 4 года назад +1

    Hola Antonio, muy bueno el video. Me gustaría ver como se comporta en el testing y la comparación con KOIN. Saludos!

    • @devexpert_io
      @devexpert_io  4 года назад +1

      Genial Adrián! Pues me lo apunto también

  • @frigorifico91
    @frigorifico91 4 года назад +2

    Gran trabajo! Se agradece muchísimo tener un vídeo resumen con estas novedades.
    Con Hilt al no tener que crear una factoría para los VM, sabes si hay soporte para pasar argumentos de la activity o fragment por constructor en el VM junto con las dependencias de dagger?

    • @devexpert_io
      @devexpert_io  4 года назад +1

      Sí, si te fijas en el ejemplo del repositorio (me acabo de dar cuenta de que no lo he puesto en la descripción), la activity de detalle recibe un extra del intent. Aún tengo que buscar si es la mejor opción, pero como los ActivityComponent inyectan por defecto la activity, puedes sacar dependencias de ella sin problema: github.com/antoniolg/architect-coders/blob/hilt-sample/app/src/main/java/com/antonioleiva/mymovies/ui/detail/DetailActivityModule.kt

    • @frigorifico91
      @frigorifico91 4 года назад

      Genial! Muchas gracias

  • @seba23571
    @seba23571 3 года назад +1

    una consulta que tal esta la libreria kodein, se ve mas sencilla

    • @devexpert_io
      @devexpert_io  3 года назад +1

      Hace mucho que no la uso, pero creo que es muy parecida a Koin. Buena opción también

  • @ivanvarela5063
    @ivanvarela5063 3 года назад +1

    Me gusto el video pero si estaria bueno que el ejemplo de inyeccion de dependencia sea mas con ejercicio mas sencillo.

    • @devexpert_io
      @devexpert_io  3 года назад +1

      Es un ejemplo relativamente sencillo, qué es lo que te ha resultado complicado?

    • @ivanvarela5063
      @ivanvarela5063 3 года назад +1

      @@devexpert_io Hola!estoy iniciandome en elmundo de la prograccion en android y con este video al ver un proyecto armado con mucchas cosas se me dificulta aprender. Si estaria genial empezar con un proyecto desde cero y con el tipico ejemplo en POO del auto(una forma de decir). Gracias!!

    • @devexpert_io
      @devexpert_io  3 года назад

      Ah claro, has empezado muy por el final. La inyección de dependencias es algo para lo que hace falta tener muchos conocimientos previos. Para que te hagas una idea, en una formación que doy de 3 meses, esto lo damos cuando llevamos casi 2 meses y medio aprendiendo otras cosas

  • @christianmeazza2309
    @christianmeazza2309 4 года назад +1

    Hola Antonio no había podido compilar mis apps al usar @ViewModelInject con DataBinding y con kapt { correctErrorTypes = true} por fin pude compilar. Creo que esos son los errores que corrige. El video me aclaró varias dudas que tenía, muchas gracias.

    • @devexpert_io
      @devexpert_io  4 года назад +1

      Ahhh pues mira, me alegro de que te sirviera! Yo lo estuve buscando un rato pero no me quedó nada claro, porque ni siquiera la referencia de Kotlin explica mucho.

    • @christianmeazza2309
      @christianmeazza2309 4 года назад

      @@devexpert_io Lo siento, volvió a fallar funcionó con un adapter pero intenté pasarle un dato desde el ViewModel y me muestra este error "A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution" y es el que me muestra cada vez que intento usar DataBinding.

    • @devexpert_io
      @devexpert_io  4 года назад

      @@christianmeazza2309 pues la verdad que ni idea en ese caso... No lo he probado junto con databinding

  • @omarcitorey1
    @omarcitorey1 4 года назад +1

    Se mira genial HILT , listo para implementarlo en mi proyecto :D

  • @andresjosemendezpachano1334
    @andresjosemendezpachano1334 4 года назад +2

    Sería bueno hacer un vídeo usando Google Chrome desde la instalación y usar emulador. Saludos

    • @devexpert_io
      @devexpert_io  4 года назад

      Desde la instalación de Android Studio? Te refieres un tutorial de iniciación a Android?

    • @andresjosemendezpachano1334
      @andresjosemendezpachano1334 4 года назад

      @@devexpert_io si pero usando Chrome OS

    • @devexpert_io
      @devexpert_io  4 года назад

      Aaah con Chrome OS. La verdad que no sé mucho al respecto. Se puede instalar en cualquier ordenador?

    • @andresjosemendezpachano1334
      @andresjosemendezpachano1334 4 года назад

      @@devexpert_io creo que no pero voy a investigar y te hago llegar la info

  • @FuadKamal
    @FuadKamal 4 года назад +1

    The coolest part of this video is Antonio's awesome Samurai Android shirt. :)

    • @devexpert_io
      @devexpert_io  4 года назад

      Haha, thanks I guess 😅. That means that the content is bad? 😆

    • @FuadKamal
      @FuadKamal 4 года назад

      @@devexpert_io oh no, not at all. I just love that shirt. :)

  • @butelo
    @butelo 4 года назад

    hola
    gracias por el vídeo, un pequeño comentario:
    en la docu oficial de hilt dice:
    "You must also annotate the SavedStateHandle dependency with @Assisted"
    cuando inyectas el viewmodel via constructor
    developer.android.com/training/dependency-injection/hilt-jetpack
    aunque tampoco explica el motivo

    • @devexpert_io
      @devexpert_io  4 года назад

      Le echaré un ojo, la verdad que no sé muy bien a qué se refiere.

  • @d-landjs
    @d-landjs 3 месяца назад

    Excelente!

  • @enriquemarin8842
    @enriquemarin8842 4 года назад +1

    Excelente vídeo y extraordinario canal.
    Una pregunta Antonio. Necesito pasar el contexto de aplicación para shared preferences al viewmodel. ¿Es correcto o puede originar fugas de memoria está acción? ¿Se puede inyectar el context de la aplicación con dagger/hilt?
    Gracias de antemano por tu atención.

    • @devexpert_io
      @devexpert_io  4 года назад +1

      Se puede, sí. Sí es el de aplicación no hay problema. Hilt inyecta automáticamente el application en el ApplicationComponent, así que lo tienes disponible siempre como dependencia.

    • @enriquemarin8842
      @enriquemarin8842 4 года назад +1

      Muchas gracias por la aclaración y tu rapidez😀👌

  • @blinkbyker
    @blinkbyker 3 года назад +1

    Dónde puedo conseguir esa camiseta? D:!

    • @devexpert_io
      @devexpert_io  3 года назад

      Esto eran ediciones limitadas, ya no se pueden conseguir 😔

  • @ManishSputnik
    @ManishSputnik 3 года назад +1

    Muy buen vídeo! Aunque no tenga que ver nada con este vídeo, el hecho de indicarle el tipo a una variable para que Android no lo infiera, aunque sea mínimamente, ¿sabes si mejora el tiempo de compilación o ejecución de la aplicación? (que toda optimización por nimia que sea, bienvenida sea jejej)

    • @devexpert_io
      @devexpert_io  3 года назад +1

      En ejecución seguro que no hay diferencia, porque el bytecode final es el mismo. En compilación no sabría decirte... No he visto comparativas ni nadie indicando que viera mucha diferencia

  • @isaimosso2764
    @isaimosso2764 4 года назад +1

    Hola Antonio no se si llegaste a necesitar un viewmodel en un servicio en mi caso en FirebaseMessagingService,
    estoy migrando mi app de Koin a Hilt, pero tengo un problema con Hilt al momento de inyectar el viewmodel
    La segunda linea con KOIN excelente
    Tercera linea Es la del problema no reconoce viewModels()

    • @devexpert_io
      @devexpert_io  4 года назад +1

      Habría que verlo a fondo, pero suena raro eso de usar un ViewModel con un Service, no? El ViewModel se usa para sobrevivir a los cambios de configuración de activities y fragments, pero un service no tiene esa situación. Imagino que Koin no está preparado para inyectar un ViewModel en un service porque no es un caso de uso habitual.

  • @armandoquispeticona2410
    @armandoquispeticona2410 3 года назад +1

    Ahora que esta en Beta creo que es una muy buena opción para aprender :). Después de haber utilizado Koin probare esta version :)

    • @devexpert_io
      @devexpert_io  3 года назад +2

      Si duda! Tengo pendiente grabar un nuevo vídeo actualizando las novedades

    • @aaronbautista1471
      @aaronbautista1471 3 года назад +1

      @@devexpert_io estaría super ese video

    • @devexpert_io
      @devexpert_io  3 года назад +1

      Pues lo tenía grabado pero se grabó mal el audio, y ahora que estoy de baja paternal no o sé cuándo voy a poder hacerlo.
      Lo que sí pude actualizar es el artículo: devexperto.com/dagger-hilt

  • @jasalvador
    @jasalvador 4 года назад +1

    Genial vídeo! Desde que lo vi cuando lo presentaron tenía ganas de empezar a usarlo.
    Una duda que me surge, Si el ViewModel ya está anotado con @ViewModelInject es necesario también indicar en el módulo ActivityModule como se va a proveer esa dependencia? no sería suficiente con la anotación? Y si se quiere que sea retained, indicandole con la anotación @ActivityRetainedScoped no sería suficiente? Disculpa si es una pregunta estúpida. Venía ya mucho tiempo usando Koin y Dagger lo usé solo una vez. Ahora con Hilt, estoy volviendo a él.
    Muchas gracias!

    • @devexpert_io
      @devexpert_io  4 года назад

      Sí sí, si lo inyectas con ViewModelnject ya no hace falta ponerlo en el módulo. Muchas gracias!

    • @devexpert_io
      @devexpert_io  4 года назад

      Ah ya veo por qué lo dices, porque no lo borré en el código que nuestro durante el vídeo. Si quieres echa un ojo al código de ejemplo, que allí no está puesto. Lo tengo enlazado en la descripción.

    • @jasalvador
      @jasalvador 4 года назад

      @@devexpert_io Cierto muchas gracias!! Acabo de clonarme el repo y ahí no está. Todo aclarado, saludos!! =D

  • @alanger7507
    @alanger7507 3 года назад

    Estaba buscando tu repo q mencionaste pero no lo encuentro

    • @devexpert_io
      @devexpert_io  3 года назад

      Esta es, voy a revisar la descripción del vídeo para ponerlo si no github.com/antoniolg/architect-coders/tree/hilt-sample

    • @devexpert_io
      @devexpert_io  3 года назад

      sí, sí que estaba en enlaces relacionados, aunque un poco escondido.

  • @oscarescamilla5627
    @oscarescamilla5627 4 года назад +1

    Espero esto ya jaja

  • @perezoso210
    @perezoso210 3 года назад

    Deberías de hacer la actualización de este video ya con calificadores para esos módulos que devuelven el mismo tipo de datos, ándale

    • @devexpert_io
      @devexpert_io  3 года назад +1

      Ya está grabado, Perúy tardará unas semanas en salir

    • @perezoso210
      @perezoso210 3 года назад +1

      @@devexpert_io Eres un máster,saludos desde México

  • @moto_discover_01
    @moto_discover_01 3 месяца назад

    Horrible cuando explican un tema encima de un código ya hecho que además NO compila! Deberías aprender de ArisDev

    • @devexpert_io
      @devexpert_io  3 месяца назад

      Este código tiene 4 años amigo, es normal si no compila