Всем привет, меня зовут Эдуард, я 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, сохраняя стабильность и производительность.
Кажется, что чего-то не хватает? Делитесь опытом в комментариях, сделаем этот гайд еще полезнее вместе.
ссылка на оригинал статьи https://habr.com/ru/articles/898048/
Добавить комментарий