O Hilt está estável! Injeção de dependência mais fácil no Android

Tempo de leitura: 4 minutes

Hilt, a solução de injeção de dependência (DI) recomendada do Jetpack para aplicativos Android, já está estável! Isso significa que o Hilt está totalmente pronto para ser usado na produção. Hilt é mais simples do que Dagger, permite que você escreva menos código clichê, é projetado para Android e tem integração com várias bibliotecas Jetpack. Várias empresas já começaram a tirar proveito do Hilt em seus aplicativos.

O Hilt foi lançado pela primeira vez como alfa em junho de 2020 com a missão de definir uma maneira padrão de fazer DI em seus aplicativos Android e, desde então, recebemos muitos comentários de desenvolvedores. Isso não apenas melhorou a biblioteca, mas também nos permitiu saber que estamos trabalhando nos problemas certos.

Em vez de criar gráficos de dependência manualmente e manualmente injetar e passar tipos onde necessário, o Hilt gera automaticamente todo o código para você em tempo de compilação por meio de anotações. O Hilt pode ajudá-lo a obter o máximo das práticas recomendadas de DI em seu aplicativo, fazendo o trabalho árduo e gerando todo o clichê que você precisaria escrever de outra forma. Além disso, como é totalmente integrado ao Android, o Hilt gerencia o ciclo de vida dos gráficos de dependência associados às classes do framework Android automaticamente para você.

Vamos ver o Hilt em ação com um exemplo rápido! Depois de configurar o Hilt, usá-lo em seu projeto do zero para injetar um ViewModel em uma Activity é tão fácil quanto adicionar algumas anotações ao seu código da seguinte maneira:

@HiltAndroidApp // Setup Hilt in your app
class MyApplication : Application() { ... }

// Make Hilt aware of this ViewModel
@HiltViewModel
class LoginViewModel @Inject constructor(
    private val savedStateHandle: SavedStateHandle,
    /* ... Other dependencies Hilt takes care of ... */
) : ViewModel() { ... }


// Make the activity use the right ViewModel factory and
// inject other dependencies
@AndroidEntryPoint 
class LoginActivity : AppCompatActivity() {

    private val loginViewModel: LoginViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // loginViewModel is ready to be used
    }
}

Além do que foi mencionado acima, por que você deve usar o Hilt em seu aplicativo Android?

 

Mais simples que Dagger

O Hilt é construído sobre a popular biblioteca de DI Dagger, portanto, se beneficia da correção do tempo de compilação, desempenho do tempo de execução, escalabilidade e suporte ao Android Studio que o Dagger oferece. Algumas anotações do Dagger, como @Inject para informar ao Dagger e ao Hilt como fornecer uma instância de um tipo, são frequentemente usadas no Hilt. Mas Hilt é mais simples que Dagger!

Eu recomendo altamente usar o Dagger para injeção de dependência em aplicativos Android. No entanto, o punhal de baunilha puro pode levar a muito espaço para a criatividade. Quando isso se mistura com a complexidade dos vários componentes cientes do ciclo de vida que fazem parte do desenvolvimento do Android, há muito espaço para armadilhas, como vazamentos de memória: por exemplo, acidentalmente passar dependências com escopo de atividade para ViewModels. O Hilt sendo opinativo e projetado especificamente para Android ajuda a evitar algumas das armadilhas ao usar a Dagger Vanilla. ” – Marcelo Hernandez, Engenheiro de Software de Equipe, Tinder

Se você já usa o Dagger em seu aplicativo e deseja migrar para o Hilt … não tenha medo! Dagger e Hilt podem coexistir, os aplicativos podem ser migrados conforme a necessidade.

 

Menos clichê

O Hilt é opinativo – isso significa que ele toma decisões por você, de forma que você tenha menos código para escrever. Hilt define componentes padrão, ou gráficos de dependência, totalmente integrados com classes de estrutura Android, como aplicativo, atividades, fragmentos e visualizações. Bem como anotações de escopo para instâncias de escopo de tipos para esses componentes.

“O Hilt gera automaticamente o aplicativo de teste e o componente de teste via @HiltAndroidTest. Conseguimos remover entre 20% e 40% do código de teste padrão de wire up depois de migrar para o Hilt!” – Jusun Lee, engenheiro de software, YouTube

“Estamos apenas arranhando a superfície em termos de migração para o Hilt. No entanto, em um dos módulos que migramos para Hilt, vimos +78/-182 em termos de linhas alteradas para esta biblioteca. ” – Marcelo Hernandez, Engenheiro de Software de Equipe, Tinder

 

Projetado para Android

Ao contrário do Dagger, que é uma solução de injeção de dependência para os aplicativos de linguagem de programação Java, o Hilt funciona apenas em aplicativos Android. Algumas anotações como

@HiltAndroidApp, @AndroidEntryPoint ou @HiltViewModel são específicos para Hilt e definem uma forma opinativa de fazer DI no Android.

“O Hilt finalmente oferece componentes Dagger integrados ao ciclo de vida do Android. Com o Hilt, podemos focar exclusivamente no Dagger @Modules, sem ter que nos preocupar com componentes, subcomponentes, padrão de provedor de componentes e assim por diante.” – Marcelo Hernandez, Engenheiro de Software de Equipe, Tinder

 

Padronização de componentes e ligações

Para aqueles que conhecem o Dagger, o Hilt simplifica o gráfico de dependência usando um sistema de componente monolítico para gerar menos código em tempo de compilação.

“Com o sistema de componente monolítico da Hilt, as definições de ligação são fornecidas uma vez e compartilhadas entre todas as classes que usam esse componente. Esta é uma grande vitória, pois anteriormente, o YouTube usou um sistema de componentes polilíticos em que os módulos eram conectados manualmente em componentes personalizados e havia muitas definições de ligação duplicadas.” – Jusun Lee, engenheiro de software, YouTube

“Como a separação dos módulos do Gradle permite o desenvolvimento de recursos de forma isolada, ficou fácil ser muito criativo ao usar o Dagger. Descobrimos que a migração desses módulos para o Hilt, na verdade, expôs falhas nas quais estávamos inadvertidamente violando a separação de interesses.” – Marcelo Hernandez, Engenheiro de Software de Equipe, Tinder

 

Integração com outras bibliotecas Jetpack

Você pode usar suas bibliotecas Jetpack favoritas com o Hilt pronto para uso. Fornecemos suporte de injeção direta para ViewModel, WorkManager, Navigation e Compose até agora.

Saiba mais sobre o suporte ao Jetpack nos documentos.

“Eu realmente aprecio como o Hilt funciona desde o início com ViewModels e como ele elimina o clichê de ter que configurar um provedor ViewModel.Factory com vanilla Dagger.” – Marcelo Hernandez, Engenheiro de Software de Equipe, Tinder

 

Recursos para aprender Hilt

Hilt é a solução de DI recomendada do Jetpack para aplicativos Android. Para saber mais sobre ele e começar a usá-lo em seus aplicativos, confira estes recursos:

 

Visits: 0 Visits: 772256