Uygulama manifestine genel bakış

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

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, bu uygulamanın içeriğine erişmek isteyen diğer uygulamaların sahip olması gereken tüm izinleri de tanımlar. İzinler hakkında daha fazla bilgi için aşağıdaki bölümü inceleyin.
  • 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 uygulamanızı derlediğiniz sırada gerekli manifest öğelerinin çoğu 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 buna karşılık gelen bir XML öğesi tanımlayın:

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

Paketin tam adını kullanarak name özelliğiyle alt sınıfınızın adını 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 bir noktaysa modül düzeyindeki build.gradle dosyasının namespace özelliğinden alınan uygulama 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ü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, hizmetler ve yayın alıcıları intentler 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 bir intent gönderdiğinde sistem, her bir uygulamanın manifest dosyasındaki amaç filtresi bildirimlerine göre 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 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. Varsayılan olarak bu simge, üst bileşen (<activity> veya <application> öğesi) için bildirilen simgeden 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 dosyasında <uses-permission> öğesiyle bildirmeniz gerekir. İzin verilirse uygulama, korumalı özellikleri kullanabilir. Aksi halde 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

Uygulamanızın ne tür donanım veya yazılım özelliklerine ihtiyaç duyduğunu ve buna bağlı olarak, uygulamanızın hangi cihaz türleriyle uyumlu olduğunu da manifest dosyasında beyan edebilirsiniz. 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 sorunlardan 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>

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

Ancak <uses-sdk> öğesindeki özelliklerin, build.gradle dosyasındaki karşılık gelen mülkler 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 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 edinmek için derlemenizi nasıl yapılandıracağınızı öğrenin.

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 geçmelidir. 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ırada yerleştirilebilir. Bu kuralın iki önemli istisnası vardır:

  • <activity-alias> öğesi, kısaltması olduğu <activity> öğesini izlemelidir.
  • <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 özelliğin belirtilmesi gerekir. Tamamen isteğe bağlı özellikler için referans belgelerinde varsayılan değerler belirtilmiştir.

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 öğe, tek bir öğe içinde birden fazla değer listelenmesi yerine 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ğerinin dize olduğu durumlarda karakterlere çıkış yapmak için çift ters eğik çizgi (\\) kullanın. Örneğin, yeni satır için \\n, Unicode karakteri için \\uxxxx kullanabilirsiniz.

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> Amaç filtresine bir işlem ekler.
<activity> Bir etkinlik bileşeni tanımlar.
<activity-alias> Bir etkinlik için takma ad bildirir.
<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> Amaç 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 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 verilere sahip bir öğe için 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 gruplandırması 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 belirtir. Paket görünürlüğü filtreleme ile ilgili kılavuzda daha fazla bilgi edinin.
<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 bildirir.
<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 doğru şekilde çalışması için kullanıcının vermesi gereken 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üzeyindeki bir tam sayı aracılığıyla ifade etmenize olanak tanır.

Sınırlar

Aşağıdaki etiketlerin, manifest dosyasındaki bulunma sayısı sınırı vardı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>