Uygulama manifestine genel bakış

Her uygulama projesinin, proje kaynak grubunun kökünde tam olarak bu ada sahip bir AndroidManifest.xml dosyası olmalıdır. Manifest dosyası, Android derleme araçları, Android işletim sistemi ve Google Play için uygulamanızla ilgili temel bilgileri açıklar.

Manifest dosyasının diğer birçok şeyin yanı sıra aşağıdakileri de belirtmesi gerekir:

  • 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ı işleyebileceği gibi özellikler ve bileşenin nasıl başlatılabileceğini açıklayan intent filtreleri de bildirebilir. Aşağıdaki bölümde uygulama bileşenleri hakkında daha fazla bilgi edinin.
  • Uygulamanın, sistemin veya diğer uygulamaların korunan bölümlerine erişmek için ihtiyaç duyduğu izinler. Ayrıca, diğer uygulamaların bu uygulamadaki içeriğe erişmek için sahip olması gereken tüm izinleri de belirtir. Bir sonraki bölümde izinler hakkında daha fazla bilgi edinin.
  • Uygulamanın gerektirdiği donanım ve yazılım özellikleri. Bu özellikler, uygulamanın Google Play'den hangi cihazlara yüklenebileceğini etkiler. Aşağıdaki bölümde cihaz uyumluluğu hakkında daha fazla bilgi edinin.

Uygulamanızı derlemek için Android Studio'yu kullanıyorsanız manifest dosyası sizin için oluşturulur ve özellikle kod şablonları kullanırken gerekli manifest öğelerinin çoğu uygulamanızı derlediğiniz sırada 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 uygulama bileşeni için manifest dosyasında ilgili XML öğesini tanımlayın:

Bu bileşenlerden herhangi birini manifest dosyasında belirtmeden alt sınıfa alırsanız sistem bunu başlatamaz.

Alt sınıfınızın adını, tam paket tanımını kullanarak 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>

Ancak name değerinin ilk karakteri nokta ise uygulamanın adının önüne modül düzeyindeki build.gradle dosyasının namespace özelliğindeki uygulama ad alanının adı eklenir. Örneğin, ad alanı "com.example.myapp" ise aşağıdaki etkinlik adı com.example.myapp.MainActivity olarak çözülür:

<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ğerine eksik alt paket adları (ör. ".purchases.PayActivity") eklenmeli veya tam nitelikli paket adı kullanılmalıdır.

Niyet filtreleri

Uygulama etkinlikleri, hizmetleri ve yayın alıcıları intent'ler tarafından etkinleştirilir. Intent, Intent nesnesi tarafından tanımlanan ve gerçekleştirilecek bir işlemi açıklayan bir mesajdır. Bu mesajda, işlem yapılacak veriler, işlemi gerçekleştirmesi beklenen bileşenin kategorisi ve diğer talimatlar yer alır.

Bir uygulama sisteme intent gönderdiğinde sistem, her uygulamanın manifest dosyasında bulunan intent filtresi beyanlarına göre intent'i 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 intent'i işleyebiliyorsa 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 Intent'ler ve Intent Filtreleri belgesine bakın.

Simgeler ve etiketler

Bazı manifest öğelerinde, ilgili uygulama bileşeni için kullanıcılara sırasıyla küçük bir simge ve metin etiketi göstermek üzere icon ve label özellikleri bulunur.

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 tüm bileşenleri (ör. 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 intent'i yerine getirmek için seçenek olarak sunulduğunda kullanıcıya gösterilir. Bu simge varsayılan olarak üst bileşen için bildirilen <activity> veya <application> öğesinden devralınır.

Seçici iletişim kutusunda daha iyi belirtmek istediğiniz benzersiz bir işlem sağlıyorsa intent 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 (API düzeyi 23) sürümünden 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 <uses-permission> öğesiyle belirtmeniz gerekir. İzin verilirse uygulama, korumalı özellikleri kullanabilir. Aksi takdirde, bu özelliklere erişme girişimleri başarısız olur.

Uygulamanız, kendi bileşenlerini de izinlerle koruyabilir. android.Manifest.permission bölümünde listelenen Android tarafından tanımlanan izinlerden herhangi birini veya başka bir uygulamada tanımlanan bir izni kullanabilir. Uygulamanız kendi izinlerini de tanımlayabilir. <permission> öğesiyle yeni bir izin beyan edilir.

Daha fazla bilgi için Android'de izinler başlıklı makaleyi inceleyin.

Cihaz uyumluluğu

Manifest dosyası, uygulamanızın hangi donanım veya yazılım özelliklerini gerektirdiğini ve buna bağlı olarak hangi cihaz türleriyle uyumlu olduğunu da belirtebileceğiniz yerdir. Google Play Store, kullanıcıların uygulamanızın gerektirdiği özellikleri veya sistem sürümünü sağlamayan cihazlara 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 belirtmenize olanak tanır. Örneğin, uygulamanız pusula sensörü olmayan bir cihazda temel işlevleri yerine getiremiyorsa aşağıdaki manifest etiketiyle pusula sensörünü gerekli olarak belirtebilirsiniz:

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

Not: Uygulamanızı Chromebook'larda kullanıma sunmak istiyorsanız dikkate almanız gereken bazı önemli donanım ve yazılım özelliği sınırlamaları vardır. Daha fazla bilgi için Chromebook'lar için uygulama manifest uyumluluğu başlıklı makaleyi inceleyin.

<uses-sdk>

Sıralı platform sürümlerinin her biri genellikle önceki sürümde bulunmayan yeni API'ler ekler. Uygulamanızın uyumlu olduğu minimum sürümü belirtmek için manifest'inizde <uses-sdk> etiketi ve minSdkVersion özelliği bulunmalıdır.

Ancak <uses-sdk> öğesindeki özelliklerin, build.gradle dosyasındaki ilgili mülkler tarafından geçersiz kılındığını unutmayın. Bu nedenle, Android Studio kullanıyorsanız minSdkVersion ve targetSdkVersion değerlerini burada belirtin:

Groovy

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 için derlemenizi yapılandırma hakkındaki makaleyi okuyun.

Uygulamanızın farklı cihazları nasıl desteklediğini beyan etme hakkında daha fazla bilgi edinmek için Cihaz uyumluluğuna genel bakış başlıklı makaleyi inceleyin.

Dosya kuralları

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

Öğeler
Yalnızca <manifest> ve <application> öğeleri gereklidir. Her biri yalnızca bir kez kullanılmalıdır. Diğer öğelerin çoğu sıfır veya daha fazla kez görünebilir. Ancak manifest dosyasının yararlı olması için bazılarının mevcut 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ıraya yerleştirilmez. Örneğin, <activity>, <provider> ve <service> öğeleri herhangi bir sırayla yerleştirilebilir. Bu kuralın iki önemli istisnası vardır:

  • <activity-alias> öğesi, kısaltması olduğu <activity> öğesini takip etmelidir.
  • <application> öğesi, <manifest> öğesinin içindeki son öğe olmalıdır.
Özellikler
Teknik olarak tüm özellikler isteğe bağlıdır. Ancak bir öğenin amacına ulaşabilmesi için birçok özelliğin belirtilmesi gerekir. Gerçekten isteğe bağlı özellikler için varsayılan değerler referans dokümanlarında belirtilir.

Kök <manifest> öğesinin bazı özellikleri hariç tüm özellik adları android: ön ekiyle başlar (ör. android:alwaysRetainTaskState). Ön ek evrensel olduğundan, dokümanlar genellikle özelliklere adlarıyla atıfta bulunurken ön eki atlar.

Birden fazla değer
Birden fazla değer belirtilebiliyorsa tek bir öğede birden fazla değer listelenmek yerine öğe neredeyse her zaman tekrarlanır. Örneğin, bir intent filtresi birkaç işlemi listeleyebilir:
<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ı özelliklerin kullanıcılara gösterilen değerleri vardır (ör. bir etkinliğin başlığı veya uygulama simgeniz). Bu özelliklerin değeri, kullanıcının diline veya diğer cihaz yapılandırmalarına göre farklılık gösterebilir (ör. cihazın piksel yoğunluğuna göre farklı bir simge boyutu sağlamak için). Bu nedenle, değerler manifest dosyasına kodla yazılmak yerine bir kaynaktan veya temadan ayarlanmalıdır. 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çimdeki değerlerle ifade edilir:

"@[package:]type/name"

Kaynak uygulamanız tarafından sağlanıyorsa package adını atlayabilirsiniz (kitaplık kaynakları sizinkilerle birleştirildiğinden kitaplık bağımlılığı tarafından sağlanıyorsa dahil). Android çerçevesindeki bir kaynağı kullanmak istediğinizde geçerli olan tek diğer paket adı android'tür.

type, string veya drawable gibi bir kaynak türüdür ve name, 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ış başlıklı makaleyi okuyun.

Bunun yerine, temada tanımlanan bir değeri uygulamak için ilk karakter @ yerine ? olmalıdır:

"?[package:]type/name"

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

Manifest öğeleri referansı

Aşağıdaki tabloda, AndroidManifest.xml dosyasındaki tüm geçerli öğelerin referans dokümanlarına bağlantılar verilmiştir.

<action> Bir intent filtresine işlem ekler.
<activity> Bir etkinlik bileşeni tanımlar.
<activity-alias> Bir etkinlik için takma ad tanımlar.
<application> Uygulamayı belirtir.
<category> Bir intent filtresine kategori adı ekler.
<compatible-screens> Uygulamanın uyumlu olduğu her ekran yapılandırmasını belirtir.
<data> Bir intent filtresine veri spesifikasyonu ekler.
<grant-uri-permission> Üst içerik sağlayıcının erişme izni olan uygulama verilerinin alt kümelerini belirtir.
<instrumentation> Bir uygulamanın sistemle etkileşimini izlemenizi sağlayan 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 intent türlerini belirtir.
<manifest> AndroidManifest.xml dosyasının kök öğesi.
<meta-data> Üst bileşene sağlanabilecek ek, rastgele veri öğesi için bir ad-değer çifti.
<path-permission> Bir içerik sağlayıcıdaki belirli bir veri alt kümesi için yolu ve gerekli izinleri tanımlar.
<permission> Bu veya diğer uygulamaların belirli bileşenlerine ya da özelliklerine erişimi sınırlamak için kullanılabilecek bir güvenlik izni tanımlar.
<permission-group> İlgili izinlerin mantıksal bir gruplaması için bir ad tanımlar.
<permission-tree> İzin ağacının temel adını belirtir.
<provider> İçerik sağlayıcı bileşeni tanımlar.
<queries> Uygulamanızın erişmek istediği diğer uygulama grubunu belirtir. Paket görünürlüğü filtreleme hakkında daha fazla bilgi edinmek için kılavuzu inceleyin.
<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çimini belirtir.
<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 uyumluluk modunu etkinleştirir.
<uses-configuration> Uygulamanın gerektirdiği belirli giriş özelliklerini belirtir.
<uses-feature> Uygulama tarafından kullanılan tek bir donanım veya yazılım özelliğini belirtir.
<uses-library> Uygulamanın bağlanması gereken paylaşılan 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 bir sistem iznini belirtir.
<uses-permission-sdk-23> Bir uygulamanın belirli bir izni istediğini belirtir ancak yalnızca uygulama Android 6.0 (API düzeyi 23) veya sonraki sürümleri çalıştıran bir cihaza yüklüyse.
<uses-sdk> Bir uygulamanın Android platformunun bir veya daha fazla sürümüyle uyumluluğunu API düzeyi tam sayısıyla ifade etmenizi sağlar.

Sınırlar

Aşağıdaki etiketlerin manifest dosyasında görünme sayısı sınırlıdır:

Etiket Adı Sınır
<package> 1000
<meta-data> 1000
<uses-library> 1000

Aşağıdaki özelliklerin maksimum uzunluğu sınırlıdır:

Özellik Sınır
name 1024
versionName 1024
host 255
mimeType 255

Örnek manifest dosyası

Aşağıdaki XML, uygulama için iki etkinlik açıklayan basit bir örnektir AndroidManifest.xml.

<?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>