Membuat Aplikasi Android Functional di Kotlin: Persiapan
() translation by (you can also view the original English article)
Meskipun sebagian besar aplikasi android dibuat dengan menggunakan bahasa pemrograman Java, tidak ada aturan bahwa harus menggunakan Java untuk pengembangan aplikasi Android. Ada berbagai bahasa pemrograman modern yang didesain untuk dapat dijalankan pada Java Vitual Machine(JVM), dan salah satu yang akan menjadi populer pada komunitas Java adalah Kotlin.
Pada bagian pertama dari 3 bagian ini, kami melihat apa itu Kotlin dan apa yang ditawarkan Kotlin dalam pengembangan Aplikasi Android:
- 100% dapat dipetukarkan dengan Java, sampai pada titik dimana kita bisa menggunakan Java libraries dan frameworks, dan bahkan dapat menggabungkan Java dan Kotlin pada project android anda.
- Sintaksnya dirancang sangat mirip dengan Java, itu berarti cukup mudah bagi pengembang Java untuk memahami dasar-dasar Kotlin.
- Menggabungkan fitur dan konsep dari pemrograman fungsional dan prosedural.
- Didukung dengan baik oleh Android Studio
Dalam tutorial lanjutan ini, kita akan memulai pengembangan Kotlin yang sebenarnya. Pada akhir tutorial, anda akan dapat menciptakan aplikasi android sederhana yang menampilkan sebaris teks dan itu ditulis menggunakan Kotlin. Anda juga akan tahu bagaimana menghindari menulis findViewById
, dengan memanfaatkan Kotlin Android Extensions.
Tapi yang paling utama, ini adalah saatnya untuk mengajarkan lingkungan kita bagaimana cara berbicara dengan bahasa baru!
Menginstal plugin Kotlin di Android Studio
Hal pertama yang perlu Anda lakukan adalah menambahkan Kotlin support ke instalasi Android Studio Anda.
Sebelum memulai, pastikan Anda menjalankan Android Studio versi terbaru dan stabil, karena Anda lebih cenderung menemukan bug dengan Kotlin plugin di versi eksperimental Android Studio. Sebaiknya juga membuka SDK Manager dan memeriksa apakah pembaruan tersedia untuk semua paket yang telah terpasang.
Setelah yakin bahwa lingkungan pengembangan sudah up-to-date, Anda sudah siap memasang plugin Kotlin. Jalankan Android Studio dan Anda akan melihat jendela Welcome to Android Studio jika jendela ini tidak muncul, tutup Android Studio sepenuhnya dan jalankan kembali.
Klik icon Configure, dan pilih Plugins pada menu dropdown yg muncul.



Klik tombol Install JetBrains plugins...



Pilih Kotlin pada menu tersebut, dan klik tombol Install berwarna hijau. Kamu perlu merestart IDE sebelum mengaktifkan plugin Kotlin, jadi klik tombol Restart Android Studio yang muncul atau restart IDE anda secara manual.
Konfigurasi Project untuk menggunakan Kotlin
Pada kondisi ini, IDE dapat memahami dan manjalankan kode Kotlin, tapi kamu perlu mengkonfigurasi Kotlin setiap kali ingin menggunakanya pada project baru. Mari buat proyek baru dan konfigurasikan proyek itu untuk menggunakan Kotlin sekarang. Buat proyek baru dengan pengaturan pilihan Anda, namun untuk tujuan kesederhanaan, pilih Empty Activity saat diminta.
Berkat plugin Kotlin, mengonfigurasi sebuah proyek untuk menggunakan Kotlin tidak bisa lebih sederhana: cukup pilih Tools pada toolbar Android Studio, diikuti oleh Kotlin dan Configure Kotlin in Project.



Ini adalah popup dimana kamu bisa memilih konfigurasi Kotlin untuk:
- Semua module
- Semua modul yang berisi file Kotlin
- atau sebuah modul tunggal yang bernama
Karena saya hanya akan menggunakan kode Kotlin dalam proyek saya, saya memilih All modules. Anda juga bisa memilih versi Kotlin yang ingin anda gunakan, ini akan menjadi versi terbaru.
Sebagai alternatif, Anda dapat mengkonfigurasi Kotlin dengan memilih Help dari menu bar di Android Studio, diikuti dengan Find Action… Pada bagian Find Action, mulailah mengetik Configure Kotlin in Project, lalu pilih opsi ini saat muncul.
Opsi pada Configure Kotlin in Project membuat sejumlah tweak pada project file build.gradle, jadi mari kita lihat lebih dekat bagaimana file-file ini telah berubah. Buka project-level file build.gradle — maka seharusnya terlihat seperti ini:
1 |
buildscript { |
2 |
|
3 |
//Declares the version of Kotlin that you’re using. You’ll notice that the version of Kotlin is mentioned in both the buildscript classpath and in your project’s compile dependencies - the version number must be the same in both places//
|
4 |
ext.kotlin_version = '1.0.5-2' |
5 |
repositories { |
6 |
jcenter() |
7 |
}
|
8 |
dependencies { |
9 |
classpath 'com.android.tools.build:gradle:2.2.2' |
10 |
|
11 |
//Declares the Kotlin Gradle plugin as a classpath dependency//
|
12 |
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" |
13 |
}
|
14 |
}
|
15 |
|
16 |
allprojects { |
17 |
repositories { |
18 |
jcenter() |
19 |
}
|
20 |
}
|
Sekarang, mari kita lihat tingkat modul file build.gradle anda:
1 |
apply plugin: 'com.android.application' |
2 |
|
3 |
//Applies the Kotlin Android plugin//
|
4 |
apply plugin: 'kotlin-android' |
5 |
|
6 |
android { |
7 |
compileSdkVersion 25 |
8 |
buildToolsVersion "24.0.0" |
9 |
|
10 |
defaultConfig { |
11 |
applicationId "com.jessicathornsby.kotlinexample" |
12 |
minSdkVersion 21 |
13 |
targetSdkVersion 25 |
14 |
versionCode 1 |
15 |
versionName "1.0" |
16 |
}
|
17 |
|
18 |
buildTypes { |
19 |
release { |
20 |
minifyEnabled false |
21 |
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' |
22 |
}
|
23 |
}
|
24 |
|
25 |
//Although Gradle will compile any Kotlin files it finds in src/main/java, it’s good practice to store your Kotlin files in a dedicated Kotlin directory. Here, you can see that the Kotlin plugin has added a src/main/kotlin declaration to build.gradle, but note that it hasn’t actually created this directory, so we’ll create it ourselves later in this article//
|
26 |
sourceSets { |
27 |
main.java.srcDirs += 'src/main/kotlin' |
28 |
}
|
29 |
}
|
30 |
|
31 |
dependencies { |
32 |
compile fileTree(dir: 'libs', include: ['*.jar']) |
33 |
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { |
34 |
exclude group: 'com.android.support', module: 'support-annotations' |
35 |
})
|
36 |
|
37 |
compile 'com.android.support:appcompat-v7:25.0.1' |
38 |
testCompile 'junit:junit:4.12' |
39 |
|
40 |
//Adds the Kotlin Standard Library as a project dependency//
|
41 |
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" |
42 |
}
|
43 |
repositories { |
44 |
mavenCentral() |
45 |
}
|
Akhirnya, sinkronkan perubahan Anda dengan mengeklik Sync Now dari popup yang muncul atau dengan mengklik icon Sync Project with Gradle Files pada toolbar Android Studio.
Mengubah file Java menjadi Kotlin
Salah satu fitur plugin Kotlin yang sangat berguna bagi pendatang baru Kotlin adalah kemampuannya untuk mengonversi source file Java ke Kotlin, sekaligus menjaga kompatibilitas runtime secara penuh.
Mampu melihat dengan pasti bagaimana setiap file Java akan diterjemahkan ke dalam Kotlin yang sangat ideal untuk membantu Anda mempelajari bahasa ini, tapi juga bisa berguna sepanjang pengalaman anda menggunakan Kotlin, jika Anda pernah berjuang untuk menyelesaikannya bagaimana menulis sesuatu di Kotlin, Anda selalu bisa menuliskannya di Java dan kemudian menggunakan fitur ini untuk mengubah kode itu menjadi Kotlin.
Mari kita ubah proyek kita MainActivity file menjadi Kotlin source file. Ada dua cara untuk mengenalkan aksi Convert Java File to Kotlin File, antara lain:
Pilih file MainActivity, dan kemudian pilih Code dari menu bar Android Studio’s, diikuti dengan Convert Java File to Kotlin File.



Atau pilih Help pada menu bar Android Studio, diikuti dengan Find Action. Pada popup yang muncul ketiklah Convert Java file to Kotlin file dan kemudian pilih opsi ini saat muncul. Perhatikan, Anda juga bisa menjalankan popup Find Action dengan keyboard shortcut: Jika kamu menggunakan mac, silakan tekan tombol Command-Shift-A,dan jika kamu menggunakan Windows atau Linux silakan tekan Control-Shift-A.
Sadarilah bahwa, tergantung pada kompleksitas kode Anda, konversi mungkin tidak selalu 100% akurat, jadi Anda harus selalu memeriksa kesalahan kode yang dikonversi.
MainActivity anda yang baru dikonversi akan terlihat seperti ini:
1 |
import android.support.v7.app.AppCompatActivity |
2 |
import android.os.Bundle |
3 |
|
4 |
class MainActivity : AppCompatActivity() { |
5 |
|
6 |
override fun onCreate(savedInstanceState: Bundle?) { |
7 |
super.onCreate(savedInstanceState) |
8 |
setContentView(R.layout.activity_main) |
9 |
}
|
10 |
}
|
Anda juga akan melihat bahwa ekstensi file telah berubah, berubah dari MainActivity.java menjadi MainActivity.kt.
Ini mungkin merupakan Activity
sederhana, tetapi beberapa baris ini menggambarkan beberapa karakteristik kunci sintaks Kotlin. Karena ini adalah tampilan pertama kami pada beberapa kode Kotlin yang sebenarnya, ayo pilih class ini terpisah baris demi baris.
Memahami Sintaks Kotlin
Di Kotlin, Anda mendeklarasikan class menggunakan kata kunci, class
, persis seperti di Java. Namun, di Kotlin, class (dan method) bersifat publik dan final secara default, sehingga Anda bisa membuat class hanya dengan menulis class MainActivity
.
Ketika sampai memperluas class, anda menggantikan Java extends
dengan titik dua, dan kemudian melampirkan nama dari parent class. Jadi, pada baris pertama file MainActivity.kt, kita membuat class umum dan akhir yang disebut MainActivity yang memperluas AppCompatActivity
:
1 |
class MainActivity : AppCompatActivity() { |
Pada Java setara dengan
1 |
public class MainActivity extends AppCompatActivity { |
Jika Anda ingin mengganti class atau method, Anda harus secara eksplisit menyatakannya sebagai terbuka atau abstrak.
Di Kotlin, fungsi didefinisikan menggunakan kata kunci fun
, diikuti oleh nama fungsi dan parameter dalam tanda kurung. Di Kotlin, nama fungsi itu ada sebelum jenisnya:
1 |
override fun onCreate(savedInstanceState: Bundle?) { |
Ini adalah kebalikan dari Java, di mana tipe datang sebelum nama:
1 |
public void onCreate(Bundle savedInstanceState) |
Perhatikan bahwa kami tidak menentukan metode ini bersifat final, seperti dalam Kotlin semua metode bersifat final secara default.
Sisa dari Aktivitas ini terlihat sangat mirip dengan Java. Namun, beberapa baris ini menggambarkan karakteristik kunci Kotlin yang lain:
1 |
super.onCreate(savedInstanceState) |
2 |
setContentView(R.layout.activity_main) |
Di Kotlin, Anda tidak perlu menyelesaikan baris Anda dengan tanda titik koma, maka tidak adanya titik dua pada snippet di atas. Anda dapat menambahkan titik koma jika Anda benar-benar ingin, tapi kode Anda akan lebih bersih dan mudah dibaca tanpa titik koma.
Sekarang, kita dapat menguraikan file MainActivity.kt, mari kita pindah ke bagian home yang semestinya. Karena plugin Kotlin mengalami kesulitan menambahkan deklarasi src/main/kotlin ke file build.gradle, maka kita harus membuat direktori ini. Langkah ini tidak wajib, tapi tetap menyimpan file Kotlin Anda di direktori khusus akan membuat proyek yang lebih bersih.
Di Project Explorer Android Studio's, Control-click pada project anda, pilih Main directory dan pilih New dari menu yang tampil, diikuti dengan Directory. Beri nama direktori dengan nama kotlin adan klik OK.



Jika Anda sedang berjuang untuk melihat direktori main pada proyek utama Anda, buka dropdown kecil di kiri atas Project Explorer dan pilih Project. Anda seharusnya tidak memiliki masalah saat melihat direktori src/main yang sulit dipahami.



Setelah anda membuat direktori khusus Kotlin, drag file MainActivity.kt anda kedalamnya. Pastikan untuk mempertahankan nama paket file MainActivity.kt agar proyek Anda tetap berjalan.
Juga, jika Anda hanya akan menggunakan Kotlin dalam proyek ini, dan mungkin ingin menghapus direktori Java, daripada mengacaukan proyek anda dengan direktori kosong dan tidak perlu.
Karena Kotlin mengkompilasi bytecode, sebuah aplikasi yang ditulis di Kotlin terasa sama persis dengan aplikasi yang ada di Java, jadi coba pasang aplikasi ini di perangkat Android Anda atau AVD yang kompatibel - seharusnya merasa tidak ada yang berubah
Membuat File Kotlin Tambahan
Jika Anda terus bekerja dengan Kotlin dalam proyek Anda, maka cepat atau lambat Anda akan perlu mulai membuat file Kotlin baru daripada mengubah yang ada di Java.
Untuk membuat Kotlin File, Control-click pada direktori app/src/main/kotlin dan pilih select New > Kotlin Activity.



Berikan nama pada class anda dan pilih class pada dropdown menu. Class baru anda akan terlihat seperti ini:
1 |
class SecondActivity { |
2 |
|
3 |
}
|
Pada titik ini, Aktivitas anda kosong. Untuk sampai pada titik di mana anda dapat mulai menambahkan beberapa fungsi nyata, anda harus menyelesaikan beberapa langkah. Pertama, tambahkan pernyataan import
yang ingin anda gunakan. Satu-satunya perbedaan antara pernyataan impor di Kotlin dan pernyataan impor di Java adalah anda tidak perlu menyelesaikan setiap baris dengan titik koma. Sebagai contoh:
1 |
import android.app.Activity |
2 |
import android.os.Bundle |
3 |
import android.app.Activity |
Anda kemudian harus menentukan class yang anda gunakan, menggunakan format yang sama seperti yang kami lihat pada file MainActivity.kt :
1 |
class SecondActivity : Activity() { |
2 |
|
3 |
}
|
Selanjutnya, anda perlu mangganti aktifitas pada method onCreate
:
1 |
override fun onCreate(savedInstanceState: Bundle?) { |
2 |
super.onCreate(savedInstanceState) |
3 |
}
|
Sekarang anda dapat menambahkan fungsi apa pun yang anda inginkan ke Aktivitas ini (dan di bagian berikutnya, saya akan menunjukkan cara menggunakan ekstensi Kotlin untuk memanipulasi widget UI, jadi ini mungkin tempat yang baik untuk memulai), namun satu penyiapan terakhir yang perlu anda selesaikan adalah menyatakan Aktivitas Kotlin anda dalam Manifest anda. Ini mengikuti formula yang sama persis dengan menyatakan Aktivitas baru Java, misalnya:
1 |
<activity
|
2 |
android:name=".SecondActivity" |
3 |
android:label="@string/second" |
4 |
android:parentActivityName=".MainActivity"> |
5 |
<meta-data
|
6 |
android:name="android.support.PARENT_ACTIVITY" |
7 |
android:value=".MainActivity"/> |
8 |
</activity>
|
Ekstensi Kotlin Android: Selamat Tinggal Untuk findViewById
Sekarang setelah kita menguasai dasar-dasarnya, mari kita lihat lebih dekat pada apa yang benar-benar bisa dilakukan Kotlin-dimulai dengan fitur yang benar-benar dapat mengurangi jumlah kode boilerplate yang perlu anda tulis.
Di Android, setiap kali anda ingin bekerja dengan View
pada Activity, anda perlu menggunakan method findViewById
untuk mendapatkan referensi ke View tersebut. Hal ini membuat findViewById
salah satu yang paling penting, tapi juga salah satu potongan kode yang paling menyebalkan yang akan anda temukan berulang kali pada Android project anda Method findViewById
adalah sumber bug potensial yang besar, dan jika anda bekerja dengan beberapa elemen UI dalam Aktivitas yang sama, maka semua findViewById
dapat benar-benar mengacaukan kode Anda, sehingga sulit untuk dibaca.
Meskipun ada beberapa libraries, seperti Butter Knife, yang bertujuan untuk menghapus kebutuhan akan findViewById
, libraries ini tetap meminta anda untuk memberi keterangan pada bidang untuk setiap Tampilan, yang dapat menyebabkan kesalahan dan masih terasa seperti banyak usaha yang akan dilakukan. Lebih baik diinvestasikan di area lain dari proyek anda.
Plugin Android Kotlin (yang baru saja dimasukkan ke dalam plugin Kotlin standar) menjanjikan untuk membuat findViewById
sesuatu dari masa lalu, menawarkan manfaat dari pustaka tersebut di atas tanpa kekurangan karena harus menulis kode tambahan atau mengirimkan runtime tambahan.
Anda dapat menggunakan ekstensi Kotlin untuk mengimpor referensi View
ke dalam source file anda. Pada titik ini, plugin Kotlin akan menciptakan satu "synthetic properties" yang memungkinkan anda bekerja dengan pandangan ini seolah-olah mereka adalah bagian dari aktivitas anda - yang paling penting, ini berarti anda tidak lagi harus menggunakan findViewById
untuk menemukan setiap View
sebelum anda dapat bekerja dengan itu.
Untuk menggunakan ekstensi, anda harus mengaktifkan plugin Kotlin Android Extensions di setiap modul, jadi buka file build.gradle dan tambahkan yang berikut ini:
1 |
apply plugin: 'kotlin-android-extensions' |
Sinkronkan perubahan ini dengan mengklik popup Sync Now.
Anda kemudian dapat mengimpor satu referensi ke View
, dengan menggunakan format berikut:
1 |
import kotlinx.android.synthetic.main.<layout>.<view-id> |
Misalnya, jika file acitivity_main.xml anda berisi TextView
dengan ID textView1
, anda akan mengimpor referensi ke tampilan ini dengan menambahkan yang berikut ke Activity
anda:
1 |
import kotlinx.android.synthetic.main.activity_main.textView1 |
Anda kemudian dapat mengakses textView1
dalam aktivitas ini menggunakan ID-nya sendiri-dan tanpa melihat findViewById
!
Mari kita lihat ekstensi dalam tindakan, dengan menambahkan TextView
ke file activity_main.xml, mengimpornya ke file MainActivity.kt, dan menggunakan ekstensi untuk mengatur text TextView
secara terprogram.
Mulailah dengan membuat TextView
anda:
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
|
3 |
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" |
4 |
xmlns:tools="http://schemas.android.com/tools" |
5 |
android:id="@+id/activity_main" |
6 |
android:layout_width="match_parent" |
7 |
android:layout_height="match_parent" |
8 |
android:paddingBottom="@dimen/activity_vertical_margin" |
9 |
android:paddingLeft="@dimen/activity_horizontal_margin" |
10 |
android:paddingRight="@dimen/activity_horizontal_margin" |
11 |
android:paddingTop="@dimen/activity_vertical_margin" |
12 |
tools:context="com.jessicathornsby.myapplication.MainActivity"> |
13 |
|
14 |
<TextView
|
15 |
android:id="@+id/myTextView" |
16 |
android:layout_width="wrap_content" |
17 |
android:layout_height="wrap_content" |
18 |
/>
|
19 |
|
20 |
</RelativeLayout>
|
Anda kemudian dapat mengimpor TextView
ke MainActivity.kt, dan mengatur teksnya hanya dengan ID:
1 |
import android.support.v7.app.AppCompatActivity |
2 |
import android.os.Bundle |
3 |
import kotlinx.android.synthetic.main.activity_main.myTextView |
4 |
|
5 |
class MainActivity : AppCompatActivity() { |
6 |
|
7 |
override fun onCreate(savedInstanceState: Bundle?) { |
8 |
super.onCreate(savedInstanceState) |
9 |
setContentView(R.layout.activity_main) |
10 |
myTextView.setText("Hello World") |
11 |
}
|
12 |
}
|
Perhatikan, jika anda ingin bekerja dengan beberapa widget dari file tata letak yang sama, anda dapat mengimpor seluruh isi file tata letak dalam satu gerakan, dengan mengikuti formula berikut:
1 |
import kotlinx.android.synthetic.main.<layout>.* |
Misalnya, jika anda ingin mengimpor semua widget dari file activity_main.xml, maka anda akan menambahkan berikut ini ke Aktivitas anda:
1 |
kotlinx.android.synthetic.main.activity_main.*. |
2 |
Kesimpulan
Pada tahap kedua ini, kami membahas pengaturan lingkungan pengembangan anda untuk mendukung Kotlin, dan melihat betapa mudahnya mengubah kode Java anda yang ada menjadi Kotlin. Kami juga melihat beberapa karakteristik utama dari sintaks Kotlin, dan memperkenalkan ekstensi Kotlin Android ke dalam proyek kami.
Dalam tahap ketiga dan terakhir, kita akan melihat beberapa fitur lanjutan dari bahasa Kotlin yang sebagai pengembang Android, anda seharusnya merasa sangat berguna.