AndroidManifest.xml — nedir, ana bileşenler ve manifest yapılandırması

Yazar: IT Sectr Yayınlanma: 2026-05-31 Okuma süresi: 8 dk

AndroidManifest.xml, her Android uygulaması için bileşenlerini, izinlerini ve meta verilerini tanımlayan zorunlu bir yapılandırma dosyasıdır. Android sistemi, her uygulamayı yüklerken ve başlatırken bu dosyayı okur. Android Developers, 2025'e göre, doğru bir manifest olmadan uygulama cihaza yüklenemez. AndroidManifest.xml, işletim sistemi için Activity, Service, BroadcastReceiver ve ContentProvider'ı kaydeder.

Önemli Noktalar

  • AndroidManifest.xml, bir Android uygulamasının tüm bileşenlerini ve gereksinimlerini bildiren bir XML dosyasıdır
  • Activity, Service, BroadcastReceiver, ContentProvider application etiketi içinde kaydedilir
  • İzinler, uses-permission ve uses-permission-sdk-23 etiketleri aracılığıyla belirtilir
  • Intent Filters, her bileşenin hangi sistem eylemlerini işleyebileceğini tanımlar
  • exported özelliği, bileşenin diğer uygulamalar için erişilebilirliğini kontrol eder

AndroidManifest.xml Nedir

AndroidManifest.xml, her Android projesinin app/src/main dizininde bulundurması gereken, XML formatındaki kök yapılandırma dosyasıdır. Android sistemi, herhangi bir uygulama kodunu çalıştırmadan önce — yükleme sırasında APK ayrıştırması sırasında — bunu ayrıştırır. Manifestte sözdizimi hatası varsa veya zorunlu bir bildirim eksikse, yükleme bir hata mesajıyla durdurulur.

Dosya, uygulamanın tam bir bildirimini içerir: tüm bileşenlerin listesi (Activity, Service, BroadcastReceiver, ContentProvider), istenen izinler, minimum SDK sürümü, donanım gereksinimleri ve tema ve stil yapılandırması. Sistem veya diğer uygulamalar tarafından çağrılabilen her bileşen, manifestte açıkça bildirilmelidir. Bu bir güvenlik gereksinimidir: açık bir bildirim olmadan bileşen çağrılamaz.

Doğru yapılandırılmış bir manifest olmadan uygulama Google Play veya sideloading yoluyla yüklenemez. Sistem, APK ayrıştırması sırasında manifesti kontrol eder ve hatalar varsa yüklemeyi reddeder. Google Play ayrıca güvensiz yapılandırmalar için manifesti tarar: intent-filter olmayan bir bileşende exported=true ise bir uyarı verilir ve targetSdk 34+ için zorunlu izinler eksikse yayınlama engellenir. Bu nedenle, manifest yapısını anlamak Android geliştiricileri için zorunlu bir beceridir.

Manifest'te Uygulama Bileşenleri

Her Android uygulama bileşeni, manifestte açıkça kaydedilmelidir. Bu, dört bileşen türünün tümü için zorunlu bir platform gereksinimidir. Kayıt olmadan, bileşen sistem tarafından oluşturulamaz ve başlatılmaya çalışılırsa ActivityNotFoundException veya benzer bir istisna oluşur. Bileşenler, çalışmalarını etkilemeyen bir sırayla application etiketi içinde kaydedilir.

Activity

activity etiketi, bir uygulama ekranını kaydeder. exported özelliği, diğer uygulamaların bu Activity'yi başlatıp başlatamayacağını belirler. Android 12'den itibaren, intent-filter varken exported'ın olmaması derleme hatasına neden olur — bu bir güvenlik gereksinimidir. Giriş noktası, MAIN eylemi ve LAUNCHER kategorisiyle intent-filter aracılığıyla ayarlanır. Her Activity, tam veya göreceli sınıf adıyla eşleşen benzersiz bir android:name'e sahip olmalıdır.

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

service etiketi, bir arka plan hizmetini tanımlar. Android 8'den itibaren, arka plan hizmetlerinin katı sınırlamaları vardır: bir foreground hizmeti, simgeyle birlikte kullanıcı tarafından görülebilen zorunlu bir bildirim gerektirir ve bound hizmet, yalnızca bir istemci ona bağlı olduğu sürece yaşar. Bildirim olmadan arka planda çalışan hizmetler, uygulama arka plana geçtikten sonra birkaç dakika içinde sistem tarafından otomatik olarak sonlandırılır. Uzun süreli görevler için Service yerine WorkManager kullanın.

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

BroadcastReceiver

receiver etiketi, sistem veya özel yayın mesajları için bir alıcı bildirir. Android 8'den itibaren, örtük yayınların çoğu artık manifestte statik olarak bildirilen alıcılara iletilmez. Bunun yerine, kod içinde Context.registerReceiver aracılığıyla alıcıların dinamik olarak kaydedilmesi önerilir. İstisnalar arasında, manifestte hala statik kayıt gerektiren BOOT_COMPLETED gibi bazı sistem yayınları bulunur.

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

Android'de İzinler

Android'deki her tehlikeli izin, uses-permission etiketi aracılığıyla manifestte bir bildirim gerektirir. Android 6'dan itibaren, tehlikeli izinler çalışma zamanında kullanıcıyla bir diyalog aracılığıyla istenir, ancak manifestteki bildirim zorunlu olmaya devam eder. Bu olmadan, requestPermissions yöntemi bir SecurityException fırlatır. INTERNET ve ACCESS_NETWORK_STATE gibi normal düzey izinler, yükleme sırasında otomatik olarak verilir.

İzinAmaç
CAMERAFotoğraf ve video için cihaz kamerasına erişim
ACCESS_FINE_LOCATIONGPS ve ağ üzerinden hassas coğrafi konum
RECORD_AUDIOCihaz mikrofonundan ses kaydı
READ_CONTACTSTelefon rehberinden kişileri okuma
POST_NOTIFICATIONSAndroid 13+'te bildirim gönderme

uses-permission-sdk-23 etiketi, yalnızca Android 6.0+'da gerekli olan izinleri belirtir. Bu, var olmayan izinleri istemeden eski sürümlerle uyumluluğu korumayı sağlar. Örneğin, POST_NOTIFICATIONS yalnızca Android 13+'ta kullanılabilir, bu nedenle eski cihazlarda bilinmeyen izin hatasını önlemek için uses-permission-sdk-33 aracılığıyla belirtilmelidir. uses-permission'daki maxSdkVersion özelliği, uygulamayı daha yeni Android sürümlerinde güncellerken gereksiz izinlerin otomatik olarak iptal edilmesini sağlar.

Normal düzey izinler (INTERNET, ACCESS_NETWORK_STATE) yükleme sırasında otomatik olarak verilir ve çalışma zamanı isteği gerektirmez. Bunlar da uses-permission aracılığıyla bildirilir ancak kullanıcıya bir diyalogda gösterilmez. Diğer uygulamalardan uygulama bileşenlerine erişimi kontrol etmek için, izin korumalı bileşenler mekanizması kullanılır: Activity veya Service düzeyinde, bileşen dışarıdan çağrıldığında sistem tarafından kontrol edilecek özel bir izin belirtebilirsiniz. Bu, süreçler arası iletişim için ek bir güvenlik katmanı sağlar.

Intent Filters ve Derin Bağlantılar

Manifestteki intent-filter etiketi, bir bileşenin hangi örtük intent'leri işleyebileceğini bildirir. Bu, Android'in sistem veya özel eylemleri uygulamaya bağladığı mekanizmadır. Bir intent filter üç öğeden oluşur: eylem (action), kategori (category) ve veri (data). Üçü de, bileşenin hangi intent'leri alması gerektiğinin kesin olarak tanımlanması için birleştirilebilir. Sistem, en spesifik filtreye göre uygun bileşeni seçer.

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>

autoVerify özelliği, Android App Links doğrulamasını etkinleştirir: sistem, alan adı sahipliğini onaylamak için sunucuyla iletişime geçer. Doğrulama olmadan, derin bağlantılar, kullanıcının bağlantıyı hangi uygulamayla açacağını seçtiği standart seçici diyalog aracılığıyla çalışır. Başarılı doğrulamadan sonra, bağlantılar diyalog olmadan doğrudan uygulamada açılır. Google Search Console da derin bağlantıları indekslemek ve arama sonuçlarında göstermek için autoVerify kullanır.

action.VIEW ve DEFAULT ile BROWSABLE kategorilerine sahip filtreler, tarayıcılardan, e-postalardan ve diğer uygulamalardan gelen bağlantıları işler. Bu, Android'de derin bağlantıları uygulamanın ana mekanizmasıdır. myapp:// gibi özel URL şemalarını desteklemek için, ana bilgisayar olmadan yalnızca şema belirtmeniz yeterlidir. Ancak Google, özel şemalar yerine HTTPS derin bağlantılarını kullanmanızı önerir çünkü bunlar daha güvenlidir ve ek izin gerektirmez. Özel şemalar, aynı şemayı kaydeden herhangi bir uygulama tarafından ele geçirilebilir.

Uygulama Özellikleri ve Meta Verileri

Kök manifest etiketi, paket, sürüm ve SDK özelliklerini içerir. application etiketi, genel ayarları saklar: tema, simge, etiket ve hata ayıklama bayrakları. Manifest özellikleri, paket düzeyinde sürümlemeyi tanımlarken, application özellikleri uygulamanın genel görünümünü ve davranışını belirler. Değerler, @ sözdizimi aracılığıyla kaynak başvuruları veya dize değişmezleri olabilir.

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">
        <!--  Uygulama bileşenleri  -->
    </application>
</manifest>

application içindeki meta-data etiketi, rastgele anahtar-değer çiftlerini saklamanıza olanak tanır. Bu, üçüncü taraf kitaplıkları yapılandırmak için kullanışlıdır: API anahtarları, uç nokta URL'leri ve özellik bayrakları. meta-data'dan gelen verilere çalışma zamanında PackageManager.getApplicationInfo().metaData aracılığıyla erişilebilir. Örneğin, Firebase ve Google Maps, kaynak kodda sabit kodlama yapmadan erişim anahtarlarını iletmek için meta-data kullanır. Bunun yerine, anahtarlar manifestte ayarlanır ve farklı derleme çeşitleri için farklılık gösterebilir.

android:extractNativeLibs özelliği, yerel kitaplıkların APK'dan çıkarılmasını kontrol eder. targetSdk 34+ olan uygulamalar için bu özellik açıkça belirtilmelidir, aksi takdirde derleme INSTALL_FAILED_INVALID_APK hatasıyla başarısız olabilir. extractNativeLibs=false ise, yerel kitaplıklar açılmadan APK içinde kalır, bu da yüklü uygulama boyutunu azaltır ancak kitaplık yükleme süresini artırır. Çoğu modern uygulama için, kullanıcının cihazında disk alanı kullanımını azaltmak amacıyla extractNativeLibs=false önerilir.

android:networkSecurityConfig özelliği, bir ağ güvenliği yapılandırma dosyası belirtmenize olanak tanır. Bu, HTTP trafiğinin varsayılan olarak engellendiği targetSdk 28+ olan uygulamalar için özellikle önemlidir. Yapılandırma dosyası, güvenilir sertifikaları, HTTP bağlantıları için alan adlarını ve sertifika sabitleme kurallarını tanımlar. Bu, eski android:usesCleartextTraffic özelliğinin yerini alır ve işletim sistemi düzeyinde bağlantı güvenliğini yönetmek için daha esnek bir mekanizma sağlar.

android:largeHeap özelliği, uygulama için artırılmış bir yığın boyutu ister. Varsayılan olarak Android, her uygulamaya cihaza ve işletim sistemi sürümüne bağlı olarak sınırlı miktarda bellek ayırır. Uygulama ağır görseller, videolar veya büyük veri kümeleriyle çalışıyorsa, largeHeap OutOfMemoryError'ı önleyebilir. Ancak, bu özelliğin kötüye kullanılması zararlıdır: yüksek bellek tüketimi olan bir uygulama, kaynaklar azaldığında sistem tarafından daha hızlı sonlandırılır. largeHeap'i yalnızca profil oluşturma ve ihtiyacı onayladıktan sonra kullanın.

Sıkça Sorulan Sorular

Bir Activity için exported belirtilmezse ne olur?

Android 12'den itibaren, intent-filter varken exported özelliğinin olmaması derleme hatasına neden olur. Sistem, intent-filter'e sahip her bileşen için açık görünürlük ister — bu, bileşenlerin diğer uygulamalara yanlışlıkla açılmasını önlemek için bir güvenlik önlemidir. intent-filter olmayan bir Activity için exported varsayılan olarak false'dur.

LAUNCHER intent-filter'e sahip birden çok Activity olabilir mi?

Evet, ancak başlatıcı birden çok uygulama simgesi görüntüler. MAIN/LAUNCHER'a sahip her Activity ayrı bir giriş noktası olur. Bu, uygulamanın farklı bölümlerine kısayollar oluşturmak için kullanılır, örneğin doğrudan ayarlara gitmek veya yeni bir kayıt oluşturmak için. Her simge, ilgili Activity'yi doğrudan açar.

Android'de manifest birleştirme nasıl çalışır?

Android, kitaplıklardan gelen manifestleri ana uygulama manifesti ile birleştirir. Özellik çakışmaları durumunda, bunları çözmek için tools:replace veya tools:node='merge' kullanılır. Bu mekanizma otomatiktir: Gradle aracılığıyla bir kitaplık eklendiğinde, manifesti ana manifestle birleşir. Bir kitaplıktan bir özelliği geçersiz kılmak veya değiştirmek için tools:node='remove' veya tools:replace='attributeName' kullanın.

İzin diyaloğu neden görünmüyor?

Tipik nedenler: izin manifestte uses-permission aracılığıyla bildirilmemiştir, normal düzey bir izindir (çalışma zamanı isteği gerekmez), kullanıcı “Tekrar sorma” seçeneğini seçmiştir ve izin kalıcı olarak reddedilmiştir veya targetSdkVersion, izinlerin yükleme sırasında istendiği 23'ün altındadır. Teşhis için, manifesti ve adb logcat aracılığıyla günlükleri kontrol edin.

Manifestte debuggable nedir?

android:debuggable özelliği, ADB aracılığıyla uygulama hata ayıklamayı etkinleştirir. Google Play'deki sürüm derlemeleri için false olmalıdır. Bir sürüm derlemesinde debuggable=true ise, bir saldırgan ADB aracılığıyla uygulamaya bağlanabilir, veri okuyabilir ve rastgele kod çalıştırabilir. Google Play, debuggable=true olan derlemelerin yayınlanmasını otomatik olarak engeller.

Özet

  • AndroidManifest.xml, bir Android uygulamasının tüm bileşenlerini bildiren zorunlu bir yapılandırma dosyasıdır
  • Activity, Service, Receiver, Provider, görünürlük ve yapılandırma özellikleriyle application etiketi içinde kaydedilir
  • İzinler uses-permission aracılığıyla bildirilir; tehlikeli olanlar Android 6.0'dan sonra çalışma zamanında istenir
  • Intent Filters autoVerify ile seçici diyalog olmadan doğrudan derin bağlantılar için Android App Links'i etkinleştirir
  • uses-sdk, Android sürüm uyumluluk kontrolü için minSdkVersion ve targetSdkVersion'ı ayarlar
  • exported, Android 12'den itibaren intent-filter'e sahip tüm bileşenler için zorunludur
  • Manifest birleştirme, özellik geçersiz kılma desteğiyle modüllerden ve kitaplıklardan yapılandırmaları birleştirir

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun