Java — bahasa pemrograman berorientasi objek yang selama lebih dari sepuluh tahun menjadi bahasa utama Android SDK. Meskipun Google secara resmi beralih ke Kotlin, Java tetap menjadi bagian penting dari ekosistem: proyek lama, aplikasi perusahaan, dan jutaan baris kode di Google Play terus bekerja di Java. Menurut laporan JetBrains Developer Ecosystem (2025), sekitar 35% proyek Android masih menggunakan Java. Baca lebih lanjut tentang tren terkini di laporan resmi JetBrains.
Poin utama
Java — bahasa pemrograman tujuan umum, dibuat oleh Sun Microsystems pada tahun 1995. Prinsip utama — «Write Once, Run Anywhere»: bytecode Java yang dikompilasi berjalan di platform apa pun yang memiliki mesin virtual JVM. Dalam konteks pengembangan seluler, Java menjadi bahasa resmi pertama Android SDK, yang dirilis oleh Google pada tahun 2008.
Arsitektur Java didasarkan pada tiga komponen: JDK (Java Development Kit) — seperangkat alat pengembang, JRE (Java Runtime Environment) — lingkungan runtime, dan JVM (Java Virtual Machine) — mesin virtual. Android menggunakan implementasi JVM-nya sendiri — Android Runtime (ART), yang menggantikan Dalvik di versi 5.0 (Lollipop). ART menjalankan bytecode DEX, yang dikompilasi dari bytecode Java melalui utilitas dx/d8.
Fitur utama Java — manajemen memori otomatis melalui Garbage Collector (GC). Pengembang tidak perlu membebaskan memori secara eksplisit — GC melacak objek yang tidak digunakan dan menghapusnya. Di Android ART, Concurrent Mark Sweep (CMS) dan Generational GC digunakan, dioptimalkan untuk sumber daya perangkat seluler yang terbatas. Ini mengurangi beban pada pengembang, tetapi dapat menyebabkan «lag» saat pengumpulan sampah di thread UI.
Android mendukung subset Java API, yang diperluas dengan setiap versi OS baru. Android 12 (API 31) menambahkan dukungan untuk Java 11, termasuk lambda dengan penangkapan variabel, sistem modular JPMS, dan klien HTTP java.net.http. Android 14 (API 34) memperkenalkan dukungan eksperimental untuk Java 17 melalui desugaring D8/R8 — beberapa fitur (records, sealed classes) diterjemahkan ke kode yang kompatibel untuk versi lama.
| Versi Java | Android API (min) | Versi Android | Fitur utama |
|---|---|---|---|
| Java 7 | API 19 | 4.4 KitKat | try-with-resources, multi-catch |
| Java 8 | API 24 | 7.0 Nougat | Lambda, Stream API, Optional |
| Java 11 | API 31 | 12 | HTTP Client, Local-Variable Syntax |
| Java 17 | API 34 | 14 | Records, Sealed Classes (D8) |
Android SDK mencakup kompiler Java, utilitas dex (d8), aapt (Asset Packaging Tool), emulator, dan pustaka android.* dan java.*. Pengembang menulis kode di Java, mengompilasinya ke file .class (bytecode JVM), kemudian d8 mengubahnya menjadi file .dex (Dalvik Executable), yang dikemas ke dalam APK bersama dengan sumber daya dan AndroidManifest.xml.
Gradle — sistem build proyek Android. File build.gradle (Groovy) atau build.gradle.kts (Kotlin DSL) mendeskripsikan dependensi, versi SDK, rasa (product flavors), dan tanda tangan. Android Gradle Plugin (AGP) versi 8.x mengotomatiskan desugaring — penerjemahan fitur Java modern ke kode yang kompatibel mundur. Misalnya, java.time.LocalDate diubah menjadi kode yang kompatibel dengan API 21+ tanpa perubahan dalam kode sumber pengembang.
// Activity Android sederhana di Java
package com.example.myapp;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.textView);
tv.setText("Halo dari Java!");
}
// Metode untuk menangani klik tombol
public void onButtonClick(View view) {
TextView tv = findViewById(R.id.textView);
tv.setText("Tombol diklik");
}
}Kelas MainActivity mewarisi AppCompatActivity — kelas dasar dari AndroidX untuk kompatibilitas mundur. Metode onCreate dipanggil saat Activity dibuat, di dalamnya layout diatur melalui setContentView. findViewById menghubungkan variabel Java dengan elemen dari tata letak XML. Metode onButtonClick terhubung ke tombol melalui atribut android:onClick di XML.
Siklus hidup Activity di Java — urutan callback: onCreate → onStart → onResume (aktif), onPause → onStop → onDestroy (selesai). Pengembang menimpa metode ini untuk mengelola sumber daya. onCreate — inisialisasi, onPause — menyimpan data, onDestroy — membebaskan sumber daya. Android memanggil metode ini saat rotasi layar, masuk ke latar belakang, dan menerima panggilan.
// Siklus hidup Activity dengan manajemen status
public class DetailActivity extends AppCompatActivity {
private String itemId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
itemId = getIntent().getStringExtra("ITEM_ID");
loadData(itemId);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("item_id", itemId);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
itemId = savedInstanceState.getString("item_id");
loadData(itemId);
}
private void loadData(String id) {
// Memuat data berdasarkan ID
}
}Metode onSaveInstanceState menyimpan status Activity saat rotasi layar atau peralihan tugas. Bundle berisi pasangan kunci-nilai — tipe sederhana, objek Parcelable atau Serializable. onRestoreInstanceState mengembalikan status yang disimpan. Pola ini sangat penting untuk Android, karena sistem dapat menghancurkan Activity saat kehabisan memori dan memulihkannya saat pengguna kembali.
Sintaksis Java — mirip C, bertipe ketat, berorientasi objek. Setiap file .java berisi satu kelas publik, yang namanya cocok dengan nama file. Java tidak mendukung fungsi di luar kelas — semuanya adalah metode. Titik masuk — metode statis public static void main(String[] args) untuk aplikasi konsol atau metode siklus hidup Android Activity untuk seluler.
Java membagi tipe menjadi primitif (int, double, boolean, char, byte, short, long, float) dan tipe referensi (kelas, antarmuka, array, enum). Primitif disimpan di stack dan diteruskan berdasarkan nilai. Objek — di heap, diteruskan berdasarkan referensi. Autoboxing secara otomatis mengonversi primitif menjadi objek pembungkus (Integer, Double, Boolean), tetapi membuat objek tambahan — di Android ini penting untuk kinerja UI.
// Contoh tipe data dan struktur Java
public class DataTypes {
// Primitif
int count = 42;
double price = 19.99;
boolean isActive = true;
char grade = 'A';
// Tipe referensi
String name = "Android";
Integer boxed = 100; // autoboxing
List<String> items = new ArrayList<>();
// Metode dengan Generics
public <T> T getFirst(List<T> list) {
return list.isEmpty() ? null : list.get(0);
}
// Enum untuk kumpulan nilai tetap
public enum Status {
PENDING, LOADING, SUCCESS, ERROR
}
}Generik List<T> memastikan keamanan tipe koleksi. Metode getFirst mengembalikan elemen dari tipe apa pun — tipe konkret ditentukan di titik panggilan. Enum Status dikompilasi menjadi kelas dengan kumpulan konstanta tetap, setiap instance adalah singleton. Di Android, enum lebih jarang digunakan karena konsumsi memori: ProGuard/R8 mengoptimalkan enum menjadi konstanta int jika memungkinkan.
Perbandingan Java dan Kotlin untuk pengembangan Android — salah satu topik utama sejak 2019, ketika Google mendeklarasikan Kotlin sebagai bahasa prioritas. Kotlin sepenuhnya kompatibel dengan Java — keduanya dikompilasi ke bytecode JVM, dapat saling memanggil, dan menggunakan pustaka yang sama. Namun, pendekatan penulisan kode berbeda secara fundamental.
Kotlin menghilangkan verbositas Java: data class menggantikan 50+ baris kelas Java dengan getter, setter, equals, hashCode, toString, dan copy. Null safety tertanam dalam sistem tipe Kotlin — NullPointerException praktis tidak mungkin. Fungsi ekstensi (Extension functions) memungkinkan penambahan metode ke kelas yang ada tanpa pewarisan. Smart Casts secara otomatis mengonversi tipe setelah pemeriksaan.
| Aspek | Java | Kotlin |
|---|---|---|
| Null safety | Anotasi @Nullable / @NonNull | String? / String — bawaan |
| Data class | 50+ baris dengan Lombok | data class User(val name: String) |
| Extension | Kelas utilitas statis | fun String.isEmail(): Boolean |
| Coroutines | AsyncTask / ExecutorService | suspend + Structured Concurrency |
| Lambda | FunctionalInterface + ::method | Lambda secara default |
| Anotasi DI | @Inject, @Module, @Provides | Analog, tetapi lebih sedikit kode |
Dalam hal kinerja, Java dan Kotlin identik — keduanya dikompilasi ke bytecode JVM, yang dijalankan Android ART dengan cara yang sama. Perbedaan dalam ukuran APK: Kotlin menambahkan ~200-400 KB untuk pustaka kotlin-stdlib. Proyek Java memiliki ukuran APK yang lebih kecil karena tidak adanya runtime tambahan, tetapi saat menggunakan Java Stream API dan Optional, ukuran APK dapat meningkat karena desugaring.
Alat pengembang Java untuk Android mencakup Android Studio, Gradle, profiler, dan emulator. Android Studio — IDE resmi, berdasarkan IntelliJ IDEA Community, mencakup editor dengan pelengkapan otomatis Java, penganalisis kode (lint), refactoring, dan editor tata letak visual (Layout Editor).
Android Gradle Plugin (AGP) versi 8.x mengelola build: kompilasi Java ke kelas, desugaring, minifikasi ProGuard/R8, pengemasan ke APK/AAB. R8 — desugaring dan obfuscator yang ditingkatkan, menggantikan ProGuard. Build variants (debug/release + product flavors) dikonfigurasi melalui build.gradle. Gradle Daemon mempercepat build berikutnya melalui caching.
// build.gradle (app) — konfigurasi modul Java
android {
compileSdk 34
defaultConfig {
applicationId "com.example.myapp"
minSdk 21
targetSdk 34
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.11.0'
testImplementation 'junit:junit:4.13.2'
}Blok compileOptions menentukan versi Java untuk kompilasi — Java 17 tersedia sejak AGP 8.x. SDK minimal (minSdk) menentukan versi Android minimum tempat aplikasi berjalan. Target SDK — versi tempat aplikasi diuji. Perbedaan antara compileSdk dan targetSdk: compileSdk — API untuk kompilasi, targetSdk — perilaku runtime.
Keterbatasan Java di Android menjadi alasan Google beralih ke Kotlin. NullPointerException — pengecualian paling umum di aplikasi Java-Android, karena sistem tipe tidak membedakan antara referensi nullable dan non-null. Google merekomendasikan anotasi @Nullable dan @NonNull dari paket androidx.annotation, tetapi kompiler tidak memeriksanya — hanya lint yang melakukannya.
Tidak adanya coroutine — keterbatasan lain: operasi asinkron di Java memerlukan callback, AsyncTask (tidak digunakan lagi sejak API 30), ExecutorService, atau RxJava. Ini menyebabkan callback hell dan kebocoran memori saat rotasi layar. Coroutine Kotlin dengan Structured Concurrency memecahkan masalah ini di tingkat bahasa: coroutine dibatalkan saat Activity dihancurkan tanpa pengelolaan manual.
Kode template di Java — sumber kesalahan saat menulis equals/hashCode, implementasi Parcelable, dan ViewHolder untuk RecyclerView secara manual. Pustaka Android KTX dan Jetpack Compose berorientasi pada Kotlin. API Android baru (Room, Navigation, Compose) menerbitkan contoh di Kotlin secara default, meskipun versi Java ada.
Pertanyaan yang Sering Diajukan
Java — bahasa pemrograman berorientasi objek dari Sun Microsystems (1995), berjalan di mesin virtual JVM. Ini adalah bahasa utama Android SDK hingga 2019. Digunakan dalam pengembangan seluler untuk proyek lama, sisi server (Spring), dan aplikasi perusahaan. Dibedakan dengan pengetikan ketat, pengumpulan sampah otomatis, dan bytecode multiplatform.
Google mendeklarasikan Kotlin sebagai bahasa prioritas untuk Android pada tahun 2019. Pustaka AndroidX baru, Jetpack Compose, rekomendasi arsitektur, dan dokumentasi secara default diberikan di Kotlin. Java tetap didukung penuh, tetapi API dirancang dengan pendekatan Kotlin-first. Proyek Java memerlukan lebih banyak kode template dan tidak mendapatkan fitur bahasa baru terlebih dahulu.
Android mendukung Java 8 sepenuhnya, Java 11 — sebagian dengan Android 12+, Java 17 — secara eksperimental melalui desugaring D8. Android Gradle Plugin (AGP) 8.x menerjemahkan bytecode modern ke kode kompatibel untuk API lama melalui desugar. Pengembang dapat menulis di Java 11+ menggunakan lambda, Optional, dan DateTime API, tetapi records dan sealed classes hanya tersedia melalui D8.
Kotlin membutuhkan lebih sedikit kode: data class menggantikan puluhan baris boilerplate Java, null safety tertanam dalam tipe, coroutine menyederhanakan asinkronisitas. Java menawarkan sintaksis yang lebih sederhana untuk pemula, ekosistem pustaka yang terbukti, dan alat yang stabil. Kinerja runtime identik — keduanya dikompilasi ke bytecode JVM, dijalankan oleh Android ART.
Android Studio — IDE standar untuk pengembangan Android dengan dukungan Java dan Kotlin. Termasuk emulator, profiler (CPU, memory, network), Layout Inspector, APK Analyzer. IntelliJ IDEA cocok untuk Java sisi server. Eclipse ADT sudah usang dan tidak didukung Google. Android Studio juga menyediakan alat untuk migrasi kode Java ke Kotlin melalui konverter bawaan.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga