Android Studio обеспечивает полную поддержку Kotlin , позволяя добавлять файлы Kotlin в существующий проект и конвертировать код языка Java в Kotlin. Затем вы можете использовать все существующие инструменты Android Studio со своим кодом Kotlin, включая автозаполнение, проверку на соответствие, рефакторинг, отладку и многое другое.
Если вы начинаете новый проект и хотите использовать Kotlin, см. Создание проекта .
Примеры можно найти в наших примерах кода Kotlin .
Добавьте Kotlin в существующий проект
Чтобы добавить Kotlin в свой проект, сделайте следующее:
Нажмите «Файл» > «Новый» и выберите один из различных шаблонов Android, например новый пустой фрагмент , как показано на рисунке 1. Если вы не видите список шаблонов в этом меню, сначала откройте окно «Проект» и выберите свой модуль приложения.
В появившемся мастере выберите Kotlin в качестве исходного языка . На рис. 2 показано диалоговое окно «Новое действие Android» , когда вы хотите создать новое действие.
Продолжайте работу с мастером.
Альтернативно вы можете нажать «Файл» > «Создать» > «Файл/класс Kotlin», чтобы создать базовый файл Kotlin. Если вы не видите эту опцию, откройте окно проекта и выберите каталог Java . Окно «Новый файл/класс Kotlin» позволяет вам определить имя файла и предоставляет несколько вариантов выбора типа файла: File , Class , Interface , Enum Class или Object . Сделанный вами выбор определяет базовую структуру, созданную для вас в новом файле Kotlin. Если вы выберете Class , Android Studio создаст новый исходный файл Kotlin с заданным именем и соответствующим определением класса. Если вы выберете Interface , интерфейс будет объявлен в файле и так далее.
Если вы впервые добавляете новый класс или файл Kotlin в свой проект напрямую (не используя шаблоны Android), Android Studio отображает предупреждение о том, что Kotlin не настроен в проекте, как показано на рисунке 3. Настройте Kotlin с помощью нажмите «Настроить» либо в правом верхнем углу редактора, либо в предупреждении журнала событий , которое появляется в правом нижнем углу.
При появлении запроса выберите вариант настройки Kotlin для всех модулей, содержащих файлы Kotlin , как показано на рисунке 4:
Как только вы нажмете «ОК» , Android Studio добавит Kotlin в путь к классам вашего проекта и применит плагин 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" } }
Котлин
// 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" }
Котлин
// 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, вместо этого вы можете поместить файлы Kotlin в src/main/kotlin/
. Если вы сделаете это, вам также необходимо включить этот каталог в конфигурацию sourceSets
, как показано ниже:
классный
android { sourceSets { main.java.srcDirs += 'src/main/kotlin' } }
Котлин
android { sourceSets { getByName("main") { java.srcDir("src/main/kotlin") } } }
Преобразование существующего кода Java в код Kotlin
Чтобы преобразовать код Java в Kotlin, откройте файл Java в Android Studio и выберите «Код» > «Преобразовать файл Java в файл Kotlin» . Альтернативно создайте новый файл Kotlin ( Файл > Создать > Файл/класс Kotlin ), а затем вставьте в него свой Java-код. Затем Android Studio отображает приглашение и предлагает преобразовать ваш код в Kotlin, как показано на рисунке 5. Нажмите «Да» , чтобы преобразовать. При желании вы можете установить флажок Не показывать это диалоговое окно в следующий раз , чтобы будущие преобразования выполнялись автоматически.
Преобразование кода и возможность обнуления
В процессе преобразования Android Studio создается функционально эквивалентный код Kotlin, который компилируется и запускается. Однако вполне вероятно, что вам потребуется провести дополнительную оптимизацию преобразованного кода. Например, вы можете уточнить, как преобразованный код обрабатывает типы, допускающие значение NULL.
В Android принято откладывать инициализацию объектов View
и других компонентов до тех пор, пока фрагмент или действие, к которому они прикреплены, не достигнет соответствующего состояния жизненного цикла. Например, у вас может быть ссылка на кнопку в одном из ваших фрагментов, как показано в следующем фрагменте:
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) {
...
}
});
}
}
Несмотря на то, что переменная кнопки имеет значение NULL, для всех практических целей она никогда не должна иметь значение NULL при использовании в этом примере. Однако, поскольку его значение не назначается в момент создания, сгенерированный код 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. или принудить к разумному значению по умолчанию, отличному от нуля. Android Studio не располагает достаточной информацией для принятия такого решения в процессе преобразования. Хотя по умолчанию используется ненулевое утверждение, вам следует следить за этим и корректировать преобразованный код по мере необходимости.
Дополнительная информация
Дополнительные сведения об использовании кода Kotlin и Java в вашем проекте см. в разделе Вызов кода Java из Kotlin .
Дополнительные сведения об использовании Kotlin в корпоративных сценариях см. в разделе «Принятие Kotlin для больших команд» .
Информацию об идиоматических оболочках Kotlin для существующих API Android см. в разделе Android KTX .