Комментарии 5
Почему с генерацией кода размер APK меньше? Вроде наоборот, код сгенерировали, значит APK вырос?
Вы правы: генерация кода добавляет дополнительные классы в проект. Логично предположить, что больше кода = больше размер APK. Но это только на первый взгляд. Сгенерированный код даггера — это статические классы (и очень компактные) с чёткими зависимостями. Инструменты минификации (R8 или ProGuard) могут легко удалить неиспользуемые части кода или оптимизировать их (например, инлайн-функции). Поэтому, хотя сгенерированный код увеличивает исходный байткод, итоговый APK оказывается меньше, чем при использовании Koin, где runtime-рефлексия требует больше ресурсов.
Koin же использует рефлексию в runtime, и его библиотека включает универсальную логику для поиска и создания зависимостей, что занимает больше места и хуже оптимизируется. Так что, несмотря на генерацию, Dagger/Hilt дают меньший APK за счёт отсутствия runtime-оверхеда.
Как будто GPT DeepResearch нагенерил статью
Разбирать ошибки нейросетевой статьи слишком муторно, поэтому я прокомментирую только таблицу:
Koin не использует рефлексию.
Koin не всегда проще Dagger и Hilt, и не всегда требует меньше кода для настройки, особенно на больших проектах.
Если в таблице есть ряд "Скорость", и в его ячейках есть значения "Высокая" и "Средняя", то, либо где-то должна быть ячейка "Низкая", либо нужен критерий того, что считать "средней" скоростью.
Koin имеет средства проверки ошибок, которые позволяют избегать проблем в runtime.
Также есть Koin Annotations, который позволяет делать "Compile-time DI", синтаксис с аннотациями и прочее.
Hilt - это тот же Dagger, только с инструментами для работы с Android, Koin тоже имеет такие инструменты. Соответственно, если считается, что Hilt имеет "нативные скоупы", то и Koin их имеет. Если Hilt имеет "нативную интеграцию с Android", то и Koin ее имеет.
Библиотеки с генерацией кода склонны давать больше кода, а не меньше.
Сравнение Dagger 2, Dagger Hilt и Koin