Menambahkan Kotlin ke aplikasi yang sudah ada

Android Studio memberikan dukungan penuh untuk Kotlin, sehingga memungkinkan Anda untuk menambahkan file Kotlin ke project yang ada dan mengonversi kode bahasa Java ke Kotlin. Selanjutnya, Anda dapat menggunakan semua alat yang ada di Android Studio dengan kode Kotlin Anda, termasuk pelengkapan otomatis, pemeriksaan lint, pemfaktoran ulang, proses debug, dan lainnya.

Jika Anda memulai project baru dan ingin menggunakan Kotlin, lihat Membuat project.

Untuk contoh, lihat contoh kode Kotlin kami.

Menambahkan Kotlin ke project yang sudah ada

Untuk menambahkan Kotlin ke project Anda, lakukan hal berikut:

  1. Klik File > New, lalu pilih salah satu dari berbagai template Android, misalnya Fragment kosong baru, seperti yang ditunjukkan pada gambar 1. Jika Anda tidak melihat daftar template dalam menu ini, buka jendela Project terlebih dahulu, lalu pilih modul aplikasi Anda.

    membuat fragmen kosong baru
    Gambar 1. Pilih dari template yang tersedia, misalnya fragmen atau aktivitas.
  2. Di wizard yang muncul, pilih Kotlin untuk Source Language. Gambar 2 menampilkan dialog New Android Activity jika Anda ingin membuat aktivitas baru.

    dialog yang memungkinkan Anda memilih Kotlin untuk bahasa sumber
    Gambar 2. Dialog New Android Activity tempat Anda dapat memilih Kotlin sebagai Source Language.
  3. Lanjutkan melalui wizard.

Atau, Anda dapat mengklik File > New > Kotlin File/Class untuk membuat file Kotlin dasar. Jika Anda tidak melihat opsi ini, buka jendela Project lalu pilih direktori java. Jendela New Kotlin File/Class memungkinkan Anda menentukan nama file dan menyediakan beberapa pilihan untuk jenis file: File, Class, Interface, Enum Class, atau Object. Pilihan yang Anda buat menentukan scaffolding dasar yang dibuat untuk Anda pada file Kotlin baru. Jika Anda memilih Class, Android Studio akan membuat file sumber Kotlin baru dengan nama tertentu dan definisi class yang cocok. Jika Anda memilih Interface, antarmuka dideklarasikan dalam file, dan sebagainya.

Jika ini adalah pertama kalinya Anda menambahkan class atau file Kotlin baru ke project secara langsung (tidak menggunakan template Android), Android Studio akan menampilkan peringatan bahwa Kotlin tidak dikonfigurasi dalam project ini, seperti yang ditunjukkan pada gambar 3. Konfigurasikan Kotlin dengan mengklik Configure di pojok kanan atas editor atau di notifikasi log aktivitas yang muncul di pojok kanan bawah.

dialog peringatan yang meminta Anda mengonfigurasi Kotlin untuk project Anda
Gambar 3. Android Studio menampilkan dialog peringatan jika Kotlin tidak dikonfigurasi untuk project Anda.

Pilih opsi All modules containing Kotlin files untuk mengonfigurasi Kotlin jika diminta, seperti yang ditunjukkan pada gambar 4:

memilih untuk mengonfigurasi Kotlin untuk semua modul yang berisi kode Kotlin
Gambar 4. Pilih untuk mengonfigurasi Kotlin bagi semua modul yang berisi kode Kotlin.

Setelah Anda mengklik Oke, Android Studio akan menambahkan Kotlin ke classpath project Anda dan menerapkan plugin Android Kotlin ke setiap modul yang berisi file Kotlin. File build.gradle Anda akan terlihat seperti contoh di bawah ini:

Groovy

// 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")
    }
}

Groovy

// 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")
}

Organisasi sumber

Secara default, file Kotlin baru disimpan di src/main/java/, yang memudahkan Anda melihat file Kotlin dan Java di satu lokasi. Jika Anda lebih suka memisahkan file Kotlin dari file Java, Anda dapat menempatkan file Kotlin di src/main/kotlin/. Jika melakukannya, Anda juga harus menyertakan direktori ini dalam konfigurasi sourceSets Anda, seperti yang ditunjukkan di bawah ini:

Groovy

android {
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

Kotlin

android {
    sourceSets {
        getByName("main") {
            java.srcDir("src/main/kotlin")
        }
    }
}

Mengonversi kode Java yang sudah ada ke kode Kotlin

Untuk mengonversi kode Java ke Kotlin, buka file Java di Android Studio, lalu pilih Code > Convert Java File to Kotlin File. Atau, buat file Kotlin baru (File > New > Kotlin File/Class), kemudian tempel kode Java Anda ke file tersebut. Selanjutnya, Android Studio akan menampilkan perintah dan menawarkan untuk mengonversi kode Anda ke Kotlin, seperti yang ditunjukkan pada gambar 5. Klik Yes untuk mengonversi. Anda bisa mencentang Don't show this dialog next time secara opsional, yang membuat konversi selanjutnya menjadi otomatis.

memilih untuk mengonfigurasi Kotlin untuk semua modul yang berisi kode Kotlin
Gambar 5. Android Studio dapat mengonversi kode Java ke Kotlin.

Konversi kode dan nullability

Proses konversi Android Studio menghasilkan kode Kotlin yang setara secara fungsional yang dapat dikompilasi dan dijalankan. Namun, Anda mungkin perlu melakukan pengoptimalan tambahan pada kode yang dikonversi. Misalnya, Anda mungkin ingin menyempurnakan cara kode yang dikonversi menangani jenis nullable.

Di Android, hal ini umum untuk menunda inisialisasi objek View dan komponen lainnya hingga fragmen atau aktivitas yang dilampirkan mencapai status siklus proses yang tepat. Misalnya, Anda mungkin memiliki referensi ke tombol pada salah satu fragmen, seperti yang ditunjukkan pada cuplikan berikut:

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) {
                ...
            }
        });
    }
}

Meskipun variabel tombol bersifat nullable, untuk semua tujuan praktis variabel tersebut tidak boleh berupa null jika digunakan dalam contoh ini. Namun, karena nilainya tidak ditetapkan pada titik konstruksi, kode Kotlin yang dihasilkan akan memperlakukan Button sebagai jenis nullable dan menggunakan operator pernyataan non-null untuk membuka tombol saat menambahkan pemroses klik, seperti yang ditunjukkan di bawah ini:

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 { }
    }
}

Untuk kasus ini, konversi tersebut kurang ideal daripada menggunakan lateinit, karena Anda dipaksa membuka referensi tombol dengan pernyataan non-null atau operator panggilan aman di setiap tempat yang diakses.

Dalam kasus lain, jika null adalah penetapan variabel yang valid berdasarkan kasus penggunaan aplikasi Anda, menggunakan operator panggilan aman (?.) dengan operator elvis penghentian (?:) dapat menjadi cara yang tepat untuk secara aman membuka objek nullable atau mengonversi ke nilai default non-null yang logis. Android Studio tidak memiliki cukup informasi untuk menentukan hal ini selama proses konversi. Meskipun didefaultkan untuk pernyataan non-null, Anda harus menindaklanjuti dan menyesuaikan kode yang dikonversi sesuai kebutuhan.

Informasi selengkapnya

Untuk informasi selengkapnya tentang cara menggunakan kode Java dan Kotlin di project Anda, lihat Memanggil kode Java dari Kotlin.

Untuk informasi selengkapnya tentang menggunakan Kotlin dalam skenario perusahaan, lihat Mengadopsi Kotlin untuk tim besar.

Untuk informasi tentang wrapper Kotlin idiomatis untuk API Android yang sudah ada, lihat Android KTX.