- Создание функциональных приложений для Android в Kotlin: начало работы
- Установка плагина Kotlin в Android Studio
- Настройка вашего проекта для использования Kotlin
- Конвертировать любой файл Java в Kotlin
- Kotlin Android Extensions deprecated. Что делать? Инструкция по миграции
- Кратко о Kotlin Android Extensions
- Проблемы Kotlin Android Extensions
- Альтернативные способы
- View Binding от Google
- Начало работы с View Binding
- Использование в Activity
Создание функциональных приложений для Android в Kotlin: начало работы
Хотя подавляющее большинство приложений для Android написано на Java, не существует правила, согласно которому вы должны использовать Java для разработки под Android. Существует множество современных языков программирования, которые предназначены для работы на виртуальной машине Java (JVM), и одним из этих языков, который становится популярным в сообществе Java, является Kotlin.
В первой части этой серии из трех статей мы рассмотрели, что такое Kotlin и что он может предложить разработчикам Android:
- Он на 100% взаимозаменяем с Java, так что вы можете продолжать использовать существующие библиотеки Java и фреймворки, и даже можете использовать смесь кода Java и Kotlin в ваших проектах Android.
- Его синтаксис спроектирован так, чтобы чувствовать себя очень похожим на Java, а это значит, что разработчикам Java должно быть довольно легко разобраться с основами Kotlin.
- Он сочетает в себе функции и концепции как функционального, так и процедурного программирования.
- Это хорошо поддерживается Android Studio.
В этом последующем уроке мы начнем с реальной разработки Kotlin. К концу учебника вы создадите простое приложение для Android, которое отображает строку текста и полностью написано на Kotlin. Вы также узнаете, как избежать написания другого findViewById , используя расширения Kotlin для Android.
Но сначала пришло время научить нашу среду разработки говорить на новом языке!
Установка плагина Kotlin в Android Studio
Самое первое, что вам нужно сделать, это добавить поддержку Kotlin в вашу установку Android Studio.
Прежде чем мы начнем, убедитесь, что вы используете самую последнюю стабильную версию Android Studio, так как вы с большей вероятностью столкнетесь с ошибками с плагином Kotlin в экспериментальных версиях Android Studio. Также стоит открыть SDK Manager и проверить, доступны ли обновления для любого из установленных вами пакетов.
Если вы уверены, что ваша среда разработки обновлена, вы готовы установить плагин Kotlin. Запустите Android Studio, и вы должны увидеть окно « Добро пожаловать в Android Studio» — если это окно не появляется, полностью закройте Android Studio и перезапустите его.
Нажмите значок « Настройка» , а затем выберите « Плагины» в следующем раскрывающемся списке.
Нажмите кнопку Установить плагины JetBrains …
Выберите Kotlin из меню, а затем нажмите зеленую кнопку Install . Вам нужно будет перезапустить вашу IDE, прежде чем плагин Kotlin станет активным, поэтому либо нажмите кнопку « Перезапустить Android Studio» , которая появляется, либо перезапустите вашу IDE вручную.
Настройка вашего проекта для использования Kotlin
На этом этапе ваша IDE может понимать и запускать код Kotlin, но вам все равно придется настраивать Kotlin каждый раз, когда вы захотите использовать его в новом проекте. Давайте создадим новый проект и настроим этот проект для использования Kotlin сейчас. Создайте новый проект с настройками по вашему выбору, но для простоты выберите « Пустое действие» при появлении запроса.
Благодаря плагину Kotlin, настройка проекта для использования Kotlin не может быть проще: просто выберите Инструменты на панели инструментов Android Studio, а затем Kotlin и Configure Kotlin в Project.
Откроется всплывающее окно, где вы можете настроить Kotlin для:
Поскольку в своем проекте я собираюсь использовать только код Kotlin, я выбрал все модули . Вы также можете выбрать, какую версию Kotlin вы хотите использовать — обычно это будет последняя версия.
Кроме того, вы можете настроить Kotlin, выбрав « Справка» в строке меню Android Studio, а затем « Найти действие». На панели « Найти действие» начните вводить « Настройка Kotlin» в Project , а затем выберите эту опцию, когда она появится.
Параметр « Настроить Kotlin in Project» вносит ряд изменений в файлы build.gradle вашего проекта, поэтому давайте подробнее рассмотрим, как эти файлы изменились. Откройте файл build.gradle уровня проекта — он должен выглядеть примерно так:
Теперь давайте взглянем на файл build.gradle уровня модуля :
//Although Gradle will compile any Kotlin files it finds in src/main/java, it’s good practice to store your Kotlin files in a dedicated Kotlin directory.
Наконец, синхронизируйте свои изменения, щелкнув « Синхронизировать сейчас» в появившемся всплывающем окне или щелкнув значок « Синхронизировать проект с файлами Gradle » на панели инструментов Android Studio.
Конвертировать любой файл Java в Kotlin
Особенностью плагина Kotlin, которая особенно полезна для новичков Kotlin, является его способность конвертировать любой исходный файл Java в Kotlin при сохранении полной совместимости во время выполнения.
Возможность точно увидеть, как любой Java-файл будет переводиться на Kotlin, идеально подходит для того, чтобы помочь вам выучить язык, но он также может пригодиться на протяжении всего вашего путешествия по Kotlin — если вы когда-нибудь пытаетесь понять, как написать что-то на Kotlin, Вы всегда можете написать его на Java, а затем использовать эту функцию для преобразования этого кода в Kotlin.
Давайте преобразуем файл MainActivity нашего проекта в исходный файл Kotlin. Существует два способа вызова действия « Преобразовать Java-файл в Kotlin-файл» плагина Kotlin :
- Выберите файл MainActivity , а затем выберите « Код » в строке меню Android Studio, а затем « Преобразовать файл Java в файл Kotlin» .
- Или выберите « Справка» в строке меню Android Studio, а затем « Найти действие» . В следующем всплывающем окне начните вводить Преобразовать файл Java в файл Kotlin, а затем выберите этот параметр, когда он появится. Обратите внимание, что вы также можете запустить всплывающее окно « Найти действие» с помощью сочетания клавиш: если вы используете Mac, нажмите клавиши Command-Shift-A , а если вы работаете в Windows или Linux, нажмите Control-Shift-A .
Просто помните, что в зависимости от сложности вашего кода конверсия не всегда может быть точной на 100%, поэтому вы всегда должны проверять конвертированный код на наличие ошибок.
Ваш недавно преобразованный MainActivity должен выглядеть примерно так:
Kotlin Android Extensions deprecated. Что делать? Инструкция по миграции
Безусловно, это было очень удобно, особенно если у вас проект полностью на Kotlin. Однако, мир меняется и теперь нужно искать альтернативы. В этой статье мы кратко рассмотрим, что такое плагин Kotlin Android Extension, какие были проблемы с ним и что теперь нам, Android-разработчикам делать. Частично, использовался материал этой статьи. Итак, поехали.
Кратко о Kotlin Android Extensions
Kotlin Android Extensions — это плагин для Kotlin, позволяющий восстанавливать view из Activities, Fragments, и Views без написания стандартного бойлерплэйт-кода типа findViewById.
Плагин генерирует дополнительный код, который позволяет получить доступ к view в виде XML, так же, как если бы вы имели дело с properties с именем id, который вы использовали при определении структуры.
Также он создаёт локальный кэш view. При первом использовании свойства, плагин выполнит стандартный findViewById. В последующем, view будет восстановлен из кэша, поэтому доступ к нему будет быстрее.
Если это всё так удобно, то зачем его сделали deprecated?
Проблемы Kotlin Android Extensions
- Используется глобальный нэйминг идентификаторов. Могут возникнуть ситуации, когда один и тот же идентификатор имеется у разных view в разных лэйаутах — соответственно только на этапе работы приложения вы узнаете о том, что использовали не тот id.
- Возможно использовать только в проектах на Kotlin (кэп)
- Отсутствует Null Safety. В случае, когда view представлена в одной конфигурации и отсутствует в другой — может возникнуть краш, т.к отсутствует обработка таких ситуаций
- Невозможно использовать в многомодульных проектах. Очень распространённый сценарий: у вас есть модуль UI Kit, хранящий общие UI-компоненты, которые вы хотите переиспользовать в других модулях. До сих пор висит issues которое вряд ли поправят. В таком сценарии обычно используют старый добрый findViewById 🙁
- Резюмируя приведённые недостатки, нетрудно понять, что этот подход не идеален — хотя, безусловно, очень удобен на небольших проектах. На больших проектах с многомодульной архитектурой и сотнями экранов — использование Kotlin Android Extensions уже не кажется идеальным решением.
Альтернативные способы
- Использование KotterKnife (кек, даже не думайте).
- Старый добрый FindViewById() — уже получше, но так себе.
- Использование AndroidAnnotations (привет из 2015)
- View Binding от Google — бинго!
View Binding от Google
Итак, победителем в этом списке выглядит ViewBinding от Google (не путайте с DataBinding). Давайте кратко рассмотрим, что это такое.
View Binding — это инструмент, который позволяет проще писать код для взаимодействия с view. При включении View Binding в определенном модуле он генерирует binding классы для каждого файла разметки (layout) в модуле. Объект сгенерированного binding класса содержит ссылки на все view из файла разметки, для которых указан android:id
Главные преимущества View Binding — это Null safety и Type safety.
Начало работы с View Binding
Начать работать с ViewBinding достаточно просто. Нужно добавить опцию в build.gradle:
После этого можно уже использовать. Каждый сгенерированный binding класс содержит ссылку на корневой view разметки (root) и ссылки на все view, которые имеют id. Имя генерируемого класса формируется как «название файла разметки», переведенное в camel case + «Binding». Например, для файла разметки result_profile.xml:
Будет сгенерирован класс ResultProfileBinding, содержащий 2 поля: TextView name и Button button.
Использование в Activity
Например у вас вот такой layout:
Результат работы ViewBinding:
public final class ActivityMainBinding implements ViewBinding < @NonNull private final ConstraintLayout rootView; @NonNull public final TextView textView;
Использовать viewBinding можно так:
private lateinit var binding: ResultProfileBinding override fun onCreate(savedInstanceState: Bundle?)
И теперь, после того, как получили ссылки на view:
binding.name.text = viewModel.name binding.button.setOnClickListener
Если вы используете ViewBinding во фрагменте и держите ссылку на binding во фрагменте (а не только в методе onCreateView()) то не забывайте очищать ссылки в методе onDestroyView().
private var _binding: ResultProfileBinding? = null // This property is only valid between onCreateView and // onDestroyView. private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? < _binding = ResultProfileBinding.inflate(inflater, container, false) val view = binding.root return view >override fun onDestroyView()
Это необходимо делать из-за жизненного цикла фрагмента и view:
В целом, переключиться на ViewBinding достаточно не сложно, хотя и жаль, что Kotlin Android Extensions объявлен deprecated. Не забудьте присоединиться к нам в Telegram, а на платформе AndroidSchool.ru публикуются полезные материалы для Android-разработчика и современные туториалы.