lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

Dasar-Dasar Aplikasi

Aplikasi Android ditulis dalam bahasa pemrograman Java. Android SDK Tools mengompilasi kode Anda—bersama data dan file sumber daya—menjadi sebuah APK: sebuah paket Android, yang berupa file arsip dengan akhiran .apk. Satu file APK berisi semua materi aplikasi Android dan merupakan file yang digunakan perangkat Android untuk memasang aplikasi.

Setelah dipasang di perangkat, setiap aplikasi Android tinggal di kotak pasir keamanannya sendiri:

  • Sistem operasi Android merupakan sistem Linux multi-pengguna yang di dalamnya setiap aplikasi adalah pengguna berbeda.
  • Secara default, sistem menetapkan ID pengguna Linux unik kepada setiap aplikasi (ID ini hanya digunakan oleh sistem dan tidak diketahui aplikasi). Sistem menetapkan izin bagi semua file dalam aplikasi sehingga hanya ID pengguna yang diizinkan yang bisa mengaksesnya.
  • Setiap proses memiliki mesin virtual (VM) sendiri, sehingga kode aplikasi yang berjalan secara terisolasi dari aplikasi lainnya.
  • Secara default, setiap aplikasi berjalan dalam proses Linux-nya sendiri. Android memulai proses bila ada komponen aplikasi yang perlu dijalankan, kemudian mematikan proses bila tidak lagi diperlukan atau bila sistem harus memulihkan memori untuk digunakan aplikasi lain.

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:

  • Dua aplikasi bisa diatur untuk menggunakan ID pengguna Linux yang sama, dalam hal ini keduanya bisa saling mengakses file masing-masing. Untuk menghemat sumber daya sistem, aplikasi dengan ID pengguna yang sama juga bisa diatur agar berjalan dalam proses Linux yang sama dan menggunakan VM yang sama ( aplikasi juga harus ditandatangani dengan sertifikat yang sama).
  • Aplikasi bisa meminta izin akses ke data perangkat seperti kontak pengguna, pesan SMS, storage lepas-pasang (kartu SD), kamera, Bluetooth, dan lainnya. Pengguna secara eksplisit harus memberikan izin ini. Untuk informasi selengkapnya, lihat Bekerja dengan Izin Sistem.

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

  • Komponen kerangka kerja inti yang mendefinisikan aplikasi.
  • File manifes tempat Anda mendeklarasikan komponen dan fitur yang diperlukan perangkat untuk aplikasi.
  • Sumber daya yang terpisah dari kode aplikasi dan memungkinkan aplikasi mengoptimalkan perilakunya untuk beragam konfigurasi perangkat.

Komponen Aplikasi

Komponen aplikasi adalah blok pembangun penting dari aplikasi Android. Setiap komponen merupakan titik berbeda yang digunakan sistem untuk memasuki aplikasi Anda. Tidak semua komponen merupakan titik masuk sebenarnya bagi pengguna dan sebagian saling bergantung, namun masing-masing komponen ada 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
Aktivitas mewakili satu layar dengan satu 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 Activity dan Anda bisa mengetahui selengkapnya tentang hal ini dalam panduan developer Aktivitas .

Layanan
Layanan adalah komponen yang berjalan di latar belakang untuk melakukan operasi yang berjalan lama atau untuk melakukan pekerjaan bagi proses 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 Service dan Anda bisa mengetahui selengkapnya tentang hal ini dalam panduan developer Layanan.

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

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

Penyedia materi diimplementasikan sebagai subkelas ContentProvider dan harus mengimplementasikan seperangkat standar API yang memungkinkan aplikasi lain melakukan transaksi. Untuk informasi selengkapnya, lihat panduan developer Penyedia Materi.

Penerima siaran
Penerima siaran adalah komponen yang merespons pengumuman siaran dalam lingkup sistem. Banyak siaran yang berasal dari sistem—misalnya, siaran yang mengumumkan bahwa layar telah dinonaktifkan, 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 notifikasi bilah 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 BroadcastReceiver dan setiap siaran dikirim sebagai objek Intent. Untuk informasi selengkapnya, lihat kelas BroadcastReceiver.

Aspek unik dari desain sistem Android adalah aplikasi mana pun bisa memulai komponen aplikasi lain. Misalnya, jika Anda menginginkan pengguna menjepret foto dengan kamera perangkat, bisa saja aplikasi lain yang melakukannya dan aplikasi Anda bisa menggunakannya, sebagai ganti mengembangkan aktivitas sendiri untuk menjepret foto. Anda tidak harus menyatukan atau bahkan menautkan ke kode dari aplikasi kamera. Sebagai gantinya, Anda tinggal memulai aktivitas di aplikasi kamera yang akan menjepret 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 menjepret 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 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 maksud 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 maksud. Maksud saling mengikat setiap komponen saat waktu proses (Anda bisa menganggapnya sebagai pembawa pesan yang meminta aksi dari komponen lain), baik komponen itu milik aplikasi Anda atau milik aplikasi lain.

Maksud dibuat dengan objek Intent, yang mendefinisikan pesan untuk mengaktifkan komponen tertentu atau komponen tipe komponen tertentu—masing-masing maksud bisa eksplisit atau implisit.

Untuk aktivitas dan layanan, maksud mendefinisikan aksi 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, maksud mungkin menyampaikan permintaan suatu aktivitas untuk menampilkan gambar atau membuka laman web. Dalam beberapa kasus, Anda bisa memulai aktivitas untuk menerima hasil, dalam hal ini, aktivitas juga akan mengembalikan hasil dalam Intent (misalnya Anda bisa mengeluarkan maksud agar pengguna bisa memilih kontak pribadi dan memintanya dikembalikan kepada Anda—maksud yang dikembalikan menyertakan URI yang menunjuk ke kontak yang dipilih).

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

Tipe komponen lainnya dan penyedia materi, tidak diaktifkan oleh maksud. Melainkan diaktifkan saat ditargetkan oleh permintaan dari ContentResolver. Resolver materi menangani semua transaksi langsung dengan penyedia materi sehingga komponen yang melakukan transaksi dengan penyedia tidak perlu dan sebagai gantinya memanggil metode pada objek ContentResolver. Ini membuat layer abstraksi antara penyedia materi dan komponen yang meminta informasi (demi keamanan).

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

Untuk informasi selengkapnya tentang menggunakan maksud, lihat dokumen Maksud dan Filter Maksud. Informasi selengkapnya tentang mengaktifkan komponen tertentu juga tersedia dalam dokumen berikut: Aktivitas, Layanan, BroadcastReceiver dan Penyedia Materi.

File Manifes

Sebelum sistem Android bisa memulai komponen aplikasi, sistem harus mengetahui bahwa komponen memang ada dengan membaca file 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:

  • Mengidentifikasi izin pengguna yang diperlukan aplikasi, seperti akses Internet atau akses-baca ke kontak pengguna.
  • Mendeklarasikan API Level minimum yang diperlukan aplikasi, berdasarkan API yang digunakan aplikasi.
  • Mendeklarasikan fitur perangkat keras dan perangkat lunak yang diperlukan aplikasi, seperti kamera, layanan Bluetooth, atau layar multisentuh.
  • Pustaka API aplikasi perlu ditautkan (selain Android framework API), seperti pustaka Google Maps.
  • Dan lainnya

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 android:icon menunjuk ke sumber daya untuk ikon yang mengidentifikasi aplikasi.

Dalam elemen <activity>, atribut android:name menetapkan nama kelas yang sepenuhnya memenuhi syarat subkelas Activity dan atribut 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 materi 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 BroadcastReceiver) dan didaftarkan pada sistem dengan memanggil 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 Intent untuk memulai aktivitas, layanan, dan penerima siaran. Anda bisa melakukannya dengan menamai komponen sasaran secara eksplisit (menggunakan nama kelas komponen) dalam maksud. Akan tetapi, kemampuan maksud sebenarnya ada pada konsep maksud implisit. Maksud implisit cuma menjelaskan tipe aksi yang akan dilakukan (dan, secara opsional, data tempat Anda ingin melakukan aksi) dan memungkinkan sistem untuk menemukan komponen pada perangkat yang bisa melakukan aksi tersebut dan memulainya. Jika ada banyak komponen yang bisa melakukan aksi yang dijelaskan oleh maksud, maka pengguna bisa memilih komponen yang akan digunakan.

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

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

Misalnya, jika Anda telah membangun aplikasi email dengan aktivitas untuk menulis email baru, Anda bisa mendeklarasikan filter maksud untuk merespons maksud "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 maksud dengan aksi ACTION_SEND dan meneruskannya ke startActivity(), sistem mungkin akan memulai aktivitas Anda agar pengguna bisa menulis draf dan mengirim email.

Untuk informasi selengkapnya tentang membuat filter maksud, lihat dokumen Maksud dan Filter Maksud.

Mendeklarasikan persyaratan aplikasi

Ada berbagai macam perangkat yang didukung oleh Android dan tidak semuanya menyediakan fitur dan kemampuan yang sama. Agar aplikasi Anda tidak dipasang 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 menelusuri 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 memasang aplikasi Anda dari Google Play.

Akan tetapi, bisa juga mendeklarasikan bahwa aplikasi Anda menggunakan kamera, namun tidak mengharuskannya. Dalam hal itu, aplikasi Anda harus menyetel atribut required ke "false" dan memeriksa pada waktu proses 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 suatu 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 logo.png (disimpan dalam direktori res/drawable/), alat SDK akan menghasilkan ID sumber daya bernama R.drawable.logo, yang bisa Anda gunakan untuk mereferensikan 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 res/values-fr/ untuk nilai string Prancis) dan setelan 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 potret, Anda mungkin ingin layout tombolnya vertikal, tetapi saat layar dalam orientasi lanskap, 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:

Maksud dan Filter Maksud
Informasi tentang cara menggunakan Intent API 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 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 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.