AndroidManifest.xml — apa itu, komponen utama dan konfigurasi manifes

Penulis: IT Sectr Diterbitkan: 2026-05-31 Waktu membaca: 8 mnt

AndroidManifest.xml adalah file konfigurasi wajib setiap aplikasi Android, yang mendeskripsikan komponen, izin, dan metadata-nya. Sistem Android membaca file ini saat instalasi dan menjalankan setiap aplikasi. Menurut Android Developers, 2025, tanpa manifes yang benar, aplikasi tidak akan terinstal di perangkat. AndroidManifest.xml mendaftarkan Activity, Service, BroadcastReceiver, dan ContentProvider untuk sistem operasi.

Poin utama

  • AndroidManifest.xml — file XML yang mendeklarasikan semua komponen dan persyaratan aplikasi Android
  • Activity, Service, BroadcastReceiver, ContentProvider didaftarkan di dalam tag application
  • Izin ditentukan melalui tag uses-permission dan uses-permission-sdk-23
  • Intent Filters menentukan tindakan sistem apa yang dapat ditangani oleh setiap komponen
  • Atribut exported mengontrol ketersediaan komponen untuk aplikasi lain

Apa itu AndroidManifest.xml

AndroidManifest.xml adalah file konfigurasi utama dalam format XML yang harus dimiliki setiap proyek Android di direktori app/src/main. Sistem Android menganalisisnya sebelum menjalankan kode aplikasi apa pun — pada tahap penguraian APK saat instalasi. Jika ada kesalahan sintaks dalam manifes atau deklarasi wajib hilang, instalasi akan dihentikan dengan pesan kesalahan.

File ini berisi deklarasi lengkap aplikasi: daftar semua komponen (Activity, Service, BroadcastReceiver, ContentProvider), izin yang diminta, versi SDK minimum, persyaratan perangkat keras, dan konfigurasi tema serta gaya. Setiap komponen yang dapat dipanggil oleh sistem atau aplikasi lain harus dideklarasikan secara eksplisit dalam manifes. Ini adalah persyaratan keamanan: tanpa deklarasi eksplisit, komponen tidak tersedia untuk dipanggil.

Tanpa manifes yang dikonfigurasi dengan benar, aplikasi tidak dapat diinstal melalui Google Play atau sideloading. Sistem memeriksa manifes pada tahap penguraian APK dan menolak instalasi jika ada kesalahan. Google Play juga memindai manifes untuk konfigurasi yang tidak aman: untuk exported=true pada komponen tanpa intent-filter akan diberikan peringatan, dan jika izin wajib untuk targetSdk 34+ tidak ada, publikasi akan diblokir. Oleh karena itu, memahami struktur manifes adalah keterampilan wajib bagi pengembang Android.

Komponen aplikasi dalam manifes

Setiap komponen aplikasi Android harus didaftarkan secara eksplisit dalam manifes. Ini adalah persyaratan wajib platform untuk keempat jenis komponen. Tanpa pendaftaran, komponen tidak dapat dibuat oleh sistem, dan upaya untuk menjalankannya akan menyebabkan pengecualian ActivityNotFoundException atau serupa. Komponen didaftarkan di dalam tag application dalam urutan yang tidak mempengaruhi cara kerjanya.

Activity

Tag activity mendaftarkan layar aplikasi. Atribut exported menentukan apakah aplikasi lain dapat menjalankan Activity ini. Mulai Android 12, tidak adanya exported dengan adanya intent-filter menyebabkan kesalahan kompilasi — ini adalah persyaratan keamanan. Titik masuk ditetapkan melalui intent-filter dengan action MAIN dan category LAUNCHER. Setiap Activity harus memiliki android:name unik yang sesuai dengan nama kelas lengkap atau relatif.

xml
<activity
    android:name=".MainActivity"
    android:exported="true"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Service

Tag service mendefinisikan layanan latar belakang. Mulai Android 8, layanan latar belakang memiliki batasan ketat: foreground service memerlukan notifikasi wajib dengan ikon yang terlihat oleh pengguna, dan bound service hanya hidup jika ada klien yang terhubung. Layanan yang berjalan di latar belakang tanpa notifikasi secara otomatis dihentikan oleh sistem beberapa menit setelah aplikasi beralih ke mode latar belakang. Untuk tugas jangka panjang, gunakan WorkManager sebagai pengganti Service.

xml
<service
    android:name=".SyncService"
    android:exported="false"
    android:foregroundServiceType="dataSync" />

BroadcastReceiver

Tag receiver mendeklarasikan penerima pesan siaran sistem atau kustom. Mulai Android 8, sebagian besar siaran implisit tidak lagi dikirimkan ke penerima yang dideklarasikan secara statis dalam manifes. Sebagai gantinya, disarankan untuk mendaftarkan penerima secara dinamis melalui Context.registerReceiver dalam kode. Pengecualian adalah beberapa siaran sistem, seperti BOOT_COMPLETED, yang masih memerlukan pendaftaran statis dalam manifes.

xml
<receiver
    android:name=".ConnectivityReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

Izin (Permissions) di Android

Setiap izin berbahaya di Android memerlukan deklarasi dalam manifes melalui tag uses-permission. Mulai Android 6, izin berbahaya diminta saat runtime melalui dialog dengan pengguna, tetapi deklarasi dalam manifes tetap wajib. Tanpa itu, metode requestPermissions akan melempar pengecualian SecurityException. Izin tingkat normal seperti INTERNET dan ACCESS_NETWORK_STATE diberikan secara otomatis saat instalasi.

IzinKegunaan
CAMERAAkses ke kamera perangkat untuk foto dan video
ACCESS_FINE_LOCATIONGeolokasi presisi melalui GPS dan jaringan
RECORD_AUDIORekaman suara dari mikrofon perangkat
READ_CONTACTSMembaca kontak dari buku telepon
POST_NOTIFICATIONSMengirim notifikasi di Android 13+

Tag uses-permission-sdk-23 menentukan izin yang hanya diperlukan di Android 6.0+. Ini memungkinkan menjaga kompatibilitas dengan versi lama tanpa meminta izin yang tidak ada. Misalnya, POST_NOTIFICATIONS hanya tersedia di Android 13+, jadi harus ditentukan melalui uses-permission-sdk-33 agar perangkat lama tidak mengalami kesalahan izin tidak dikenal. Atribut maxSdkVersion di uses-permission memungkinkan pencabutan otomatis izin yang tidak perlu saat memperbarui aplikasi di versi Android yang lebih baru.

Izin tingkat normal (INTERNET, ACCESS_NETWORK_STATE) diberikan secara otomatis saat instalasi dan tidak memerlukan permintaan runtime. Izin ini juga dideklarasikan melalui uses-permission, tetapi tidak ditampilkan kepada pengguna dalam dialog. Untuk kontrol akses ke komponen aplikasi dari aplikasi lain, digunakan mekanisme permission-protected components: izin kustom dapat ditentukan di tingkat Activity atau Service yang akan diperiksa oleh sistem saat komponen dipanggil dari luar. Ini memberikan tingkat keamanan tambahan untuk komunikasi antarproses.

Intent Filters dan tautan dalam

Tag intent-filter dalam manifes mendeklarasikan intent implisit apa yang dapat ditangani oleh komponen. Ini adalah mekanisme yang digunakan Android untuk menghubungkan tindakan sistem atau kustom dengan aplikasi. Intent filter terdiri dari tiga elemen: action (tindakan), category (kategori), dan data (data). Ketiganya dapat dikombinasikan untuk mendeskripsikan secara tepat intent apa yang harus diterima komponen. Sistem memilih komponen yang sesuai berdasarkan filter yang paling spesifik.

xml
<activity android:name=".DeepLinkActivity">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="https"
            android:host="itsectr.com"
            android:pathPrefix="/app" />
    </intent-filter>
</activity>

Atribut autoVerify mengaktifkan verifikasi Android App Links: sistem menghubungi server untuk mengonfirmasi kepemilikan domain. Tanpa verifikasi, tautan dalam berfungsi melalui dialog pemilih standar, di mana pengguna memilih aplikasi mana yang akan membuka tautan. Setelah verifikasi berhasil, tautan terbuka langsung di aplikasi tanpa dialog. Google Search Console juga menggunakan autoVerify untuk mengindeks tautan dalam dan menampilkannya di hasil pencarian.

Filter dengan action.VIEW dan kategori DEFAULT dan BROWSABLE menangani tautan dari browser, email, dan aplikasi lain. Ini adalah mekanisme utama implementasi tautan dalam di Android. Untuk mendukung skema URL kustom, misalnya myapp://, cukup menentukan scheme tanpa host. Namun, Google merekomendasikan penggunaan tautan dalam HTTPS daripada skema kustom, karena lebih aman dan tidak memerlukan izin tambahan. Skema kustom dapat dicegat oleh aplikasi mana pun yang mendaftarkan skema yang sama.

Atribut aplikasi dan metadata

Tag root manifest berisi atribut paket, versi, dan SDK. Tag application menyimpan pengaturan global: tema, ikon, label, dan flag debugging. Atribut manifest menentukan versioning di tingkat paket, dan atribut application mendefinisikan tampilan dan perilaku aplikasi secara keseluruhan. Nilai dapat berupa referensi ke sumber daya melalui sintaks @ atau literal string.

xml
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itsectr.myapp"

    <uses-sdk
        android:minSdkVersion="24"
        android:targetSdkVersion="34" />

    <application
        android:label="MyApp"
        android:icon="@mipmap/ic_launcher"
        android:theme="@style/Theme.MyApp"
        android:supportsRtl="true"
        android:allowBackup="true">
        <!--  Komponen aplikasi  -->
    </application>
</manifest>

Tag meta-data di dalam application memungkinkan penyimpanan pasangan kunci-nilai arbitrer. Ini berguna untuk konfigurasi pustaka pihak ketiga: kunci API, alamat endpoint, dan flag fungsionalitas. Data dari meta-data dapat diakses melalui PackageManager.getApplicationInfo().metaData saat runtime. Misalnya, Firebase dan Google Maps menggunakan meta-data untuk mentransfer kunci akses tanpa hardcoding dalam kode sumber. Kunci ditentukan dalam manifes dan dapat berbeda untuk varian kompilasi yang berbeda.

Atribut android:extractNativeLibs mengontrol ekstraksi pustaka asli dari APK. Untuk aplikasi dengan targetSdk 34+, atribut ini harus ditentukan secara eksplisit, jika tidak kompilasi dapat gagal dengan kesalahan INSTALL_FAILED_INVALID_APK. Jika extractNativeLibs=false, pustaka asli tetap di dalam APK tanpa diekstrak, yang mengurangi ukuran aplikasi yang diinstal tetapi meningkatkan waktu muat pustaka. Untuk sebagian besar aplikasi modern, extractNativeLibs=false direkomendasikan untuk mengurangi ruang yang digunakan pada disk pengguna.

Atribut android:networkSecurityConfig memungkinkan penentuan file konfigurasi keamanan jaringan. Ini sangat penting untuk aplikasi dengan targetSdk 28+, di mana lalu lintas HTTP diblokir secara default. File konfigurasi menentukan sertifikat tepercaya, domain untuk koneksi HTTP, dan aturan pinning sertifikat. Ini menggantikan atribut usang android:usesCleartextTraffic dan menyediakan mekanisme yang lebih fleksibel untuk mengelola keamanan koneksi di tingkat sistem operasi.

Atribut android:largeHeap meminta ukuran heap yang diperbesar untuk aplikasi. Secara default, Android mengalokasikan memori terbatas untuk setiap aplikasi, tergantung pada perangkat dan versi sistem operasi. Jika aplikasi bekerja dengan gambar berat, video, atau kumpulan data besar, largeHeap dapat mencegah OutOfMemoryError. Namun, penyalahgunaan atribut ini berbahaya: aplikasi dengan konsumsi memori tinggi akan lebih cepat dihentikan oleh sistem saat sumber daya tidak mencukupi. Gunakan largeHeap hanya setelah pembuatan profil dan konfirmasi kebutuhan.

Pertanyaan yang sering diajukan

Apa yang terjadi jika tidak menentukan exported untuk Activity?

Mulai Android 12, tidak adanya atribut exported dengan adanya intent-filter menyebabkan kesalahan kompilasi. Sistem memerlukan penentuan visibilitas yang eksplisit untuk setiap komponen dengan intent-filter — ini adalah langkah keamanan untuk mencegah pembukaan komponen secara tidak sengaja oleh aplikasi lain. Untuk Activity tanpa intent-filter, exported default-nya false.

Bisakah memiliki beberapa Activity dengan intent-filter LAUNCHER?

Ya, tetapi peluncur akan menampilkan beberapa ikon aplikasi. Setiap Activity dengan MAIN/LAUNCHER menjadi titik masuk terpisah. Ini digunakan untuk membuat pintasan ke berbagai bagian aplikasi, misalnya untuk langsung masuk ke pengaturan atau membuat catatan baru. Setiap ikon membuka Activity yang sesuai secara langsung.

Bagaimana cara kerja penggabungan manifes di Android?

Android menggabungkan manifes dari pustaka dengan manifes utama aplikasi. Jika terjadi konflik atribut, tools:replace atau tools:node="merge" digunakan untuk menyelesaikannya. Mekanisme ini otomatis: saat menambahkan pustaka melalui Gradle, manifesnya digabungkan dengan manifes utama. Untuk membatalkan atau mengganti atribut dari pustaka, gunakan tools:node="remove" atau tools:replace="attributeName".

Mengapa dialog izin tidak muncul?

Penyebab umum: izin tidak dideklarasikan dalam manifes melalui uses-permission, menggunakan izin tingkat normal (tanpa permintaan runtime), pengguna memilih "Jangan tanya lagi" dan izin ditolak secara permanen, atau targetSdkVersion di bawah 23, di mana izin diminta saat instalasi. Untuk diagnosis, periksa manifes dan log melalui adb logcat.

Apa itu debuggable dalam manifes?

Atribut android:debuggable mengaktifkan debugging aplikasi melalui ADB. Untuk build rilis di Google Play harus false. Jika debuggable=true dalam build rilis, penyerang dapat terhubung ke aplikasi melalui ADB, membaca data, dan menjalankan kode sembarang. Google Play secara otomatis memblokir publikasi build dengan debuggable=true.

Kesimpulan

  • AndroidManifest.xml — file konfigurasi wajib dengan deklarasi semua komponen aplikasi Android
  • Activity, Service, Receiver, Provider didaftarkan di dalam tag application dengan atribut visibilitas dan konfigurasi
  • Izin dideklarasikan melalui uses-permission, yang berbahaya diminta saat runtime setelah Android 6.0
  • Intent Filters dengan autoVerify mengaktifkan Android App Links untuk tautan dalam langsung tanpa dialog pemilihan
  • uses-sdk menetapkan minSdkVersion dan targetSdkVersion untuk kontrol kompatibilitas dengan versi Android
  • exported wajib untuk semua komponen dengan intent-filter mulai Android 12
  • Penggabungan manifes menggabungkan konfigurasi dari modul dan pustaka dengan dukungan untuk menimpa atribut

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga