Android Studio полностью поддерживает Kotlin, поэтому вы можете добавлять файлы Kotlin в существующий проект и конвертировать код Java в Kotlin. После этого вы сможете использовать все инструменты Android Studio для работы с кодом Kotlin, в том числе автозаполнение, проверку кода, рефакторинг, отладку и т. д.
Если вы начинаете новый проект и хотите использовать Kotlin, ознакомьтесь с разделом Как создать проект.
Примеры можно найти в разделе Примеры кода на Kotlin.
Как добавить Kotlin в существующий проект
Чтобы добавить Kotlin в проект, выполните следующие действия:
Нажмите File > New (Файл > Создать) и выберите один из шаблонов Android, например пустой Fragment (Фрагмент), как показано на рисунке 1. Если в этом меню нет списка шаблонов, сначала откройте окно Проект и выберите модуль приложения.
Рисунок 1. Выберите один из доступных шаблонов, например fragment или activity. В появившемся мастере выберите Kotlin в качестве исходного языка. На рисунке 2 показано диалоговое окно New Android Activity (Новый объект activity для Android), которое используется при создании нового объекта activity.
Рисунок 2. Диалоговое окно New Android Activity (Новый объект activity для Android), в котором можно выбрать Kotlin в качестве Source Language (Исходный язык). Следуйте инструкциям мастера.
Вы также можете нажать File > New > Kotlin File/Class (Файл > Создать > Файл/класс Kotlin), чтобы создать базовый файл Kotlin. Если такого пункта нет, откройте окно Project и выберите каталог java. В окне New Kotlin File/Class (Новый файл/класс Kotlin) можно задать имя файла и выбрать его тип: File (Файл), Class (Класс), Interface (Интерфейс), Enum Class (Класс перечисления) или Object (Объект). От вашего выбора зависит, какой базовый каркас будет создан в новом файле Kotlin. Если вы выберете Class (Класс), Android Studio создаст новый исходный файл Kotlin с указанным именем и соответствующим определением класса. Если вы выберете Интерфейс, в файле будет объявлен интерфейс и т. д.
Если вы впервые добавляете в проект новый класс или файл Kotlin напрямую (не используя шаблоны Android), Android Studio покажет предупреждение о том, что Kotlin не настроен в проекте, как показано на рисунке 3. Настройте Kotlin, нажав Configure (Настроить) в правом верхнем углу редактора или в оповещении журнала событий, которое появится в правом нижнем углу.
Когда появится запрос, выберите вариант настройки Kotlin для всех модулей, содержащих файлы Kotlin, как показано на рисунке 4:
После того как вы нажмете ОК, Android Studio добавит Kotlin в classpath проекта и применит плагин Kotlin Android к каждому модулю, содержащему файлы Kotlin.
Ваши файлы build.gradle должны выглядеть примерно так, как показано ниже.
Яркий
// Project build.gradle file. buildscript { ext.kotlin_version = '1.4.10' ... dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
Kotlin
// Project build.gradle.kts file. buildscript { extra["kotlin_version"] = "1.4.10" ... dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") } }
Яркий
// Inside each module using kotlin plugins { ... id 'kotlin-android' } ... dependencies { implementation 'androidx.core:core-ktx:1.3.2' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" }
Kotlin
// Inside each module using kotlin plugins { ... kotlin("android") } ... val kotlin_version: String by rootProject.extra dependencies { implementation("androidx.core:core-ktx:1.3.2") implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version") }
Исходная организация
По умолчанию новые файлы Kotlin сохраняются в каталоге src/main/java/, поэтому файлы Kotlin и Java можно легко найти в одном месте. Если вы хотите хранить файлы Kotlin отдельно от файлов Java, поместите их в папку src/main/kotlin/. Если вы это сделаете, то вам также нужно будет добавить этот каталог в конфигурацию sourceSets, как показано ниже:
Яркий
android { sourceSets { main.java.srcDirs += 'src/main/kotlin' } }
Kotlin
android { sourceSets { getByName("main") { java.srcDir("src/main/kotlin") } } }
Как преобразовать существующий код Java в код Kotlin
Чтобы преобразовать код Java в Kotlin, откройте файл Java в Android Studio и выберите Code > Convert Java File to Kotlin File (Код > Преобразовать файл Java в файл Kotlin). Вы также можете создать новый файл Kotlin (File > New > Kotlin File/Class) и вставить в него код Java. Android Studio предложит вам преобразовать код в Kotlin, как показано на рисунке 5. Нажмите Да, чтобы преобразовать файл. Вы также можете установить флажок Больше не показывать это диалоговое окно, чтобы конвертация выполнялась автоматически.
Преобразование кода и допустимость значения NULL
В результате преобразования в Android Studio получается функционально эквивалентный код на Kotlin, который компилируется и выполняется. Однако, скорее всего, вам потребуется дополнительно оптимизировать преобразованный код. Например, вы можете изменить способ обработки типов, допускающих значение NULL, в преобразованном коде.
В Android принято откладывать инициализацию объектов View и других компонентов до тех пор, пока фрагмент или объект activity, к которому они прикреплены, не достигнет нужного состояния жизненного цикла. Например, в одном из фрагментов может быть ссылка на кнопку, как показано в следующем фрагменте кода:
public class JavaFragment extends Fragment {
// Null until onCreateView.
private Button button;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_content, container,false);
// Get a reference to the button in the view, only after the root view is inflated.
button = root.findViewById(R.id.button);
return root;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Not null at this point of time when onViewCreated runs
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...
}
});
}
}
Хотя переменная кнопки может иметь нулевое значение, в этом примере она никогда не будет нулевой. Однако, поскольку его значение не присваивается при создании, сгенерированный код Kotlin обрабатывает Button как тип, допускающий значение null, и использует оператор утверждения о ненулевом значении, чтобы распаковать кнопку при добавлении прослушивателя кликов, как показано ниже:
class JavaFragment : Fragment() {
// Null until onCreateView.
private var button: Button? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
...
// Get a reference to the button in the view, only after the root view is inflated.
button = root.findViewById(R.id.button)
...
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Not null at the point of time when onViewCreated fires
// but force unwrapped nonetheless
button!!.setOnClickListener { }
}
}
Такое преобразование менее удобно, чем использование lateinit, поскольку вам придется извлекать ссылку на кнопку с помощью оператора утверждения ненулевого значения или безопасного вызова в каждом месте, где она используется.
В других случаях, когда null является допустимым присваиванием переменной в соответствии с вариантом использования приложения, более подходящим способом безопасного извлечения объекта, допускающего значение NULL, или приведения к разумному значению по умолчанию, отличному от NULL, может быть использование оператора безопасного вызова (?.) с завершающим оператором Элвиса (?:). У Android Studio недостаточно информации, чтобы определить это во время преобразования. По умолчанию используется утверждение о ненулевом значении, но вам следует проверить и при необходимости изменить преобразованный код.
Дополнительная информация
Подробнее о том, как использовать в проекте код на Kotlin и Java, рассказывается в статье Как вызывать код Java из Kotlin.
Подробнее о том, как использовать Kotlin в корпоративных сценариях…
Чтобы узнать больше об идиоматических обертках Kotlin для существующих API Android, ознакомьтесь с Android KTX.