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—bersama data dan file sumber daya —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—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—misalnya, siaran yang mengumumkan bahwa 149 layar telah dimatikan, baterai lemah, atau gambar telah direkam. 150 Aplikasi juga bisa memulai siaran—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—aktivitas, layanan, dan 192 penerima siaran—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—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—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 <?xml version="1.0" encoding="utf-8"?> 275 <manifest ... > 276 <application android:icon="@drawable/app_icon.png" ... > 277 <activity android:name="com.example.project.ExampleActivity" 278 android:label="@string/example_label" ... > 279 </activity> 280 ... 281 </application> 282 </manifest></pre> 283 284 <p>Dalam elemen <code><a 285 href="{@docRoot}guide/topics/manifest/application-element.html"><application></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"><activity></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"><activity></a></code> untuk 299 aktivitas</li> 300 <li>Elemen <code><a 301 href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> untuk 302 layanan</li> 303 <li>Elemen <code><a 304 href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code> untuk 305 penerima siaran</li> 306 <li>Elemen <code><a 307 href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></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 <intent-filter>}</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 <manifest ... > 348 ... 349 <application ... > 350 <activity android:name="com.example.project.ComposeEmailActivity"> 351 <intent-filter> 352 <action android:name="android.intent.action.SEND" /> 353 <data android:type="*/*" /> 354 <category android:name="android.intent.category.DEFAULT" /> 355 </intent-filter> 356 </activity> 357 </application> 358 </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 <manifest ... > 386 <uses-feature android:name="android.hardware.camera.any" 387 android:required="true" /> 388 <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" /> 389 ... 390 </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—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—dengan menyediakan 414 seperangkat sumber daya alternatif—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