TGViewer
Android Live 🤖 Android Live 🤖 @android_live · 5.12K subscribers
Post #539 3.03K
​​Почему Kotlin Synthetics Deprecated?
#kotlin

Несколько месяцев назад Android Kotlin Extensions Gradle плагин был помечен depricated. Он давал нам две классных фичи:
• Synthetics — плагин, который позволяет заменить findViewById;
• Parcelize — плагин, который позволяет создавать Parcelable при помощи одной аннотации, без использования boilerplate.

Parcelize никуда не уходит, а только перемещается в отдельный плагин kotlin-parcelize, а вот Synthetics уходит навсегда. Давайте посмотрим предпосылки, почему это произошло.

Но прежде рассмотрим все существующие подходы для поиска View.

1️⃣findViewById — функция, которая проходит по иерархии View и находит по идентификатору ту, которая необходима.
Имеет ряд существенных недостатоков:
➖метод поиска дорогой и разработчики часто используют этот метод повторно не задумываясь о последствиях производительности;
➖метод не null safe, то есть если в дереве не найдётся View с переданным идентификатором, то будет NullPointerException ;
➖нет кастования до требуемой View до Android API 26;
➖много boilerplate кода, особенно когда в классе много View.

Есть библиотека Butter Knife, которая заметно уменьшала количество кода, однако и сократила скорость сборки приложения, к тому же не решала ряд проблем. Сейчас она также depricated.

2️⃣Kotlin Synthetics — по сути вызывал описанный выше метод единожды и кэшировал полученные значения.
Из плюсов:
➕нет boilerplate кода, ведь всё что требуется — это настроить плагин в Gradle и использовать идентификаторы прямо из xml-файла;
➕type safety, то есть вам не надо делать никаких кастов.

Но давайте пройдёмся по недостаткам:
➖частично null safe. К счастью, если вы удалите какую-то view из xml, то в коде также будет подсветка удалённой View. Однако, если вы используете несколько конфигурационных файлов, то есть шанс нарваться на NullPointerException.
➖загрязнение namespaces. Если вы имеете несколько одинаковых идентификаторов в разных xml-файлах, то есть риск импортировать неверный файл и также получить NullPointerException.
➖работает только в Kotlin. Может быть не критичным для тех проектов, который написаны на Kotlin, но критично для тех, у кого есть Java.

Именно из-за описанных недостатков он и был помечен depricated.
Давайте обратимся к альтернативе. ⤵️

3️⃣View Binding — в целом, урощённая версия Data Binding, который по сути «биндится» только для ссылок на View, не связываясь с данными.
Плюсы:
➕нет boilerplate кода;
➕полностью null safe;
➕type safety;
➕нет влияния на build time в отличии от Data Binding;
➕поддерживается как в Java, так и в Kotlin

Отмечу один минус: чуть больше строк кода в сравнении с Kotlin Synthetics, ведь необходимо создать экземпляр переменной binding, которую придётся использовать потом повсюду.

Хотя я и сам очень любил Kotlin Synthetics, и мирился с его недостатками, но теперь придётся переезжать на View Binding. 🤔
Ссылка на документацию по инструменту тут.
More from @android_live
  1. Sep 29, 2026Post #1130
  2. Sep 29, 2026На днях попалась вакансия мечты Вроде всё начинается как неплохо: удалёнка, Kotlin/Jetpack…
  3. Sep 28, 2026На днях ревьювил код, связанный с копированием в буфер обмена И заметил, что многие прилож…
  4. Sep 26, 2026AirDrop на Android, похоже, уже есть на нескольких моделях Android Но, оказывается, всё эт…
  5. Sep 25, 2026Похоже, есть что посмотреть на выходных Недавно вышло интервью с Женей Вороновым Jake Whar…
  6. Sep 15, 2026Google выкатили ARTEMIS Эта инструмент, который превращает обычный текст в реальные действ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →