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

1ef4a320b2a69b5a68781316965f80aa.png

Всем привет, меня зовут Эдуард, я Android Tech Lead в QIC digital hub. Сегодня я расскажу как совершить плавный переход на Kotlin 2.1.0, руководствуясь опытом своей команды.

С выходом новой версии Kotlin 2.0.0 мы тоже решили перейти на него и KSP (Kotlin Symbol Processing), чтобы использовать все возможные улучшения в производительности. А еще, так как это мажорный апдейт, переход в ранних версиях упростил бы нам внедрение новых функций Kotlin в будущем. Кроме того, новая версия K2 значительно улучшила бы производительность и время компиляции, что очень важно для нашего проекта, который растёт как по объёму кода, так и по функциональности.

Мы сразу перешли на версию 2.1.0, так как на момент миграции она уже вышла, и нам в любом случае пришлось бы сделать этот переход рано или поздно. И вот какие шаги для обеспечения плавного перехода я могу выделить:

  1. Ознакомьтесь с руководствами по совместимости

  • Руководство по совместимости с Kotlin 2.0.0: описывает изменения, которые могут повлиять на ваш код, включая исходные, двоичные и поведенческие несовместимости.

  • Руководство по совместимости с Kotlin 2.1.0: содержит подробную информацию о миграции с Kotlin 2.0 на 2.1, включая изменения в языке и их последствия.

  1. Обновите среду разработки

  • Интегрированная среда разработки (IDE): убедитесь, что используете последнюю версию IntelliJ IDEA или Android Studio, поддерживающую Kotlin 2.x.x. Например, IntelliJ IDEA 2024.1 вводит опциональный режим K2, который улучшает анализ кода. Подробнее.

  • Инструменты сборки: обновите Gradle и другие инструменты сборки до версий, совместимых с Kotlin 2.x.x, чтобы избежать проблем интеграции.

  1. Включите компилятор K2

Kotlin 2.0.0 вводит компилятор K2, который обеспечивает улучшенную производительность и обнаружение ошибок. Он включен по умолчанию в Kotlin 2.0.0 и более поздних версиях. Ознакомьтесь с руководством по миграции на компилятор K2, чтобы понять его преимущества и возможные последствия.

  1. Обновите зависимости

  • Стандартная библиотека: убедитесь, что все зависимости совместимы с Kotlin 2.x.x. Некоторые библиотеки могут требовать обновления для соответствия новому компилятору и языковым функциям.

  • Компилятор Compose: если вы используете Jetpack Compose, учтите, что компилятор Compose был интегрирован в репозиторий Kotlin, начиная с версии 2.0.0, что упрощает миграцию проекта. Руководство по миграции компилятора Compose.

  1. Рефакторинг устаревших API

Kotlin 2.x.x некоторые API устарели, и были введены новые. Рефакторизуйте код, заменив устаревшие функции и приведя его в соответствие с последними стандартами. Ознакомьтесь с официальными руководствами по миграции для получения конкретной информации об изменениях.

  1. Проблемы, возникшие во время миграции

Во время миграции возникли некоторые проблемы, которые потребовали корректировок:

Проблема с минификацией
Глобальное включение минификации для всех модулей вызвало неожиданные ошибки, особенно в релизной версии. Из-за агрессивной минификации некоторые классы удалялись до их использования в других модулях.

Решение:

  • Мы установили 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 раз