Uygulama manifestine genel bakış

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

Diğer birçok unsurun yanı sıra, manifest dosyası 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 bildirebilir. Uygulama bileşenleri hakkında daha fazla bilgi edinmek için aşağıdaki bölümü inceleyin.
  • Uygulamanın, sistemin korunan bölümlerine veya diğer uygulamalara erişmek için ihtiyaç duyduğu izinler. Ayrıca, bu uygulamadan içeriğe erişmek isteyen diğer uygulamaların sahip olması gereken tüm izinleri de beyan eder. İzinler hakkında daha fazla bilgiye aşağıdaki bölümden ulaşabilirsiniz.
  • 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, özellikle kod şablonlarını kullanırken uygulamanızı oluştururken 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 öğesi tanımlayın:

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 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ımlanmıştı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 bölümüne bakın.

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 nitelikli paket adını kullanmalıdır.

Amaç filtreleri

Uygulama etkinlikleri, hizmetler ve yayın alıcıları niyetler tarafından etkinleştirilir. Amaç, 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 amaç bildirdiğinde, sistem, her uygulamanın manifest dosyasındaki amaç filtresi bildirimlerine göre amacı 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 açıklayan istediğiniz sayıda intent filtresi (<intent-filter> öğesiyle tanımlanır) bulunabilir.

Daha fazla bilgi için Niyetler ve Amaç Filtreleri belgesine bakın.

Simgeler ve etiketler

Bazı manifest öğelerinde, kullanıcılara karşılık gelen uygulama bileşeni için küçük bir simge ve metin etiketi göstermek için sırasıyla 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, tüm etkinlikler gibi uygulama bileşenlerinin her biri için varsayılan simge ve etikettir.

Bir bileşenin <intent-filter> özelliğinde ayarlanan simge ve etiket, söz konusu bileşen bir amacı karşılama seçeneği olarak sunulduğunda kullanıcıya gösterilir. Varsayılan olarak bu simge, <activity> veya <application> öğesi gibi üst bileşen için belirtilen simgeden devralınır.

Bir amaç filtresinin simgesini, seçici iletişim kutusunda daha iyi belirtmek istediğiniz benzersiz bir işlem sunuyorsa 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ılar çalışma zamanında bazı uygulama izinlerini onaylayabilir veya reddedebilir. Ancak uygulamanızın hangi Android sürümünü desteklediğinden bağımsız olarak, tüm izin isteklerini manifest dosyasında <uses-permission> öğesiyle tanımlamanız gerekir. Uygulama, izin verilirse korunan özellikleri kullanabilir. Aksi takdirde, bu özelliklere erişme denemeleri başarısız olur.

Uygulamanız ayrıca izinlerle kendi bileşenlerini koruyabilir. Bu uygulama, Android tarafından tanımlanan herhangi bir izni (android.Manifest.permission içinde listelendiği şekilde) veya başka bir uygulamada beyan edilmiş bir izni kullanabilir. Uygulamanız kendi izinlerini de tanımlayabilir. Yeni bir izin, <permission> öğesiyle tanımlanır.

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

Cihaz uyumluluğu

Manifest dosyasında da uygulamanızın gerektirdiği donanım veya yazılım özelliklerini ve uzantı olarak uygulamanızın ne tür cihazlarla uyumlu olduğunu 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 nedenlerden bazıları aşağıda belirtilmiştir.

<uses-feature>

<uses-feature> öğesi, uygulamanızın ihtiyaç duyduğu donanım ve yazılım özelliklerini bildirmenizi sağlar. Ö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ü gerektiği gibi belirtebilirsiniz:

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

Not: Uygulamanızı Chromebook'larda 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>

Birbirini takip eden 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ız <uses-sdk> etiketini ve 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 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 konusunu okuyun.

Uygulamanızın farklı cihazları desteklediğini nasıl beyan edeceğiniz hakkında daha fazla bilgi edinmek 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 geç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 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ı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> karakterine uymalıdır.
  • <application> öğesi, <manifest> öğesi 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. Gerçekten 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: önekiyle başlar. Ön ek evrensel olduğundan, dokümanlarda ada göre özniteliklere atıfta bulunurken genellikle bu ön ek atlanır.

Birden fazla değer
Birden fazla değer belirtilebiliyorsa öğe, tek bir öğe içinde birden fazla değer listelenmek yerine neredeyse her zaman tekrarlanır. Örneğin, bir amaç filtresinde çeşitli işlemler 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 (cihazın piksel yoğunluğuna göre farklı bir simge boyutu sağlamak gibi), bu nedenle değerler manifest dosyasına kod olarak gömülmek yerine bir kaynak veya temadan ayarlanmalıdır. Böylece 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 ifade edilir:

"@[package:]type/name"

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

type, string veya drawable gibi bir kaynak türüdür. name ise belirli 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ış 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 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ı sunulmaktadır.

<action> Amaç filtresine bir işlem ekler.
<activity> Bir etkinlik bileşeni tanımlar.
<activity-alias> Bir etkinlik için takma ad tanımlar.
<application> Uygulamayı tanımlar.
<category> Amaç filtresine bir kategori adı ekler.
<compatible-screens> Uygulamanın uyumlu olduğu her ekran yapılandırmasını belirtir.
<data> Niyet filtresine veri spesifikasyonu ekler.
<grant-uri-permission> Üst içerik sağlayıcının erişim iznine sahip 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 verilerden oluşan 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 tanımlar.
<permission-group> İlgili izinlerin mantıksal grubu için bir ad tanımlar.
<permission-tree> Bir izin ağacı için temel adı tanımlar.
<provider> İçerik sağlayıcı bileşeni tanımlar.
<queries> Uygulamanızın erişmeyi hedeflediği diğer uygulama grubunu tanımlar. Paket görünürlüğü filtreleme kılavuzundan daha fazla bilgi edinebilirsiniz.
<receiver> 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ı bildirir ve uygulamanızın desteklediğinden daha büyük ekranlar için ekran uyumluluğu 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 tanımlar.
<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 sistem iznini belirtir.
<uses-permission-sdk-23> Bir uygulamanın, Android 6.0 (API düzeyi 23) veya sonraki sürümleri çalıştıran bir cihazda yüklü olması durumunda belirli bir izin 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ı aracılığıyla ifade etmenize olanak tanır.

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