Добавьте Kotlin в существующее приложение

Android Studio обеспечивает полную поддержку Kotlin , позволяя добавлять файлы Kotlin в существующий проект и конвертировать код языка Java в Kotlin. Затем вы можете использовать все существующие инструменты Android Studio со своим кодом Kotlin, включая автозаполнение, проверку на соответствие, рефакторинг, отладку и многое другое.

Если вы начинаете новый проект и хотите использовать Kotlin, см. Создание проекта .

Примеры можно найти в наших примерах кода Kotlin .

Добавьте Kotlin в существующий проект

Чтобы добавить Kotlin в свой проект, сделайте следующее:

  1. Нажмите «Файл» > «Создать» и выберите один из различных шаблонов Android, например новый пустой фрагмент , как показано на рисунке 1. Если вы не видите список шаблонов в этом меню, сначала откройте окно «Проект» и выберите свой модуль приложения.

    создать новый пустой фрагмент
    Рисунок 1. Выберите один из доступных шаблонов, например фрагмент или действие.
  2. В появившемся мастере выберите Kotlin в качестве исходного языка . На рис. 2 показано диалоговое окно «Новое действие Android» , когда вы хотите создать новое действие.

    диалоговое окно, позволяющее выбрать Kotlin в качестве исходного языка
    Рисунок 2. Диалоговое окно «Новое действие Android» , в котором вы можете выбрать Kotlin в качестве исходного языка .
  3. Продолжайте работу с мастером.

Альтернативно вы можете нажать «Файл» > «Создать» > «Файл/класс Kotlin», чтобы создать базовый файл Kotlin. Если вы не видите эту опцию, откройте окно проекта и выберите каталог Java . Окно «Новый файл/класс Kotlin» позволяет вам определить имя файла и предоставляет несколько вариантов выбора типа файла: File , Class , Interface , Enum Class или Object . Сделанный вами выбор определяет базовую структуру, созданную для вас в новом файле Kotlin. Если вы выберете Class , Android Studio создаст новый исходный файл Kotlin с заданным именем и соответствующим определением класса. Если вы выберете Interface , интерфейс будет объявлен в файле и так далее.

Если вы впервые добавляете новый класс или файл Kotlin в свой проект напрямую (не используя шаблоны Android), Android Studio отображает предупреждение о том, что Kotlin не настроен в проекте, как показано на рисунке 3. Настройте Kotlin с помощью нажмите «Настроить» либо в правом верхнем углу редактора, либо в предупреждении журнала событий , которое появляется в правом нижнем углу.

Диалоговое окно с предупреждением, предлагающее настроить Kotlin для вашего проекта.
Рисунок 3. Android Studio отображает диалоговое окно с предупреждением, если Kotlin не настроен для вашего проекта.

При появлении запроса выберите вариант настройки Kotlin для всех модулей, содержащих файлы Kotlin , как показано на рисунке 4:

выберите настройку Kotlin для всех модулей, содержащих код Kotlin
Рисунок 4. Выберите настройку Kotlin для всех модулей, содержащих код Kotlin.

Как только вы нажмете «ОК» , 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. Нажмите «Да» , чтобы преобразовать. При желании вы можете установить флажок Не показывать это диалоговое окно в следующий раз , чтобы будущие преобразования выполнялись автоматически.

выберите настройку Kotlin для всех модулей, содержащих код Kotlin
Рисунок 5. Android Studio может конвертировать код Java в Kotlin.

Преобразование кода и возможность обнуления

В процессе преобразования 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 .