Ответ
Hilt — это библиотека для внедрения зависимостей (DI) на Android, основанная на Dagger. Используется, когда нужно упростить настройку DI в проекте, избежав ручного написания большого количества boilerplate-кода.
Основные случаи:
- Управление зависимостями в Android-компонентах (Activity, Fragment, ViewModel, Service и др.).
- Общий доступ к зависимостям (например, репозиториям, API-клиентам) через Application-контекст.
- Тестирование с заменой реализаций (моки).
Пример:
@HiltAndroidApp
class MyApp : Application()
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
fun provideApi(): ApiService = RetrofitClient.api
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var api: ApiService
} Ответ 18+ 🔞
А, Hilt! Ну это такая штука, чтобы не сойти с ума, когда в андроид-приложении начинаешь тащить зависимости туда-сюда. Представь, у тебя в каждом экране нужен доступ к API, к базе данных, к какому-нибудь менеджеру сессий. И если всё это руками собирать и передавать — это же ёперный театр, код превращается в сплошной boilerplate, овердохуища одинаковых строчек.
Короче, Hilt — это как умный дворецкий. Ты ему один раз говоришь: «Слушай, чувак, когда кому-то понадобится ApiService, вот тебе рецепт, как его собрать из Retrofit». И всё. Дальше ты просто в любом активити пишешь @Inject lateinit var api: ApiService, и библиотека сама, по-тихому, тебе эту зависимость подсовывает. Волнение ебать отпадает сразу.
Основные кейсы, где он спасает жопу:
- Когда нужно управлять зависимостями во всех этих Android-штуках — Activity, Fragment, ViewModel. Раньше там был пиздец, а теперь аннотацию повесил и всё.
- Когда нужен общий доступ к каким-то тяжёлым объектам на уровне всего приложения. Типа того же клиента сети или базы данных. Чтобы не создавать их каждый раз заново, а брать один готовый экземпляр.
- Ну и для тестов — красота. Хочешь подменить реальный API на мок? Без проблем, в тестовом окружении говоришь Hilt'у давать другую реализацию. Удобно, чё.
Вот смотри, как это выглядит в коде. Всё довольно прямолинейно:
// Говоришь всему приложению: "Эй, тут теперь DI будет через Hilt, будь добр"
@HiltAndroidApp
class MyApp : Application()
// Создаёшь модуль, где объясняешь, как собирать твои зависимости
@Module
@InstallIn(SingletonComponent::class) // "Этот модуль работает на уровне всего приложения"
object AppModule {
@Provides
fun provideApi(): ApiService = RetrofitClient.api // "Вот, держи, API-клиент"
}
// И в любой активити просто просишь то, что тебе нужно
@AndroidEntryPoint // Эта аннотация включает магию
class MainActivity : AppCompatActivity() {
@Inject lateinit var api: ApiService // Hilt сам сюда засунет готовый объект
}
Вот и вся магия. Вместо того чтобы вручную всё пихать и передавать через конструкторы, ты просто размечаешь код аннотациями. Сначала кажется, что это какая-то хитрая жопа, но потом, когда проект растёт, понимаешь — без этого нихуя не сделать, а то утонешь в поддержке своей же архитектуры.