Home | History | Annotate | Download | only in components
      1 page.title=Dasar-Dasar Aplikasi
      2 @jd:body
      3 
      4 <div id="qv-wrapper">
      5 <div id="qv">
      6 
      7 <h2>Dalam dokumen ini</h2>
      8 <ol>
      9 <li><a href="#Components">Komponen Aplikasi</a>
     10   <ol>
     11     <li><a href="#ActivatingComponents">Mengaktifkan komponen</a></li>
     12   </ol>
     13 </li>
     14 <li><a href="#Manifest">File Manifes</a>
     15   <ol>
     16     <li><a href="#DeclaringComponents">Mendeklarasikan komponen</a></li>
     17     <li><a href="#DeclaringRequirements">Mendeklarasikan kebutuhan aplikasi</a></li>
     18   </ol>
     19 </li>
     20 <li><a href="#Resources">Sumber Daya Aplikasi</a></li>
     21 </ol>
     22 </div>
     23 </div>
     24 
     25 <p>Aplikasi Android ditulis dalam bahasa pemrograman Java. Android SDK Tools mengkompilasi 
     26 kode Anda&mdash;bersama data dan file sumber daya &mdash;ke dalam APK: <i>Paket Android</i>,
     27 yaitu file arsip berekstensi {@code .apk}. Satu file APK berisi semua konten 
     28 aplikasi Android dan merupakan file yang digunakan perangkat berbasis Android untuk menginstal aplikasi.</p>
     29 
     30 <p>Setelah diinstal di perangkat, setiap aplikasi Android tinggal di sandbox keamanannya sendiri: </p>
     31 
     32 <ul>
     33  <li>Sistem operasi Android merupakan sistem Linux multi-pengguna yang di dalamnya setiap 
     34 aplikasi adalah pengguna berbeda.</li>
     35 
     36 <li>Secara default, sistem menetapkan ID pengguna Linux unik kepada setiap aplikasi (ID ini hanya
     37  digunakan oleh sistem dan tidak diketahui aplikasi). Sistem menetapkan izin
     38 bagi semua file dalam aplikasi sehingga hanya ID pengguna yang diizinkan yang bisa mengaksesnya. </li>
     39 
     40 <li>Setiap proses memiliki mesin virtual (VM) sendiri, sehingga kode aplikasi yang berjalan secara terisolasi dari 
     41 aplikasi lainnya.</li>
     42 
     43 <li>Secara default, setiap aplikasi berjalan dalam proses Linux-nya sendiri. Android memulai proses 
     44 bila ada komponen aplikasi yang perlu dijalankan, kemudian mematikan proses bila tidak lagi diperlukan
     45 atau bila sistem harus memulihkan memori untuk digunakan aplikasi lain.</li>
     46 </ul>
     47 
     48 <p>Dengan cara ini, sistem Android mengimplementasikan <em>prinsip privilese minim</em>. Ini berarti, 
     49 secara default aplikasi hanya memiliki akses ke komponen yang diperlukannya untuk melakukan pekerjaannya dan
     50 tidak lebih dari itu. Hal ini menghasilkan lingkungan yang sangat aman sehingga aplikasi tidak bisa mengakses bagian 
     51 sistem bila tidak diberi izin.</p>
     52 
     53 <p>Akan tetapi, ada beberapa cara bagi aplikasi untuk berbagi data dengan aplikasi lain dan bagi aplikasi
     54 untuk mengakses layanan sistem:</p>
     55 
     56 <ul>
     57   <li>Dua aplikasi bisa diatur untuk menggunakan ID pengguna Linux yang sama, 
     58 dalam hal ini keduanya bisa saling mengakses file masing-masing.  Untuk menghemat sumber daya sistem, aplikasi dengan ID
     59 pengguna yang sama juga bisa diatur agar berjalan dalam proses Linux yang sama dan menggunakan VM yang sama (
     60 aplikasi juga harus ditandatangani dengan sertifikat yang sama).</li>
     61   <li>Aplikasi bisa meminta izin akses ke data perangkat seperti kontak 
     62 pengguna, pesan SMS, penyimpanan lepas-pasang (kartu SD), kamera, Bluetooth, dan lainnya. Semua 
     63 izin aplikasi harus diberikan oleh pengguna saat menginstal.</li>
     64 </ul>
     65 
     66 <p>Hal tersebut mencakup dasar-dasar tentang cara aplikasi Android berada di dalam sistem. Bagian dokumen
     67 selanjutnya memperkenalkan Anda pada:</p>
     68 <ul>
     69   <li>Komponen kerangka kerja inti yang mendefinisikan aplikasi.</li>
     70   <li>File manifes tempat Anda mendeklarasikan komponen dan fitur yang diperlukan perangkat
     71 untuk aplikasi.</li>
     72   <li>Sumber daya yang terpisah dari kode aplikasi dan memungkinkan 
     73 aplikasi mengoptimalkan perilakunya untuk beragam konfigurasi perangkat.</li>
     74 </ul>
     75 
     76 
     77 
     78 <h2 id="Components">Komponen Aplikasi</h2>
     79 
     80 <p>Komponen aplikasi adalah blok pembangun penting dari aplikasi Android.
     81 Setiap komponen merupakan titik berbeda yang digunakan sistem untuk memasuki aplikasi. Tidak semua komponen 
     82 merupakan titik masuk sebenarnya bagi pengguna dan sebagian saling bergantung, namun masing-masing komponen tersedia 
     83 sebagai kesatuan sendiri dan memainkan peran tertentu&mdash;masing-masing merupakan
     84 blok pembangun unik yang mendefinisikan perilaku aplikasi secara keseluruhan.</p>
     85 
     86 <p>Ada empat macam tipe komponen aplikasi. Setiap tipe memiliki kegunaan tersendiri
     87 dan daur hidupnya sendiri yang mendefinisikan cara komponen dibuat dan dimusnahkan.</p>
     88 
     89 <p>Berikut ini empat tipe komponen aplikasi:</p>
     90 
     91 <dl>
     92 
     93 <dt><b>Aktivitas</b></dt>
     94 
     95 <dd>Sebuah <i>aktivitas</i> mewakili satu layar dengan antarmuka pengguna. Misalnya,
     96 aplikasi email mungkin memiliki satu aktivitas yang menampilkan daftar email 
     97 baru, aktivitas lain untuk menulis email, dan aktivitas satunya lagi untuk membaca email. Walaupun
     98 semua aktivitas bekerja sama untuk membentuk pengalaman pengguna yang kohesif dalam aplikasi email,
     99 masing-masing tidak saling bergantung. Karenanya, aplikasi berbeda bisa memulai
    100 salah satu aktivitas ini (jika aplikasi email mengizinkannya). Misalnya, aplikasi kamera bisa memulai
    101 aktivitas dalam aplikasi email yang membuat email baru agar pengguna bisa berbagi gambar.
    102 
    103 <p>Aktivitas diimplementasikan sebagai subkelas {@link android.app.Activity} dan Anda bisa mengetahui selengkapnya
    104 tentang hal ini dalam panduan pengembang <a href="{@docRoot}guide/components/activities.html">Aktivitas</a>
    105 .</p>
    106 </dd>
    107 
    108 
    109 <dt><b>Layanan</b></dt>
    110 
    111 <dd>Sebuah <i>layanan</i> adalah komponen yang berjalan di latar belakang untuk melakukan
    112 operasi yang berjalan lama atau untuk melakukan pekerjaan bagi proses jarak jauh. Layanan
    113 tidak menyediakan antarmuka pengguna. Misalnya, sebuah layanan bisa memutar musik di latar belakang sementara 
    114 pengguna berada dalam aplikasi lain, atau layanan bisa menarik data lewat jaringan tanpa
    115 memblokir interaksi pengguna dengan aktivitas. Komponen lain, seperti aktivitas, bisa memulai
    116 layanan dan membiarkannya berjalan atau mengikat layanan untuk berinteraksi dengannya.
    117 
    118 <p>Layanan diimplementasikan sebagai subkelas {@link android.app.Service} dan Anda bisa mengetahui selengkapnya
    119 tentang hal ini dalam panduan
    120 pengembang <a href="{@docRoot}guide/components/services.html">Layanan</a>.</p>
    121 </dd>
    122 
    123 
    124 <dt><b>Penyedia konten</b></dt>
    125 
    126 <dd>Sebuah <i>penyedia konten</i> mengelola seperangkat data-bersama aplikasi. Anda bisa menyimpan data
    127 dalam sistem file, database SQLite, di web, atau lokasi penyimpanan permanen lainnya
    128 yang bisa diakses aplikasi. Melalui penyedia konten, aplikasi lain bisa melakukan query atau bahkan 
    129 memodifikasi data (jika penyedia konten mengizinkannya). Misalnya, sistem Android menyediakan penyedia
    130 konten yang mengelola informasi kontak pengguna. Karenanya, setiap aplikasi
    131 dengan izin yang sesuai bisa melakukan query mengenai bagian dari penyedia konten (seperti {@link
    132 android.provider.ContactsContract.Data}) untuk membaca dan menulis informasi tentang orang tertentu.
    133 
    134 <p>Penyedia konten juga berguna untuk membaca dan menulis data privat ke aplikasi Anda
    135 dan tidak dibagikan. Misalnya, aplikasi contoh <a href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> menggunakan
    136 penyedia konten untuk menyimpan catatan.</p>
    137 
    138 <p>Penyedia konten diimplementasikan sebagai subkelas {@link android.content.ContentProvider}
    139 dan harus mengimplementasikan seperangkat standar API yang memungkinkan aplikasi
    140 lain melakukan transaksi. Untuk informasi selengkapnya, lihat panduan pengembang 
    141 <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
    142 </dd>
    143 
    144 
    145 <dt><b>Penerima siaran</b></dt>
    146 
    147 <dd>Sebuah <i>penerima siaran</i> adalah komponen yang merespons pengumuman siaran dalam lingkup
    148 sistem.  Banyak siaran yang berasal dari sistem&mdash;misalnya, siaran yang mengumumkan bahwa
    149 layar telah dimatikan, baterai lemah, atau gambar telah direkam.
    150 Aplikasi juga bisa memulai siaran&mdash;misalnya untuk menginformasikan ke
    151 aplikasi lain bahwa sebagian data telah diunduh ke perangkat dan bisa digunakan aplikasi lain tersebut. Walaupun penerima
    152 siaran tidak menampilkan antarmuka pengguna, penerima bisa <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">membuat pemberitahuan baris status</a>
    153 untuk memberi tahu pengguna kapan kejadian siaran dilakukan. Meskipun penerima siaran umumnya cuma menjadi
    154 "gerbang" untuk komponen lain dan dimaksudkan untuk melakukan pekerjaan dalam jumlah sangat minim. Misalnya
    155 , penerima siaran bisa menjalankan layanan untuk melakukan beberapa pekerjaan berdasarkan kejadian.
    156 
    157 <p>Penerima siaran diimplementasikan sebagai subkelas {@link android.content.BroadcastReceiver}
    158 dan setiap siaran dikirim sebagai objek {@link android.content.Intent}. Untuk informasi selengkapnya,
    159 lihat kelas {@link android.content.BroadcastReceiver}.</p>
    160 </dd>
    161 
    162 </dl>
    163 
    164 
    165 
    166 <p>Aspek unik dari desain sistem Android adalah aplikasi mana pun bisa memulai 
    167 komponen aplikasi lain. Misalnya, jika Anda menginginkan pengguna mengambil
    168 foto dengan kamera perangkat, bisa saja aplikasi lain yang melakukannya dan aplikasi
    169 Anda bisa menggunakannya, sebagai ganti mengembangkan aktivitas sendiri untuk mengambil foto. Anda tidak
    170 harus menyatukan atau bahkan menautkan ke kode dari aplikasi kamera.
    171 Sebagai gantinya, Anda tinggal memulai aktivitas di aplikasi kamera yang akan mengambil
    172 foto. Bila selesai, foto akan dikembalikan ke aplikasi sehingga Anda bisa menggunakannya. Bagi pengguna,
    173 kamera seakan menjadi bagian dari aplikasi Anda.</p>
    174 
    175 <p>Saat sistem memulai komponen, sistem akan memulai proses untuk aplikasi itu (jika
    176 belum berjalan) dan membuat instance kelas yang diperlukan untuk komponen. Misalnya, jika aplikasi Anda
    177 memulai aktivitas dalam aplikasi kamera yang mengambil foto, aktivitas itu akan
    178 berjalan dalam proses yang dimiliki oleh aplikasi kamera, bukan dalam proses aplikasi Anda. 
    179 Karenanya, tidak seperti aplikasi di sebagian besar sistem lain, aplikasi Android tidak memiliki titik
    180 masuk tunggal (misalnya tidak ada fungsi {@code main()}).</p>
    181 
    182 <p>Karena sistem menjalankan setiap aplikasi dalam proses terpisah dengan izin file yang
    183 membatasi akses ke aplikasi lain, aplikasi Anda tidak bisa langsung mengaktifkan komponen dari aplikasi lain. Akan tetapi, sistem
    184 Android bisa melakukannya. Jadi, untuk mengaktifkan
    185 komponen dalam aplikasi lain, Anda harus mengirim pesan ke sistem yang menetapkan <em>intent</em> Anda untuk memulai
    186 komponen tertentu. Selanjutnya sistem akan mengaktifkan komponen untuk Anda.</p>
    187 
    188 
    189 <h3 id="ActivatingComponents">Mengaktifkan Komponen</h3>
    190 
    191 <p>Tiga dari empat tipe komponen&mdash;aktivitas, layanan, dan
    192 penerima siaran&mdash;diaktifkan oleh pesan asinkron yang disebut <em>intent</em>.
    193 Intent saling mengikat setiap komponen saat runtime (Anda bisa menganggapnya
    194 sebagai pembawa pesan yang meminta tindakan dari komponen lain), baik komponen itu milik aplikasi Anda
    195 atau milik aplikasi lain.</p>
    196 
    197 <p>Intent dibuat dengan objek {@link android.content.Intent}, yang mendefinisikan pesan untuk
    198 mengaktifkan komponen tertentu atau komponen <em>tipe</em> komponen tertentu&mdash;masing-masing intent
    199 bisa eksplisit atau implisit.</p>
    200 
    201 <p>Untuk aktivitas dan layanan, intent mendefinisikan tindakan yang akan dilakukan (misalnya, untuk "melihat" atau 
    202 "mengirim" sesuatu) dan mungkin menetapkan URI data untuk ditindaklanjuti (salah satu hal yang mungkin perlu diketahui 
    203 oleh komponen yang akan dimulai). Misalnya, intent mungkin menyampaikan permintaan suatu 
    204 aktivitas untuk menampilkan gambar atau membuka halaman web. Dalam beberapa kasus, Anda bisa memulai
    205 aktivitas untuk menerima hasil, dalam hal ini, aktivitas juga akan mengembalikan hasil 
    206 dalam {@link android.content.Intent} (misalnya Anda bisa mengeluarkan intent agar
    207 pengguna bisa memilih kontak pribadi dan memintanya dikembalikan kepada Anda&mdash;intent yang dikembalikan menyertakan URI yang 
    208 menunjuk ke kontak yang dipilih).</p>
    209 
    210 <p>Untuk penerima siaran, intent hanya mendefinisikan
    211 pengumuman yang sedang disiarkan (misalnya, siaran untuk menunjukkan baterai perangkat hampir habis
    212 hanya menyertakan string tindakan yang menunjukkan "baterai hampir habis").</p>
    213 
    214 <p>Tipe komponen lainnya dan penyedia konten, tidak diaktifkan oleh intent. Melainkan
    215 diaktifkan saat ditargetkan oleh permintaan dari {@link android.content.ContentResolver}. Resolver
    216 konten menangani semua transaksi langsung dengan penyedia konten sehingga komponen yang melakukan 
    217 transaksi dengan penyedia tidak perlu dan sebagai gantinya memanggil metode pada objek {@link
    218 android.content.ContentResolver}. Ini membuat lapisan abstraksi antara penyedia
    219 konten dan komponen yang meminta informasi (demi keamanan).</p>
    220 
    221 <p>Ada beberapa metode terpisah untuk mengaktifkan masing-masing tipe komponen:</p>
    222 <ul>
    223   <li>Anda bisa memulai aktivitas (atau memberinya pekerjaan baru) dengan 
    224 meneruskan {@link android.content.Intent} ke {@link android.content.Context#startActivity
    225 startActivity()} atau {@link android.app.Activity#startActivityForResult startActivityForResult()}
    226 (bila Anda ingin aktivitas mengembalikan hasil).</li>
    227   <li>Anda bisa memulai layanan (atau memberikan instruksi baru ke layanan yang sedang berlangsung) dengan 
    228 meneruskan {@link android.content.Intent} ke {@link android.content.Context#startService
    229 startService()}. Atau Anda bisa mengikat ke layanan dengan meneruskan {@link android.content.Intent} ke
    230 {@link android.content.Context#bindService bindService()}.</li>
    231   <li>Anda bisa memulai siaran dengan meneruskan {@link android.content.Intent} ke metode seperti
    232 {@link android.content.Context#sendBroadcast(Intent) sendBroadcast()}, {@link
    233 android.content.Context#sendOrderedBroadcast(Intent, String) sendOrderedBroadcast()}, atau {@link
    234 android.content.Context#sendStickyBroadcast sendStickyBroadcast()}.</li>
    235   <li>Anda bisa melakukan query ke penyedia konten dengan memanggil {@link
    236 android.content.ContentProvider#query query()} pada {@link android.content.ContentResolver}.</li>
    237 </ul>
    238 
    239 <p>Untuk informasi selengkapnya tentang menggunakan intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter
    240  Intent</a>. Informasi selengkapnya tentang mengaktifkan komponen 
    241 tertentu juga tersedia dalam dokumen berikut: <a href="{@docRoot}guide/components/activities.html">Aktivitas</a>, <a href="{@docRoot}guide/components/services.html">Layanan</a>, {@link
    242 android.content.BroadcastReceiver} dan <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
    243 
    244 
    245 <h2 id="Manifest">File Manifes</h2>
    246 
    247 <p>Sebelum sistem Android bisa memulai komponen aplikasi, sistem harus mengetahui
    248 keberadaan komponen dengan membaca file {@code AndroidManifest.xml} aplikasi (file 
    249 "manifes"). Aplikasi Anda harus mendeklarasikan semua komponennya dalam file ini, yang harus menjadi akar
    250 dari direktori proyek aplikasi.</p>
    251 
    252 <p>Manifes melakukan banyak hal selain mendeklarasikan komponen aplikasi,
    253 seperti:</p>
    254 <ul>
    255   <li>Mengidentifikasi izin pengguna yang diperlukan aplikasi, seperti akses Internet atau
    256 akses-baca ke kontak pengguna.</li>
    257   <li>Mendeklarasikan <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a>
    258  minimum yang diperlukan aplikasi, berdasarkan API yang digunakan aplikasi.</li>
    259   <li>Mendeklarasikan fitur perangkat keras dan perangkat lunak yang diperlukan aplikasi, seperti kamera,
    260 layanan Bluetooth, atau layar multisentuh.</li>
    261   <li>Pustaka API aplikasi perlu ditautkan (selain 
    262 API kerangka kerja Android), seperti pustaka 
    263 <a href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps.</a></li>
    264   <li>Dan lainnya</li>
    265 </ul>
    266 
    267 
    268 <h3 id="DeclaringComponents">Mendeklarasikan komponen</h3>
    269 
    270 <p>Tugas utama manifes adalah menginformasikan komponen aplikasi pada sistem. Misalnya,
    271 file manifes bisa mendeklarasikan aktivitas sebagai berikut: </p>
    272 
    273 <pre>
    274 &lt;?xml version="1.0" encoding="utf-8"?&gt;
    275 &lt;manifest ... &gt;
    276     &lt;application android:icon="@drawable/app_icon.png" ... &gt;
    277         &lt;activity android:name="com.example.project.ExampleActivity"
    278                   android:label="@string/example_label" ... &gt;
    279         &lt;/activity&gt;
    280         ...
    281     &lt;/application&gt;
    282 &lt;/manifest&gt;</pre>
    283 
    284 <p>Dalam elemen <code><a
    285 href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code>
    286 , atribut {@code android:icon} menunjuk ke sumber daya untuk ikon yang mengidentifikasi
    287 aplikasi.</p>
    288 
    289 <p>Dalam elemen <code><a
    290 href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>, 
    291 atribut {@code android:name} menetapkan nama kelas yang sepenuhnya memenuhi syarat subkelas {@link
    292 android.app.Activity} dan atribut {@code android:label} menetapkan string yang akan
    293 digunakan sebagai label yang terlihat oleh pengguna untuk aktivitas tersebut.</p>
    294 
    295 <p>Anda harus mendeklarasikan semua komponen aplikasi dengan cara ini:</p>
    296 <ul>
    297   <li>Elemen <code><a
    298 href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> untuk
    299 aktivitas</li>
    300   <li>Elemen <code><a
    301 href="{@docRoot}guide/topics/manifest/service-element.html">&lt;service&gt;</a></code> untuk
    302 layanan</li>
    303   <li>Elemen <code><a
    304 href="{@docRoot}guide/topics/manifest/receiver-element.html">&lt;receiver&gt;</a></code> untuk
    305 penerima siaran</li>
    306   <li>Elemen <code><a
    307 href="{@docRoot}guide/topics/manifest/provider-element.html">&lt;provider&gt;</a></code> untuk
    308 penyedia konten</li>
    309 </ul>
    310 
    311 <p>Aktivitas, layanan, dan penyedia konten yang Anda sertakan dalam kode sumber, namun tidak
    312 dideklarasikan dalam manifes, tidak akan terlihat pada sistem dan, akibatnya, tidak pernah bisa berjalan.  Akan tetapi,
    313 penerima siaran 
    314 bisa dideklarasikan dalam manifes atau dibuat secara dinamis dalam kode (sebagai objek 
    315 {@link android.content.BroadcastReceiver}) dan didaftarkan pada sistem dengan memanggil
    316 {@link android.content.Context#registerReceiver registerReceiver()}.</p>
    317 
    318 <p>Untuk informasi selengkapnya tentang cara menstrukturkan file manifes untuk aplikasi Anda, 
    319 lihat dokumentasi <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">File AndroidManifest.xml</a>. </p>
    320 
    321 
    322 
    323 <h3 id="DeclaringComponentCapabilities">Mendeklarasikan kemampuan komponen</h3>
    324 
    325 <p>Seperti telah dibahas di atas, dalam <a href="#ActivatingComponents">Mengaktifkan Komponen</a>, Anda bisa menggunakan
    326 {@link android.content.Intent} untuk memulai aktivitas, layanan, dan penerima siaran. Anda bisa
    327 melakukannya dengan menamai komponen sasaran secara eksplisit (menggunakan nama kelas komponen) dalam intent. Akan tetapi,
    328 kemampuan intent sebenarnya ada pada konsep <em>intent implisit</em>. Intent implisit
    329 cuma menjelaskan tipe tindakan yang akan dilakukan (dan, secara opsional, data tempat Anda ingin
    330 melakukan tindakan) dan memungkinkan sistem untuk menemukan komponen pada perangkat yang bisa melakukan
    331 tindakan tersebut dan memulainya. Jika ada banyak komponen yang bisa melakukan tindakan yang dijelaskan oleh intent,
    332 maka pengguna bisa memilih komponen yang akan digunakan.</p>
    333 
    334 <p>Cara sistem mengidentifikasi komponen yang bisa merespons intent adalah dengan membandingkan
    335 intent yang diterima dengan <i>filter intent</i> yang disediakan dalam file manifes aplikasi lainnya pada
    336 perangkat.</p>
    337 
    338 <p>Bila mendeklarasikan aktivitas dalam manifes aplikasi, secara opsional Anda bisa menyertakan
    339 filter intent yang mendeklarasikan kemampuan aktivitas agar bisa merespons intent dari
    340 aplikasi lain. Anda bisa mendeklarasikan filter intent untuk komponen dengan
    341 menambahkan elemen <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
    342 &lt;intent-filter&gt;}</a> sebagai anak elemen deklarasi komponen.</p>
    343 
    344 <p>Misalnya, jika Anda telah membangun aplikasi email dengan aktivitas untuk menulis email baru, Anda bisa
    345 mendeklarasikan filter intent untuk merespons intent "kirim" (untuk mengirim email baru) seperti ini:</p>
    346 <pre>
    347 &lt;manifest ... >
    348     ...
    349     &lt;application ... &gt;
    350         &lt;activity android:name="com.example.project.ComposeEmailActivity">
    351             &lt;intent-filter>
    352                 &lt;action android:name="android.intent.action.SEND" />
    353                 &lt;data android:type="*/*" />
    354                 &lt;category android:name="android.intent.category.DEFAULT" />
    355             &lt;/intent-filter>
    356         &lt;/activity>
    357     &lt;/application&gt;
    358 &lt;/manifest>
    359 </pre>
    360 
    361 <p>Kemudian, jika aplikasi lain membuat intent dengan tindakan {@link
    362 android.content.Intent#ACTION_SEND} dan meneruskannya ke {@link android.app.Activity#startActivity
    363 startActivity()}, sistem bisa memulai aktivitas Anda agar pengguna bisa menulis draf dan mengirim
    364 email.</p>
    365 
    366 <p>Untuk informasi selengkapnya tentang membuat filter intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter Intent</a>.
    367 </p>
    368 
    369 
    370 
    371 <h3 id="DeclaringRequirements">Mendeklarasikan kebutuhan aplikasi</h3>
    372 
    373 <p>Ada berbagai macam perangkat yang didukung oleh Android dan tidak
    374 semuanya menyediakan fitur dan kemampuan yang sama. Agar aplikasi Anda tidak dihapus pada perangkat yang tidak memiliki
    375 fitur yang diperlukan aplikasi, Anda harus jelas mendefinisikan profil mengenai
    376 tipe perangkat yang didukung aplikasi dengan mendeklarasikan kebutuhan perangkat dan perangkat lunak dalam file
    377 manifes. Kebanyakan deklarasi ini hanya bersifat informasi dan sistem tidak
    378 membacanya, namun layanan eksternal seperti Google Play akan membacanya untuk menyediakan
    379 penyaringan bagi pengguna saat mereka mencari aplikasi dari perangkat.</p>
    380 
    381 <p>Misalnya, jika aplikasi memerlukan kamera dan menggunakan API yang disediakan dalam Android 2.1 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a> 7)
    382 , Anda harus mendeklarasikannya sebagai kebutuhan dalam file manifes seperti ini:</p> 
    383 
    384 <pre>
    385 &lt;manifest ... >
    386     &lt;uses-feature android:name="android.hardware.camera.any"
    387                   android:required="true" />
    388     &lt;uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
    389     ...
    390 &lt;/manifest>
    391 </pre>
    392 
    393 <p>Sekarang, perangkat yang <em>tidak</em> memiliki kamera dan menggunakan 
    394 Android versi <em>lebih rendah</em> dari 2.1 tidak bisa menginstal aplikasi Anda dari Google Play.</p>
    395 
    396 <p>Akan tetapi, bisa juga mendeklarasikan bahwa aplikasi Anda menggunakan kamera, namun tidak 
    397 <em>mengharuskannya</em>. Dalam hal itu, aplikasi Anda harus mengatur atribut <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#required">{@code required}</a>
    398  ke {@code "false"} dan memeriksa saat runtime apakah
    399 perangkat memiliki kamera dan menonaktifkan setiap fitur kamera yang sesuai.</p>
    400 
    401 <p>Informasi selengkapnya tentang cara mengelola kompatibilitas aplikasi dengan
    402 perangkat yang berbeda disediakan dalam dokumen
    403 <a href="{@docRoot}guide/practices/compatibility.html">Kompatibilitas Perangkat</a>.</p>
    404 
    405 
    406 
    407 <h2 id="Resources">Sumber Daya Aplikasi</h2>
    408 
    409 <p>Aplikasi Android tidak hanya terdiri dari kode&mdash;Aplikasi memerlukan sumber daya yang
    410 terpisah dari kode sumber, seperti gambar, file audio, dan apa saja yang berkaitan dengan
    411 presentasi visual dari aplikasi. Misalnya, Anda harus mendefinisikan animasi, menu, gaya, warna,
    412 dan layout antarmuka pengguna aktivitas dengan file XML. Penggunaan sumber daya aplikasi
    413 mempermudah pembaruan berbagai karakteristik aplikasi Anda tanpa memodifikasi kode dan&mdash;dengan menyediakan
    414 seperangkat sumber daya alternatif&mdash;memungkinkan Anda mengoptimalkan aplikasi untuk berbagai konfigurasi
    415 perangkat berbeda (seperti bahasa dan ukuran layar yang berbeda).</p>
    416 
    417 <p>Untuk setiap sumber daya yang Anda sertakan dalam proyek Android, alat bawaan SDK akan mendefinisikan ID integer
    418 unik, yang bisa Anda gunakan untuk mengacu sumber daya dari kode aplikasi atau dari sumber daya lainnya yang
    419 didefinisikan dalam XML. Misalnya, jika aplikasi berisi file gambar bernama {@code
    420 logo.png} (disimpan dalam direktori {@code res/drawable/}), alat SDK akan menghasilkan ID sumber daya
    421 bernama {@code R.drawable.logo}, yang bisa Anda gunakan untuk mengacu gambar dan memasukkannya dalam
    422 antarmuka pengguna.</p>
    423 
    424 <p>Salah satu aspek paling penting dari penyediaan sumber daya yang terpisah dari
    425 kode sumber adalah kemampuan Anda menyediakan sumber daya alternatif untuk konfigurasi perangkat
    426 yang berbeda. Misalnya, dengan mendefinisikan string UI dalam XML, Anda bisa menerjemahkan string ke dalam
    427 bahasa lain dan menyimpan string itu dalam file terpisah. Kemudian, berdasarkan <em>qualifier</em>
    428 bahasa yang ditambahkan ke nama direktori sumber daya (seperti {@code res/values-fr/} untuk nilai
    429 string Prancis) dan pengaturan bahasa pengguna, sistem Android akan menerapkan string bahasa yang sesuai
    430 untuk UI Anda.</p>
    431 
    432 <p>Android mendukung banyak <em>qualifier</em> berbeda untuk sumber daya alternatif Anda. Qualifier
    433 adalah string pendek yang Anda sertakan dalam nama direktori sumber
    434 daya untuk mendefinisikan konfigurasi perangkat yang harus digunakan sumber daya tersebut. Contoh lainnya,
    435 Anda harus sering membuat layout berbeda untuk aktivitas, bergantung pada
    436 orientasi layar dan ukuran perangkat. Misalnya, saat layar perangkat dalam orientasi
    437 tegak, Anda mungkin ingin layout tombolnya vertikal, tetapi saat layar dalam orientasi
    438 mendatar, tombolnya harus sejajar horizontal. Untuk mengubah layout
    439 sesuai orientasi, Anda bisa mendefinisikan dua layout berbeda dan menerapkan qualifier yang
    440 tepat untuk setiap nama direktori layout. Kemudian, sistem secara otomatis menerapkan
    441 layout yang tepat sesuai dengan orientasi perangkat saat ini.</p>
    442 
    443 <p>Untuk informasi selengkapnya tentang berbagai jenis sumber daya yang bisa disertakan dalam aplikasi dan cara
    444 membuat sumber daya alternatif untuk konfigurasi perangkat berbeda, bacalah <a href="{@docRoot}guide/topics/resources/providing-resources.html">Menyediakan Sumber Daya</a>.</p>
    445 
    446 
    447 
    448 <div class="next-docs">
    449 <div class="col-6">
    450   <h2 class="norule">Teruskan membaca tentang:</h2>
    451   <dl>
    452     <dt><a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter Intent</a>
    453     </dt>
    454     <dd>Informasi tentang cara menggunakan API {@link android.content.Intent} untuk
    455  mengaktifkan komponen aplikasi, seperti aktivitas dan layanan, dan cara menyediakan komponen aplikasi
    456  untuk digunakan oleh aplikasi lain.</dd>
    457     <dt><a href="{@docRoot}guide/components/activities.html">Aktivitas</a></dt>
    458     <dd>Informasi tentang cara membuat instance kelas {@link android.app.Activity}, 
    459 yang menyediakan layar tersendiri dalam aplikasi bersama antarmuka pengguna.</dd>
    460     <dt><a href="{@docRoot}guide/topics/resources/providing-resources.html">Menyediakan Sumber Daya</a></dt>
    461     <dd>Informasi tentang cara aplikasi Android disusun untuk memisahkan sumber daya aplikasi dari
    462 kode aplikasi, termasuk cara Anda bisa menyediakan sumber daya alternatif untuk 
    463 konfigurasi perangkat tertentu.
    464     </dd>
    465   </dl>
    466 </div>
    467 <div class="col-6">
    468   <h2 class="norule">Anda juga mungkin tertarik dengan:</h2>
    469   <dl>
    470     <dt><a href="{@docRoot}guide/practices/compatibility.html">Kompatibilitas Perangkat</a></dt>
    471     <dd>Informasi tentang cara kerja Android pada berbagai tipe perangkat dan 
    472 pengenalan mengenai cara mengoptimalkan aplikasi untuk setiap perangkat atau membatasi ketersediaan aplikasi Anda untuk
    473 perangkat berbeda.</dd>
    474     <dt><a href="{@docRoot}guide/topics/security/permissions.html">Izin Sistem</a></dt>
    475     <dd>Informasi tentang cara Android membatasi akses aplikasi pada API tertentu dengan sistem izin 
    476 yang mengharuskan persetujuan pengguna agar aplikasi dapat menggunakan API tersebut.</dd>
    477   </dl>
    478 </div>
    479 </div>
    480 
    481