Plugin Android Gradle 4.0 menambahkan dukungan untuk menggunakan Kotlin dalam konfigurasi build Gradle Anda sebagai pengganti Groovy, bahasa pemrograman yang sebelumnya digunakan dalam file konfigurasi Gradle.
Kotlin lebih disukai daripada Groovy untuk menulis skrip Gradle karena Kotlin lebih mudah dibaca dan menawarkan pemeriksaan waktu kompilasi dan dukungan IDE yang lebih baik.
Meskipun Kotlin saat ini menawarkan integrasi yang lebih baik di editor kode Android Studio jika dibandingkan dengan Groovy, build yang menggunakan Kotlin cenderung lebih lambat dibandingkan build yang menggunakan Groovy, jadi pertimbangkan untuk mem-build performa saat memutuskan apakah akan melakukan migrasi.
Halaman ini memberikan informasi dasar tentang cara mengonversi file build Gradle aplikasi Android dari Groovy ke Kotlin. Untuk panduan migrasi yang lebih komprehensif, lihat dokumentasi resmi Gradle.
Linimasa
Mulai Android Studio Giraffe, project baru menggunakan Kotlin DSL
(build.gradle.kts
) secara default untuk konfigurasi build. Hal ini menawarkan pengalaman
pengeditan yang lebih baik daripada Groovy DSL (build.gradle
) dengan sintaksis
yang ditandai, pelengkapan kode, dan navigasi ke deklarasi. Untuk mempelajari lebih lanjut,
lihat
Primer DSL Kotlin Gradle.
Istilah umum
Kotlin DSL: Lebih merujuk ke DSL Kotlin plugin Android Gradle atau, sesekali, ke DSL Kotlin Gradle yang digunakan.
Dalam panduan migrasi ini, "Kotlin" dan "DSL Kotlin" digunakan secara bergantian. Demikian pula, "Groovy" dan "Groovy DSL" digunakan secara bergantian.
Penamaan file skrip
Nama ekstensi file skrip didasarkan pada bahasa yang digunakan untuk menulis file build:
- File build Gradle yang ditulis dalam Groovy menggunakan ekstensi nama file
.gradle
. - File build Gradle yang ditulis dalam Kotlin menggunakan ekstensi nama
file
.gradle.kts
.
Mengonversi sintaksis
Ada beberapa perbedaan umum dalam sintaksis antara Groovy dan Kotlin, sehingga Anda perlu menerapkan perubahan ini di seluruh skrip build.
Menambahkan tanda kurung ke panggilan metode
Groovy memungkinkan Anda menghapus tanda kurung dalam panggilan metode, sedangkan Kotlin memerlukannya. Untuk memigrasikan konfigurasi Anda, tambahkan tanda kurung ke panggilan metode semacam ini. Kode ini menunjukkan cara mengonfigurasi setelan di Groovy:
compileSdkVersion 30
Kode ini sama dengan kode yang ditulis di Kotlin:
compileSdkVersion(30)
Menambahkan =
ke panggilan tugas
Groovy DSL memungkinkan Anda menghilangkan operator penetapan =
saat
menetapkan properti, sedangkan Kotlin memerlukannya. Kode ini menunjukkan cara
menetapkan properti di Groovy:
java {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Kode ini menunjukkan cara menetapkan properti di Kotlin:
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
Mengonversi string
Berikut adalah perbedaan string antara Groovy dan Kotlin:
- Tanda petik ganda untuk string: Meskipun Groovy memungkinkan string ditentukan menggunakan tanda petik tunggal, Kotlin memerlukan tanda petik ganda.
-
Jenis interpolasi string pada ekspresi titik: Di Groovy, Anda hanya dapat menggunakan awalan
$
untuk interpolasi string pada ekspresi titik-titik, tetapi Kotlin mengharuskan Anda menggabungkan ekspresi titik-titik dengan tanda kurung kurawal. Misalnya, di Groovy, Anda dapat menggunakan$project.rootDir
seperti yang ditunjukkan dalam cuplikan berikut:myRootDirectory = "$project.rootDir/tools/proguard-rules-debug.pro"
Namun, dalam Kotlin, kode sebelumnya memanggil
toString()
padaproject
, bukan padaproject.rootDir
. Untuk mendapatkan nilai direktori utama, gabungkan ekspresi${project.rootDir}
dengan tanda kurung kurawal:myRootDirectory = "${project.rootDir}/tools/proguard-rules-debug.pro"
Untuk mempelajari lebih lanjut, lihat Template string dalam dokumentasi Kotlin.
Mengganti nama ekstensi file
Tambahkan .kts
ke setiap file build saat Anda memigrasikan kontennya. Misalnya,
pilih file build, seperti file settings.gradle
. Ganti nama file menjadi
settings.gradle.kts
dan konversikan konten file menjadi Kotlin. Pastikan project Anda
masih dikompilasi setelah migrasi setiap file build.
Migrasikan file terkecil Anda terlebih dahulu, dapatkan pengalaman, lalu lanjutkan. Anda dapat menggunakan campuran file build Kotlin dan Groovy dalam sebuah project, jadi luangkan waktu untuk berpindah dengan cermat.
Mengganti def
dengan val
atau var
Ganti def
dengan val
atau var
, yang merupakan
cara Anda menentukan variabel di Kotlin.
Ini adalah deklarasi variabel di Groovy:
def building64Bit = false
Kode ini sama dengan kode yang ditulis di Kotlin:
val building64Bit = false
Mengawali properti boolean dengan is
Groovy menggunakan logika simpulan properti
berdasarkan nama properti. Untuk properti boolean foo
, metode yang dipotong
dapat berupa getFoo
, setFoo
, atau isFoo
. Jadi, setelah dikonversi ke Kotlin,
Anda perlu mengubah nama properti menjadi metode yang disimpulkan
yang tidak didukung oleh Kotlin. Misalnya, untuk
elemen boolean DSL buildTypes
, Anda harus mengawalinya dengan is
. Kode ini
menunjukkan cara menetapkan properti boolean di Groovy:
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
...
}
debug {
debuggable true
...
}
...
Berikut adalah kode yang sama di Kotlin. Perlu diperhatikan bahwa properti diawali dengan
is
.
android {
buildTypes {
getByName("release") {
isMinifyEnabled = true
isShrinkResources = true
...
}
getByName("debug") {
isDebuggable = true
...
}
...
Mengonversi daftar dan peta
Daftar dan peta dalam Groovy dan Kotlin ditentukan menggunakan sintaksis yang berbeda. Groovy
menggunakan []
, sedangkan Kotlin memanggil metode pembuatan koleksi secara eksplisit menggunakan
listOf
atau mapOf
. Pastikan untuk mengganti []
dengan listOf
atau mapOf
saat
memigrasikan.
Berikut cara menentukan daftar di Groovy versus Kotlin:
jvmOptions += ["-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError</code>"]
Kode ini sama dengan kode yang ditulis di Kotlin:
jvmOptions += listOf("-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError")
Berikut cara menentukan peta di Groovy versus Kotlin:
def myMap = [key1: 'value1', key2: 'value2']
Kode ini sama dengan kode yang ditulis di Kotlin:
val myMap = mapOf("key1" to "value1", "key2" to "value2")
Mengonfigurasi jenis build
Di DSL Kotlin, hanya jenis build rilis dan debug yang tersedia secara implisit. Semua jenis build kustom lainnya harus dibuat secara manual.
Di Groovy, Anda dapat menggunakan debug, rilis, dan jenis build tertentu lainnya tanpa
membuatnya terlebih dahulu. Cuplikan kode berikut menunjukkan konfigurasi dengan jenis build
debug
, release
, dan
benchmark
di Groovy.
buildTypes {
debug {
...
}
release {
...
}
benchmark {
...
}
}
Untuk membuat konfigurasi yang setara di Kotlin, Anda harus secara eksplisit membuat
jenis build benchmark
.
buildTypes {
debug {
...
}
release {
...
}
register("benchmark") {
...
}
}
Bermigrasi dari buildscript ke blok plugin
Jika build Anda menggunakan blok
buildscript {}
untuk menambahkan plugin ke project, Anda harus memfaktorkan ulang untuk menggunakan blok
plugins {}
. Blok plugins {}
mempermudah penerapan plugin, dan
berfungsi baik dengan
katalog versi.
Selain itu, saat Anda menggunakan blok plugins {}
di file build,
Android Studio akan mengetahui konteksnya meskipun build gagal. Konteks ini
membantu memperbaiki file DSL Kotlin Anda karena memungkinkan IDE Studio
melakukan penyelesaian kode dan memberikan saran bermanfaat lainnya.
Menemukan ID plugin
Meskipun blok buildscript {}
menambahkan plugin ke classpath build menggunakan
koordinat Maven
plugin, misalnya com.android.tools.build:gradle:7.4.0
,
blok plugins {}
menggunakan ID plugin.
Untuk sebagian besar plugin, ID plugin adalah string yang digunakan saat Anda menerapkannya menggunakan
apply plugin
. Misalnya, ID plugin berikut adalah bagian dari
Plugin Android Gradle:
com.android.application
com.android.library
com.android.lint
com.android.test
Anda dapat menemukan daftar plugin lengkap di repositori Maven Google.
Plugin Kotlin dapat dirujuk oleh beberapa ID plugin. Sebaiknya gunakan ID plugin dengan namespace, dan faktorkan ulang dari ID plugin singkat ke ID plugin dengan namespace berdasarkan tabel berikut:
ID plugin singkat | ID plugin dengan namespace |
---|---|
kotlin |
org.jetbrains.kotlin.jvm |
kotlin-android |
org.jetbrains.kotlin.android |
kotlin-kapt |
org.jetbrains.kotlin.kapt |
kotlin-parcelize |
org.jetbrains.kotlin.plugin.parcelize |
Anda juga dapat menelusuri plugin di Portal Plugin Gradle, Repositori Pusat Maven, dan repositori Maven Google. Baca Mengembangkan Plugin Gradle Kustom untuk mempelajari lebih lanjut cara kerja ID plugin.
Melakukan pemfaktoran ulang
Setelah mengetahui ID plugin yang Anda gunakan, lakukan langkah-langkah berikut:
Jika Anda masih memiliki repositori untuk plugin yang dideklarasikan di blok
buildscript {}
, pindahkan ke filesettings.gradle
.Tambahkan plugin ke blok
plugins {}
dalam filebuild.gradle
level teratas. Anda harus menentukan ID dan versi plugin di sini. Jika plugin tidak perlu diterapkan ke project root, gunakanapply false
.Hapus entri
classpath
dari filebuild.gradle.kts
tingkat teratas.Terapkan plugin dengan menambahkannya ke blok
plugins {}
dalam filebuild.gradle
level modul. Anda hanya perlu menentukan ID plugin di sini karena versi diwarisi dari project root.Hapus panggilan
apply plugin
untuk plugin dari filebuild.gradle
level modul.
Misalnya, penyiapan ini menggunakan blok buildscript {}
:
// Top-level build.gradle file
buildscript {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
dependencies {
classpath("com.android.tools.build:gradle:7.4.0")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0")
...
}
}
// Module-level build.gradle file
apply(plugin: "com.android.application")
apply(plugin: "kotlin-android")
Ini adalah penyiapan yang setara menggunakan blok plugins {}
:
// Top-level build.gradle file
plugins {
id 'com.android.application' version '7.4.0' apply false
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
...
}
// Module-level build.gradle file
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
...
}
// settings.gradle
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
Mengonversi blok plugin
Menerapkan plugin dari blok plugins {}
serupa di Groovy dan Kotlin.
Kode berikut menunjukkan cara menerapkan plugin di Groovy saat Anda menggunakan
katalog versi:
// Top-level build.gradle file
plugins {
alias libs.plugins.android.application apply false
...
}
// Module-level build.gradle file
plugins {
alias libs.plugins.android.application
...
}
Kode berikut menunjukkan cara melakukan hal yang sama di Kotlin:
// Top-level build.gradle.kts file
plugins {
alias(libs.plugins.android.application) apply false
...
}
// Module-level build.gradle.kts file
plugins {
alias(libs.plugins.android.application)
...
}
Kode berikut menunjukkan cara menerapkan plugin di Groovy saat Anda tidak menggunakan katalog versi:
// Top-level build.gradle file
plugins {
id 'com.android.application' version '7.3.0' apply false
...
}
// Module-level build.gradle file
plugins {
id 'com.android.application'
...
}
Kode berikut menunjukkan cara melakukan hal yang sama di Kotlin:
// Top-level build.gradle.kts file
plugins {
id("com.android.application") version "7.3.0" apply false
...
}
// Module-level build.gradle.kts file
plugins {
id("com.android.application")
...
}
Untuk detail selengkapnya tentang blok plugins {}
, lihat Menerapkan
plugin
dalam dokumentasi Gradle.
Lain-lain
Untuk mengetahui contoh kode Kotlin untuk fungsi lain, lihat halaman dokumentasi berikut:
- Jika Anda memiliki konfigurasi ProGuard, lihat Mengaktifkan penyingkatan, obfuscation, dan pengoptimalan.
- Jika Anda memiliki blok
signingConfig {}
, lihat Menghapus informasi penandatanganan dari file build. - Jika Anda menggunakan properti lingkup project, lihat Mengonfigurasi properti lingkup project.
Masalah umum
Saat ini, masalah yang sering terjadi adalah kecepatan build mungkin lebih lambat ketika menggunakan Kotlin dibandingkan Groovy.
Cara melaporkan masalah
Untuk petunjuk tentang cara memberikan info yang kami butuhkan untuk melakukan triase masalah, lihat Detail untuk alat build dan bug Gradle. Selanjutnya, laporkan bug menggunakan issue tracker publik Google.
Referensi lainnya
Untuk mengetahui contoh kerja pembuatan file build Gradle yang ditulis dengan Kotlin, lihat aplikasi contoh Now In Android di GitHub.