page.title=Dasar-Dasar Aplikasi @jd:body

Dalam dokumen ini

  1. Komponen Aplikasi
    1. Mengaktifkan komponen
  2. File Manifes
    1. Mendeklarasikan komponen
    2. Mendeklarasikan kebutuhan aplikasi
  3. Sumber Daya Aplikasi

Aplikasi Android ditulis dalam bahasa pemrograman Java. Android SDK Tools mengkompilasi kode Anda—bersama data dan file sumber daya —ke dalam APK: Paket Android, yaitu file arsip berekstensi {@code .apk}. Satu file APK berisi semua konten aplikasi Android dan merupakan file yang digunakan perangkat berbasis Android untuk menginstal aplikasi.

Setelah diinstal di perangkat, setiap aplikasi Android tinggal di sandbox keamanannya sendiri:

Dengan cara ini, sistem Android mengimplementasikan prinsip privilese minim. Ini berarti, secara default aplikasi hanya memiliki akses ke komponen yang diperlukannya untuk melakukan pekerjaannya dan tidak lebih dari itu. Hal ini menghasilkan lingkungan yang sangat aman sehingga aplikasi tidak bisa mengakses bagian sistem bila tidak diberi izin.

Akan tetapi, ada beberapa cara bagi aplikasi untuk berbagi data dengan aplikasi lain dan bagi aplikasi untuk mengakses layanan sistem:

Hal tersebut mencakup dasar-dasar tentang cara aplikasi Android berada di dalam sistem. Bagian dokumen selanjutnya memperkenalkan Anda pada:

Komponen Aplikasi

Komponen aplikasi adalah blok pembangun penting dari aplikasi Android. Setiap komponen merupakan titik berbeda yang digunakan sistem untuk memasuki aplikasi. Tidak semua komponen merupakan titik masuk sebenarnya bagi pengguna dan sebagian saling bergantung, namun masing-masing komponen tersedia sebagai kesatuan sendiri dan memainkan peran tertentu—masing-masing merupakan blok pembangun unik yang mendefinisikan perilaku aplikasi secara keseluruhan.

Ada empat macam tipe komponen aplikasi. Setiap tipe memiliki kegunaan tersendiri dan daur hidupnya sendiri yang mendefinisikan cara komponen dibuat dan dimusnahkan.

Berikut ini empat tipe komponen aplikasi:

Aktivitas
Sebuah aktivitas mewakili satu layar dengan antarmuka pengguna. Misalnya, aplikasi email mungkin memiliki satu aktivitas yang menampilkan daftar email baru, aktivitas lain untuk menulis email, dan aktivitas satunya lagi untuk membaca email. Walaupun semua aktivitas bekerja sama untuk membentuk pengalaman pengguna yang kohesif dalam aplikasi email, masing-masing tidak saling bergantung. Karenanya, aplikasi berbeda bisa memulai salah satu aktivitas ini (jika aplikasi email mengizinkannya). Misalnya, aplikasi kamera bisa memulai aktivitas dalam aplikasi email yang membuat email baru agar pengguna bisa berbagi gambar.

Aktivitas diimplementasikan sebagai subkelas {@link android.app.Activity} dan Anda bisa mengetahui selengkapnya tentang hal ini dalam panduan pengembang Aktivitas .

Layanan
Sebuah layanan adalah komponen yang berjalan di latar belakang untuk melakukan operasi yang berjalan lama atau untuk melakukan pekerjaan bagi proses jarak jauh. Layanan tidak menyediakan antarmuka pengguna. Misalnya, sebuah layanan bisa memutar musik di latar belakang sementara pengguna berada dalam aplikasi lain, atau layanan bisa menarik data lewat jaringan tanpa memblokir interaksi pengguna dengan aktivitas. Komponen lain, seperti aktivitas, bisa memulai layanan dan membiarkannya berjalan atau mengikat layanan untuk berinteraksi dengannya.

Layanan diimplementasikan sebagai subkelas {@link android.app.Service} dan Anda bisa mengetahui selengkapnya tentang hal ini dalam panduan pengembang Layanan.

Penyedia konten
Sebuah penyedia konten mengelola seperangkat data-bersama aplikasi. Anda bisa menyimpan data dalam sistem file, database SQLite, di web, atau lokasi penyimpanan permanen lainnya yang bisa diakses aplikasi. Melalui penyedia konten, aplikasi lain bisa melakukan query atau bahkan memodifikasi data (jika penyedia konten mengizinkannya). Misalnya, sistem Android menyediakan penyedia konten yang mengelola informasi kontak pengguna. Karenanya, setiap aplikasi dengan izin yang sesuai bisa melakukan query mengenai bagian dari penyedia konten (seperti {@link android.provider.ContactsContract.Data}) untuk membaca dan menulis informasi tentang orang tertentu.

Penyedia konten juga berguna untuk membaca dan menulis data privat ke aplikasi Anda dan tidak dibagikan. Misalnya, aplikasi contoh Note Pad menggunakan penyedia konten untuk menyimpan catatan.

Penyedia konten diimplementasikan sebagai subkelas {@link android.content.ContentProvider} dan harus mengimplementasikan seperangkat standar API yang memungkinkan aplikasi lain melakukan transaksi. Untuk informasi selengkapnya, lihat panduan pengembang Penyedia Konten.

Penerima siaran
Sebuah penerima siaran adalah komponen yang merespons pengumuman siaran dalam lingkup sistem. Banyak siaran yang berasal dari sistem—misalnya, siaran yang mengumumkan bahwa layar telah dimatikan, baterai lemah, atau gambar telah direkam. Aplikasi juga bisa memulai siaran—misalnya untuk menginformasikan ke aplikasi lain bahwa sebagian data telah diunduh ke perangkat dan bisa digunakan aplikasi lain tersebut. Walaupun penerima siaran tidak menampilkan antarmuka pengguna, penerima bisa membuat pemberitahuan baris status untuk memberi tahu pengguna kapan kejadian siaran dilakukan. Meskipun penerima siaran umumnya cuma menjadi "gerbang" untuk komponen lain dan dimaksudkan untuk melakukan pekerjaan dalam jumlah sangat minim. Misalnya , penerima siaran bisa menjalankan layanan untuk melakukan beberapa pekerjaan berdasarkan kejadian.

Penerima siaran diimplementasikan sebagai subkelas {@link android.content.BroadcastReceiver} dan setiap siaran dikirim sebagai objek {@link android.content.Intent}. Untuk informasi selengkapnya, lihat kelas {@link android.content.BroadcastReceiver}.

Aspek unik dari desain sistem Android adalah aplikasi mana pun bisa memulai komponen aplikasi lain. Misalnya, jika Anda menginginkan pengguna mengambil foto dengan kamera perangkat, bisa saja aplikasi lain yang melakukannya dan aplikasi Anda bisa menggunakannya, sebagai ganti mengembangkan aktivitas sendiri untuk mengambil foto. Anda tidak harus menyatukan atau bahkan menautkan ke kode dari aplikasi kamera. Sebagai gantinya, Anda tinggal memulai aktivitas di aplikasi kamera yang akan mengambil foto. Bila selesai, foto akan dikembalikan ke aplikasi sehingga Anda bisa menggunakannya. Bagi pengguna, kamera seakan menjadi bagian dari aplikasi Anda.

Saat sistem memulai komponen, sistem akan memulai proses untuk aplikasi itu (jika belum berjalan) dan membuat instance kelas yang diperlukan untuk komponen. Misalnya, jika aplikasi Anda memulai aktivitas dalam aplikasi kamera yang mengambil foto, aktivitas itu akan berjalan dalam proses yang dimiliki oleh aplikasi kamera, bukan dalam proses aplikasi Anda. Karenanya, tidak seperti aplikasi di sebagian besar sistem lain, aplikasi Android tidak memiliki titik masuk tunggal (misalnya tidak ada fungsi {@code main()}).

Karena sistem menjalankan setiap aplikasi dalam proses terpisah dengan izin file yang membatasi akses ke aplikasi lain, aplikasi Anda tidak bisa langsung mengaktifkan komponen dari aplikasi lain. Akan tetapi, sistem Android bisa melakukannya. Jadi, untuk mengaktifkan komponen dalam aplikasi lain, Anda harus mengirim pesan ke sistem yang menetapkan intent Anda untuk memulai komponen tertentu. Selanjutnya sistem akan mengaktifkan komponen untuk Anda.

Mengaktifkan Komponen

Tiga dari empat tipe komponen—aktivitas, layanan, dan penerima siaran—diaktifkan oleh pesan asinkron yang disebut intent. Intent saling mengikat setiap komponen saat runtime (Anda bisa menganggapnya sebagai pembawa pesan yang meminta tindakan dari komponen lain), baik komponen itu milik aplikasi Anda atau milik aplikasi lain.

Intent dibuat dengan objek {@link android.content.Intent}, yang mendefinisikan pesan untuk mengaktifkan komponen tertentu atau komponen tipe komponen tertentu—masing-masing intent bisa eksplisit atau implisit.

Untuk aktivitas dan layanan, intent mendefinisikan tindakan yang akan dilakukan (misalnya, untuk "melihat" atau "mengirim" sesuatu) dan mungkin menetapkan URI data untuk ditindaklanjuti (salah satu hal yang mungkin perlu diketahui oleh komponen yang akan dimulai). Misalnya, intent mungkin menyampaikan permintaan suatu aktivitas untuk menampilkan gambar atau membuka halaman web. Dalam beberapa kasus, Anda bisa memulai aktivitas untuk menerima hasil, dalam hal ini, aktivitas juga akan mengembalikan hasil dalam {@link android.content.Intent} (misalnya Anda bisa mengeluarkan intent agar pengguna bisa memilih kontak pribadi dan memintanya dikembalikan kepada Anda—intent yang dikembalikan menyertakan URI yang menunjuk ke kontak yang dipilih).

Untuk penerima siaran, intent hanya mendefinisikan pengumuman yang sedang disiarkan (misalnya, siaran untuk menunjukkan baterai perangkat hampir habis hanya menyertakan string tindakan yang menunjukkan "baterai hampir habis").

Tipe komponen lainnya dan penyedia konten, tidak diaktifkan oleh intent. Melainkan diaktifkan saat ditargetkan oleh permintaan dari {@link android.content.ContentResolver}. Resolver konten menangani semua transaksi langsung dengan penyedia konten sehingga komponen yang melakukan transaksi dengan penyedia tidak perlu dan sebagai gantinya memanggil metode pada objek {@link android.content.ContentResolver}. Ini membuat lapisan abstraksi antara penyedia konten dan komponen yang meminta informasi (demi keamanan).

Ada beberapa metode terpisah untuk mengaktifkan masing-masing tipe komponen:

Untuk informasi selengkapnya tentang menggunakan intent, lihat dokumen Intent dan Filter Intent. Informasi selengkapnya tentang mengaktifkan komponen tertentu juga tersedia dalam dokumen berikut: Aktivitas, Layanan, {@link android.content.BroadcastReceiver} dan Penyedia Konten.

File Manifes

Sebelum sistem Android bisa memulai komponen aplikasi, sistem harus mengetahui keberadaan komponen dengan membaca file {@code AndroidManifest.xml} aplikasi (file "manifes"). Aplikasi Anda harus mendeklarasikan semua komponennya dalam file ini, yang harus menjadi akar dari direktori proyek aplikasi.

Manifes melakukan banyak hal selain mendeklarasikan komponen aplikasi, seperti:

Mendeklarasikan komponen

Tugas utama manifes adalah menginformasikan komponen aplikasi pada sistem. Misalnya, file manifes bisa mendeklarasikan aktivitas sebagai berikut:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:icon="@drawable/app_icon.png" ... >
        <activity android:name="com.example.project.ExampleActivity"
                  android:label="@string/example_label" ... >
        </activity>
        ...
    </application>
</manifest>

Dalam elemen <application> , atribut {@code android:icon} menunjuk ke sumber daya untuk ikon yang mengidentifikasi aplikasi.

Dalam elemen <activity>, atribut {@code android:name} menetapkan nama kelas yang sepenuhnya memenuhi syarat subkelas {@link android.app.Activity} dan atribut {@code android:label} menetapkan string yang akan digunakan sebagai label yang terlihat oleh pengguna untuk aktivitas tersebut.

Anda harus mendeklarasikan semua komponen aplikasi dengan cara ini:

Aktivitas, layanan, dan penyedia konten yang Anda sertakan dalam kode sumber, namun tidak dideklarasikan dalam manifes, tidak akan terlihat pada sistem dan, akibatnya, tidak pernah bisa berjalan. Akan tetapi, penerima siaran bisa dideklarasikan dalam manifes atau dibuat secara dinamis dalam kode (sebagai objek {@link android.content.BroadcastReceiver}) dan didaftarkan pada sistem dengan memanggil {@link android.content.Context#registerReceiver registerReceiver()}.

Untuk informasi selengkapnya tentang cara menstrukturkan file manifes untuk aplikasi Anda, lihat dokumentasi File AndroidManifest.xml.

Mendeklarasikan kemampuan komponen

Seperti telah dibahas di atas, dalam Mengaktifkan Komponen, Anda bisa menggunakan {@link android.content.Intent} untuk memulai aktivitas, layanan, dan penerima siaran. Anda bisa melakukannya dengan menamai komponen sasaran secara eksplisit (menggunakan nama kelas komponen) dalam intent. Akan tetapi, kemampuan intent sebenarnya ada pada konsep intent implisit. Intent implisit cuma menjelaskan tipe tindakan yang akan dilakukan (dan, secara opsional, data tempat Anda ingin melakukan tindakan) dan memungkinkan sistem untuk menemukan komponen pada perangkat yang bisa melakukan tindakan tersebut dan memulainya. Jika ada banyak komponen yang bisa melakukan tindakan yang dijelaskan oleh intent, maka pengguna bisa memilih komponen yang akan digunakan.

Cara sistem mengidentifikasi komponen yang bisa merespons intent adalah dengan membandingkan intent yang diterima dengan filter intent yang disediakan dalam file manifes aplikasi lainnya pada perangkat.

Bila mendeklarasikan aktivitas dalam manifes aplikasi, secara opsional Anda bisa menyertakan filter intent yang mendeklarasikan kemampuan aktivitas agar bisa merespons intent dari aplikasi lain. Anda bisa mendeklarasikan filter intent untuk komponen dengan menambahkan elemen {@code <intent-filter>} sebagai anak elemen deklarasi komponen.

Misalnya, jika Anda telah membangun aplikasi email dengan aktivitas untuk menulis email baru, Anda bisa mendeklarasikan filter intent untuk merespons intent "kirim" (untuk mengirim email baru) seperti ini:

<manifest ... >
    ...
    <application ... >
        <activity android:name="com.example.project.ComposeEmailActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <data android:type="*/*" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Kemudian, jika aplikasi lain membuat intent dengan tindakan {@link android.content.Intent#ACTION_SEND} dan meneruskannya ke {@link android.app.Activity#startActivity startActivity()}, sistem bisa memulai aktivitas Anda agar pengguna bisa menulis draf dan mengirim email.

Untuk informasi selengkapnya tentang membuat filter intent, lihat dokumen Intent dan Filter Intent.

Mendeklarasikan kebutuhan aplikasi

Ada berbagai macam perangkat yang didukung oleh Android dan tidak semuanya menyediakan fitur dan kemampuan yang sama. Agar aplikasi Anda tidak dihapus pada perangkat yang tidak memiliki fitur yang diperlukan aplikasi, Anda harus jelas mendefinisikan profil mengenai tipe perangkat yang didukung aplikasi dengan mendeklarasikan kebutuhan perangkat dan perangkat lunak dalam file manifes. Kebanyakan deklarasi ini hanya bersifat informasi dan sistem tidak membacanya, namun layanan eksternal seperti Google Play akan membacanya untuk menyediakan penyaringan bagi pengguna saat mereka mencari aplikasi dari perangkat.

Misalnya, jika aplikasi memerlukan kamera dan menggunakan API yang disediakan dalam Android 2.1 (API Level 7) , Anda harus mendeklarasikannya sebagai kebutuhan dalam file manifes seperti ini:

<manifest ... >
    <uses-feature android:name="android.hardware.camera.any"
                  android:required="true" />
    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
    ...
</manifest>

Sekarang, perangkat yang tidak memiliki kamera dan menggunakan Android versi lebih rendah dari 2.1 tidak bisa menginstal aplikasi Anda dari Google Play.

Akan tetapi, bisa juga mendeklarasikan bahwa aplikasi Anda menggunakan kamera, namun tidak mengharuskannya. Dalam hal itu, aplikasi Anda harus mengatur atribut {@code required} ke {@code "false"} dan memeriksa saat runtime apakah perangkat memiliki kamera dan menonaktifkan setiap fitur kamera yang sesuai.

Informasi selengkapnya tentang cara mengelola kompatibilitas aplikasi dengan perangkat yang berbeda disediakan dalam dokumen Kompatibilitas Perangkat.

Sumber Daya Aplikasi

Aplikasi Android tidak hanya terdiri dari kode—Aplikasi memerlukan sumber daya yang terpisah dari kode sumber, seperti gambar, file audio, dan apa saja yang berkaitan dengan presentasi visual dari aplikasi. Misalnya, Anda harus mendefinisikan animasi, menu, gaya, warna, dan layout antarmuka pengguna aktivitas dengan file XML. Penggunaan sumber daya aplikasi mempermudah pembaruan berbagai karakteristik aplikasi Anda tanpa memodifikasi kode dan—dengan menyediakan seperangkat sumber daya alternatif—memungkinkan Anda mengoptimalkan aplikasi untuk berbagai konfigurasi perangkat berbeda (seperti bahasa dan ukuran layar yang berbeda).

Untuk setiap sumber daya yang Anda sertakan dalam proyek Android, alat bawaan SDK akan mendefinisikan ID integer unik, yang bisa Anda gunakan untuk mengacu sumber daya dari kode aplikasi atau dari sumber daya lainnya yang didefinisikan dalam XML. Misalnya, jika aplikasi berisi file gambar bernama {@code logo.png} (disimpan dalam direktori {@code res/drawable/}), alat SDK akan menghasilkan ID sumber daya bernama {@code R.drawable.logo}, yang bisa Anda gunakan untuk mengacu gambar dan memasukkannya dalam antarmuka pengguna.

Salah satu aspek paling penting dari penyediaan sumber daya yang terpisah dari kode sumber adalah kemampuan Anda menyediakan sumber daya alternatif untuk konfigurasi perangkat yang berbeda. Misalnya, dengan mendefinisikan string UI dalam XML, Anda bisa menerjemahkan string ke dalam bahasa lain dan menyimpan string itu dalam file terpisah. Kemudian, berdasarkan qualifier bahasa yang ditambahkan ke nama direktori sumber daya (seperti {@code res/values-fr/} untuk nilai string Prancis) dan pengaturan bahasa pengguna, sistem Android akan menerapkan string bahasa yang sesuai untuk UI Anda.

Android mendukung banyak qualifier berbeda untuk sumber daya alternatif Anda. Qualifier adalah string pendek yang Anda sertakan dalam nama direktori sumber daya untuk mendefinisikan konfigurasi perangkat yang harus digunakan sumber daya tersebut. Contoh lainnya, Anda harus sering membuat layout berbeda untuk aktivitas, bergantung pada orientasi layar dan ukuran perangkat. Misalnya, saat layar perangkat dalam orientasi tegak, Anda mungkin ingin layout tombolnya vertikal, tetapi saat layar dalam orientasi mendatar, tombolnya harus sejajar horizontal. Untuk mengubah layout sesuai orientasi, Anda bisa mendefinisikan dua layout berbeda dan menerapkan qualifier yang tepat untuk setiap nama direktori layout. Kemudian, sistem secara otomatis menerapkan layout yang tepat sesuai dengan orientasi perangkat saat ini.

Untuk informasi selengkapnya tentang berbagai jenis sumber daya yang bisa disertakan dalam aplikasi dan cara membuat sumber daya alternatif untuk konfigurasi perangkat berbeda, bacalah Menyediakan Sumber Daya.

Teruskan membaca tentang:

Intent dan Filter Intent
Informasi tentang cara menggunakan API {@link android.content.Intent} untuk mengaktifkan komponen aplikasi, seperti aktivitas dan layanan, dan cara menyediakan komponen aplikasi untuk digunakan oleh aplikasi lain.
Aktivitas
Informasi tentang cara membuat instance kelas {@link android.app.Activity}, yang menyediakan layar tersendiri dalam aplikasi bersama antarmuka pengguna.
Menyediakan Sumber Daya
Informasi tentang cara aplikasi Android disusun untuk memisahkan sumber daya aplikasi dari kode aplikasi, termasuk cara Anda bisa menyediakan sumber daya alternatif untuk konfigurasi perangkat tertentu.

Anda juga mungkin tertarik dengan:

Kompatibilitas Perangkat
Informasi tentang cara kerja Android pada berbagai tipe perangkat dan pengenalan mengenai cara mengoptimalkan aplikasi untuk setiap perangkat atau membatasi ketersediaan aplikasi Anda untuk perangkat berbeda.
Izin Sistem
Informasi tentang cara Android membatasi akses aplikasi pada API tertentu dengan sistem izin yang mengharuskan persetujuan pengguna agar aplikasi dapat menggunakan API tersebut.