Плавная миграция на Kotlin 2.1.0

Всем привет, меня зовут Эдуард, я Android Tech Lead в QIC digital hub. Сегодня я расскажу как совершить плавный переход на Kotlin 2.1.0, руководствуясь опытом своей команды.
С выходом новой версии Kotlin 2.0.0 мы тоже решили перейти на него и KSP (Kotlin Symbol Processing), чтобы использовать все возможные улучшения в производительности. А еще, так как это мажорный апдейт, переход в ранних версиях упростил бы нам внедрение новых функций Kotlin в будущем. Кроме того, новая версия K2 значительно улучшила бы производительность и время компиляции, что очень важно для нашего проекта, который растёт как по объёму кода, так и по функциональности.
Мы сразу перешли на версию 2.1.0, так как на момент миграции она уже вышла, и нам в любом случае пришлось бы сделать этот переход рано или поздно. И вот какие шаги для обеспечения плавного перехода я могу выделить:
Ознакомьтесь с руководствами по совместимости
Руководство по совместимости с Kotlin 2.0.0: описывает изменения, которые могут повлиять на ваш код, включая исходные, двоичные и поведенческие несовместимости.
Руководство по совместимости с Kotlin 2.1.0: содержит подробную информацию о миграции с Kotlin 2.0 на 2.1, включая изменения в языке и их последствия.
Обновите среду разработки
Интегрированная среда разработки (IDE): убедитесь, что используете последнюю версию IntelliJ IDEA или Android Studio, поддерживающую Kotlin 2.x.x. Например, IntelliJ IDEA 2024.1 вводит опциональный режим K2, который улучшает анализ кода. Подробнее.
Инструменты сборки: обновите Gradle и другие инструменты сборки до версий, совместимых с Kotlin 2.x.x, чтобы избежать проблем интеграции.
Включите компилятор K2
Kotlin 2.0.0 вводит компилятор K2, который обеспечивает улучшенную производительность и обнаружение ошибок. Он включен по умолчанию в Kotlin 2.0.0 и более поздних версиях. Ознакомьтесь с руководством по миграции на компилятор K2, чтобы понять его преимущества и возможные последствия.
Обновите зависимости
Стандартная библиотека: убедитесь, что все зависимости совместимы с Kotlin 2.x.x. Некоторые библиотеки могут требовать обновления для соответствия новому компилятору и языковым функциям.
Компилятор Compose: если вы используете Jetpack Compose, учтите, что компилятор Compose был интегрирован в репозиторий Kotlin, начиная с версии 2.0.0, что упрощает миграцию проекта. Руководство по миграции компилятора Compose.
Рефакторинг устаревших API
Kotlin 2.x.x некоторые API устарели, и были введены новые. Рефакторизуйте код, заменив устаревшие функции и приведя его в соответствие с последними стандартами. Ознакомьтесь с официальными руководствами по миграции для получения конкретной информации об изменениях.
Проблемы, возникшие во время миграции
Во время миграции возникли некоторые проблемы, которые потребовали корректировок:
Проблема с минификацией
Глобальное включение минификации для всех модулей вызвало неожиданные ошибки, особенно в релизной версии. Из-за агрессивной минификации некоторые классы удалялись до их использования в других модулях.
Решение:
Мы установили minifyEnabled = true только для модуля приложения (app module).
Для всех остальных модулей оставили minifyEnabled = false, чтобы избежать конфликтов во время сборки и обеспечить стабильность.
Проблема с библиотекой навигации
Обновление библиотеки Navigation до версии 2.8.1+ вызвало проблемы с управлением состоянием навигации. В какой-то момент навигация перестала работать, любой вызов navigateTo просто не выполнялся.
Решение:
Мы вернулись к версии Navigation 2.8.0, так как более новые версии содержали изменения, нарушающие работу с фрагментами.
Рекомендую тщательно тестировать навигационные потоки при обновлении.
Изменения API Jetpack Compose
Незначительные изменения API в Jetpack Compose потребовали корректировок в существующем коде.
Решение:
Я обновил использование устаревших функций и свойств до их последних альтернатив.
Убедился в совместимости с компилятором Compose версии 1.5.15.
Заключение
Миграция на Kotlin 2.0.0 или 2.1.0 требует тщательного планирования и тестирования. Основные аспекты:
Обновление среды разработки
Обеспечение совместимости зависимостей
Включение компилятора K2
Рефакторинг устаревших API
Решение проблем с минификацией, навигацией и изменениями API Jetpack Compose
Следуя этим шагам, ваш проект сможет воспользоваться всеми преимуществами последних улучшений Kotlin, сохраняя стабильность и производительность.
Кажется, что чего-то не хватает? Делитесь опытом в комментариях, сделаем этот гайд еще полезнее вместе.
Habrahabr.ru прочитано 6336 раз