Uygulama manifestine genel bakış

Her uygulama projesinin, proje kaynağı grubunun kök dizininde, tam olarak bu ada sahip bir AndroidManifest.xml dosyası olmalıdır. Manifest dosyası, uygulamanızla ilgili temel bilgileri Android derleme araçlarına, Android işletim sistemine ve Google Play'e açıklar.

Manifest dosyası, diğer birçok unsurun yanı sıra aşağıdakileri de beyan etmelidir:

  • Tüm etkinlikler, hizmetler, yayın alıcıları ve içerik sağlayıcılar dahil olmak üzere uygulamanın bileşenleri. Her bileşen, Kotlin veya Java sınıfının adı gibi temel özellikleri tanımlamalıdır. Ayrıca, hangi cihaz yapılandırmalarını yönetebileceği gibi özellikleri ve bileşenin nasıl başlatılabileceğini açıklayan niyet filtreleri de belirtebilir. Uygulama bileşenleri hakkında daha fazla bilgi edinmek için aşağıdaki bölümü inceleyin.
  • Sistemin korumalı bölümlerine veya diğer uygulamalara erişmek için uygulamanın ihtiyaç duyduğu izinler. Ayrıca, bu uygulamadaki içeriğe erişmek isteyen diğer uygulamaların sahip olması gereken tüm izinleri de beyan eder. İzinler hakkında daha fazla bilgiyi aşağıdaki bölümde bulabilirsiniz.
  • Uygulamanın gerektirdiği donanım ve yazılım özellikleri, uygulamayı Google Play'den hangi cihazların yükleyebileceğini etkiler. Cihaz uyumluluğu hakkında daha fazla bilgi edinmek için aşağıdaki bölümü inceleyin.

Uygulamanızı derlemek için Android Studio kullanıyorsanız manifest dosyası sizin için oluşturulur ve temel manifest öğelerinin çoğu, uygulamanızı oluştururken, özellikle de kod şablonlarını kullanırken eklenir.

Dosya özellikleri

Aşağıdaki bölümlerde, uygulamanızın en önemli özelliklerinden bazılarının manifest dosyasına nasıl yansıtıldığı açıklanmaktadır.

Uygulama bileşenleri

Uygulamanızda oluşturduğunuz her bir uygulama bileşeni için manifest dosyasında karşılık gelen bir XML öğesini belirtin:

Bu bileşenlerden herhangi birini manifest dosyasında bildirmeden alt sınıflandırırsanız sistem bunu başlatamaz.

Tam paket tanımlamasını kullanarak alt sınıfınızın adını name özelliğiyle belirtin. Örneğin, bir Activity alt sınıfı aşağıdaki gibi tanımlanır:

<manifest ... >
    <application ... >
        <activity android:name="com.example.myapp.MainActivity" ... >
        </activity>
    </application>
</manifest>

Bununla birlikte, name değerindeki ilk karakter noktaysa modül düzeyindeki build.gradle dosyasının namespace özelliğindeki uygulamanın ad alanı, adın önüne eklenir. Örneğin, ad alanı "com.example.myapp" ise aşağıdaki etkinlik adı com.example.myapp.MainActivity olarak çözümlenir:

<manifest ... >
    <application ... >
        <activity android:name=".MainActivity" ... >
            ...
        </activity>
    </application>
</manifest>

Paket adını veya ad alanını ayarlama hakkında daha fazla bilgi için Ad alanını ayarlama başlıklı makaleyi inceleyin.

com.example.myapp.purchases gibi alt paketlerde bulunan uygulama bileşenleriniz varsa name değeri, ".purchases.PayActivity" gibi eksik alt paket adlarını eklemeli veya tam olarak tanımlanmış paket adını kullanmalıdır.

Amaç filtreleri

Uygulama etkinlikleri, hizmetler ve yayın alıcıları niyetler aracılığıyla etkinleştirilir. Niyet, Intent nesnesi tarafından tanımlanan ve üzerinde işlem yapılacak veriler, işlemi gerçekleştirmesi beklenen bileşen kategorisi ve diğer talimatlar dahil olmak üzere gerçekleştirilecek bir işlemi açıklayan mesajdır.

Bir uygulama sisteme bir niyet gönderdiğinde sistem, her uygulamanın manifest dosyasındaki amaç filtresi bildirimlerine göre bu niyeti işleyebilecek bir uygulama bileşeni bulur. Sistem, eşleşen bileşenin bir örneğini başlatır ve Intent nesnesini bu bileşene iletir. Birden fazla uygulama amacı işleyebilirse kullanıcı hangi uygulamanın kullanılacağını seçebilir.

Bir uygulama bileşeninde, her biri söz konusu bileşenin farklı bir özelliğini tanımlayan herhangi bir sayıda intent filtresi (<intent-filter> öğesiyle tanımlanır) bulunabilir.

Daha fazla bilgi için Amaçlar ve Amaç Filtreleri dokümanına bakın.

Simgeler ve etiketler

Bazı manifest öğeleri, ilgili uygulama bileşeni için kullanıcılara sırasıyla küçük bir simge ve metin etiketi görüntülemek için icon ve label özelliklerine sahiptir.

Her durumda, bir üst öğede ayarlanan simge ve etiket, tüm alt öğeler için varsayılan icon ve label değeri olur. Örneğin, <application> öğesinde ayarlanan simge ve etiket, uygulamanın her bir bileşeni (örneğin, tüm etkinlikler) için varsayılan simge ve etikettir.

Bir bileşenin <intent-filter> bölümünde ayarlanan simge ve etiket, söz konusu bileşen bir amacı yerine getirme seçeneği olarak sunulduğunda kullanıcıya gösterilir. Varsayılan olarak bu simge, <activity> veya <application> öğesi olan üst bileşen için bildirilen simgeden devralınır.

Seçici iletişim kutusunda daha iyi belirtmek istediğiniz benzersiz bir işlem sunan bir amaç filtresinin simgesini değiştirmek isteyebilirsiniz. Daha fazla bilgi için Diğer uygulamaların etkinliğinizi başlatmasına izin verme başlıklı makaleyi inceleyin.

İzinler

Android uygulamaları; kişiler ve SMS gibi hassas kullanıcı verilerine veya kamera ve internet erişimi gibi belirli sistem özelliklerine erişmek için izin istemelidir. Her izin benzersiz bir etiketle tanımlanır. Örneğin, SMS mesajı göndermesi gereken bir uygulamanın manifest dosyasında aşağıdaki satır bulunmalıdır:

<manifest ... >
    <uses-permission android:name="android.permission.SEND_SMS"/>
    ...
</manifest>

Android 6.0'dan (API düzeyi 23) itibaren, kullanıcı çalışma zamanında bazı uygulama izinlerini onaylayabilir veya reddedebilir. Ancak, uygulamanızın desteklediği Android sürümü ne olursa olsun, tüm izin isteklerini manifest'te bir <uses-permission> öğesiyle bildirmeniz gerekir. İzin verilirse uygulama, korunan özellikleri kullanabilir. Aksi takdirde, bu özelliklere erişme denemeleri başarısız olur.

Uygulamanız izinlerle kendi bileşenlerini de koruyabilir. Bu uygulama, android.Manifest.permission içinde listelenen Android tarafından tanımlanan herhangi bir izni veya başka bir uygulamada beyan edilmiş bir izni kullanabilir. Uygulamanız kendi izinlerini de tanımlayabilir. <permission> öğesiyle yeni bir izin beyan edilir.

Daha fazla bilgi için Android'de İzinler bölümünü inceleyin.

Cihaz uyumluluğu

Manifest dosyasında da uygulamanızın gerektirdiği donanım veya yazılım özelliklerini ve buna bağlı olarak uygulamanızın uyumlu olduğu cihaz türlerini beyan edebilirsiniz. Google Play Store, uygulamanızın gerektirdiği özellikleri veya sistem sürümünü sağlamayan cihazlara kullanıcıların uygulamanızı yüklemesine izin vermez.

Uygulamanızın hangi cihazlarla uyumlu olduğunu tanımlayan çeşitli manifest etiketleri vardır. En yaygın olanlardan bazıları aşağıda verilmiştir.

<uses-feature>

<uses-feature> öğesi, uygulamanızın ihtiyaç duyduğu donanım ve yazılım özelliklerini tanımlamanıza olanak tanır. Örneğin, uygulamanız pusula sensörü olmayan bir cihazda temel işlevleri gerçekleştiremiyorsa aşağıdaki manifest etiketiyle pusula sensörünü gereken şekilde beyan edebilirsiniz:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

Not: Uygulamanızı Chromebook'larda da kullanıma sunmak istiyorsanız donanım ve yazılım özellikleriyle ilgili bazı önemli sınırlamalar vardır. Daha fazla bilgi için Chromebook'lar için uygulama manifesti uyumluluğu bölümüne bakın.

<uses-sdk>

Arka arkaya yayınlanan her platform sürümüne genellikle önceki sürümde bulunmayan yeni API'ler eklenir. Uygulamanızın uyumlu olduğu minimum sürümü belirtmek için manifest dosyanız <uses-sdk> etiketini ve bu etiketin minSdkVersion özelliğini içermelidir.

Bununla birlikte, <uses-sdk> öğesindeki özelliklerin build.gradle dosyasındaki karşılık gelen özellikler tarafından geçersiz kılındığını unutmayın. Dolayısıyla, Android Studio kullanıyorsanız bunun yerine minSdkVersion ve targetSdkVersion değerlerini burada belirtin:

Modern

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 21

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(21)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}

build.gradle dosyası hakkında daha fazla bilgi edinmek için derlemenizi yapılandırma konulu makaleyi inceleyin.

Uygulamanızın farklı cihazları desteklediğini nasıl beyan edeceğiniz hakkında daha fazla bilgi için Cihaz uyumluluğuna genel bakış bölümüne bakın.

Dosya kuralları

Bu bölümde, genellikle manifest dosyasındaki tüm öğeler ve özellikler için geçerli olan kurallar ve kurallar açıklanmaktadır.

Öğeler
Yalnızca <manifest> ve <application> öğeleri gereklidir. Bunların her biri yalnızca bir kez gerçekleşmelidir. Diğer öğelerin çoğu sıfır veya daha fazla kez gerçekleşebilir. Ancak manifest dosyasını faydalı hale getirmek için bunlardan bazılarının olması gerekir.

Tüm değerler, bir öğe içindeki karakter verileri olarak değil, özellikler aracılığıyla ayarlanır.

Aynı düzeydeki öğeler genellikle sıralanmaz. Örneğin, <activity>, <provider> ve <service> öğeleri herhangi bir sırada yerleştirilebilir. Bu kuralın iki önemli istisnası vardır:

  • <activity-alias> öğesi, takma ad olduğu <activity> biçimine uymalıdır.
  • <application> öğesi, <manifest> öğesinin içindeki son öğe olmalıdır.
Özellikler
Teknik olarak tüm özellikler isteğe bağlıdır. Bununla birlikte, bir öğenin amacını yerine getirebilmesi için birçok özellik belirtilmelidir. Tam anlamıyla isteğe bağlı özellikler için referans dokümanları varsayılan değerleri belirtir.

Kök <manifest> öğesinin bazı özellikleri dışında tüm özellik adları android:alwaysRetainTaskState gibi android: ön ekiyle başlar. Ön ek evrensel olduğundan, dokümanlar genellikle ada göre özelliklere atıfta bulunurken bu ön eki atlar.

Birden çok değer
Birden fazla değer belirtilebiliyorsa öğe neredeyse her zaman tekrarlanır. Birden fazla değerin tek bir öğe içinde listelenmesi gerekmez. Örneğin, bir intent filtresinde birkaç işlem listelenebilir:
<intent-filter ... >
    <action android:name="android.intent.action.EDIT" />
    <action android:name="android.intent.action.INSERT" />
    <action android:name="android.intent.action.DELETE" />
    ...
</intent-filter>
Kaynak değerleri
Bazı özelliklerde, bir etkinliğin başlığı veya uygulama simgeniz gibi kullanıcılara gösterilen değerler bulunur. Bu özelliklerin değeri, kullanıcının diline veya diğer cihaz yapılandırmalarına göre farklı olabilir (örneğin, cihazın piksel yoğunluğuna göre farklı bir simge boyutu sağlamak için), bu nedenle değerler manifest dosyasına kod olarak gömülmek yerine bir kaynaktan veya temadan ayarlanmalıdır. Daha sonra gerçek değer, farklı cihaz yapılandırmaları için sağladığınız alternatif kaynaklara göre değişebilir.

Kaynaklar, aşağıdaki biçimde değerler olarak ifade edilir:

"@[package:]type/name"

Kaynak, uygulamanız tarafından sağlanıyorsa package adını çıkarabilirsiniz (kitaplık kaynakları sizinkiyle birleştirildiği için bir kitaplık bağımlılığı tarafından sağlanıyorsa da dahil). Android çerçevesinden bir kaynak kullanmak istediğinizde diğer geçerli paket adı android'dir.

type, string veya drawable gibi bir kaynak türüdür. name ise belirli bir kaynağı tanımlayan addır. Örnek:

<activity android:icon="@drawable/smallPic" ... >

Projenize kaynak ekleme hakkında daha fazla bilgi için Uygulama kaynaklarına genel bakış makalesini okuyun.

Bunun yerine, bir tema içinde tanımlanmış değeri uygulamak için ilk karakter @ yerine ? olmalıdır:

"?[package:]type/name"

Dize değerleri
Özellik değerinin dize olduğu durumlarda karakterlerden çıkış yapmak için çift ters eğik çizgi (\\) kullanın. Örneğin, yeni satır için \\n, Unicode karakteri için \\uxxxx.

Manifest öğeleri referansı

Aşağıdaki tabloda, AndroidManifest.xml dosyasındaki tüm geçerli öğeler için referans belgelerinin bağlantıları sunulmuştur.

<action> Amaç filtresine işlem ekler.
<activity> Bir etkinlik bileşeni tanımlar.
<activity-alias> Bir etkinlik için takma ad tanımlar.
<application> Uygulamayı açıklar.
<category> Amaç filtresine kategori adı ekler.
<compatible-screens> Uygulamanın uyumlu olduğu her ekran yapılandırmasını belirtir.
<data> Amaç filtresine veri spesifikasyonu ekler.
<grant-uri-permission> Üst içerik sağlayıcının erişim izninin olduğu uygulama verilerinin alt kümelerini belirtir.
<instrumentation> Bir uygulamanın sistemle etkileşimini izlemenize olanak tanıyan bir Instrumentation sınıfı tanımlar.
<intent-filter> Bir etkinliğin, hizmetin veya yayın alıcısının yanıt verebileceği niyet türlerini belirtir.
<manifest> AndroidManifest.xml dosyasının kök öğesi.
<meta-data> Üst bileşene sağlanabilen ek, rastgele veriler içeren bir öğenin ad-değer çifti.
<path-permission> İçerik sağlayıcı içindeki belirli bir veri alt kümesi için yolu ve gerekli izinleri tanımlar.
<permission> Bu uygulamanın veya diğer uygulamaların belirli bileşenlerine ya da özelliklerine erişimi sınırlamak için kullanılabilecek bir güvenlik izni beyan eder.
<permission-group> İlgili izinlerin mantıksal grubu için bir ad tanımlar.
<permission-tree> İzin ağacı için temel adı tanımlar.
<provider> İçerik sağlayıcı bileşeni tanımlar.
<queries> Uygulamanızın erişmek istediği diğer uygulama grubunu tanımlar. Paket görünürlüğü filtreleme ile ilgili kılavuzdan daha fazla bilgi edinebilirsiniz.
<receiver> Bir yayın alıcı bileşeni tanımlar.
<service> Bir hizmet bileşeni tanımlar.
<supports-gl-texture> Uygulamanın desteklediği tek bir GL doku sıkıştırma biçimi tanımlar.
<supports-screens> Uygulamanızın desteklediği ekran boyutlarını belirtir ve uygulamanızın desteklediğinden daha büyük ekranlar için ekran uyumluluğu modunu etkinleştirir.
<uses-configuration> Uygulama için gereken belirli giriş özelliklerini belirtir.
<uses-feature> Uygulama tarafından kullanılan tek bir donanım veya yazılım özelliği tanımlar.
<uses-library> Uygulamanın bağlanması gereken paylaşılan bir kitaplığı belirtir.
<uses-native-library> Uygulamanın bağlanması gereken, tedarikçi firma tarafından sağlanan yerel bir paylaşılan kitaplığı belirtir.
<uses-permission> Uygulamanın düzgün çalışması için kullanıcının vermesi gereken sistem iznini belirtir.
<uses-permission-sdk-23> Uygulamanın, Android 6.0 (API düzeyi 23) veya sonraki sürümleri çalıştıran bir cihazda yüklü olması şartıyla, belirli bir izni istediğini belirtir.
<uses-sdk> Bir uygulamanın Android platformunun bir veya daha fazla sürümüyle uyumluluğunu API düzeyi tam sayısı ile ifade edebilmenizi sağlar.

Örnek manifest dosyası

Aşağıdaki XML, uygulama için iki etkinlik tanımlayan basit bir AndroidManifest.xml örneğidir.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0">

    <!-- Beware that these values are overridden by the build.gradle file -->
    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="26" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- This name is resolved to com.example.myapp.MainActivity
             based on the namespace property in the build.gradle file -->
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".DisplayMessageActivity"
            android:parentActivityName=".MainActivity" />
    </application>
</manifest>