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ı, temel bilgileri açıklar Android geliştirme araçları, Android işletim sistemi ve Android Google Play.

Manifest dosyası, diğer birçok şeyin yanı sıra aşağıdakileri de beyan etmek zorundadır:

  • 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 temel özellikleri (ör. Kotlin veya Java sınıfının adı) Ayrıca, hangi cihaz yapılandırmalarını yönetebileceği gibi intent filtreleridir. Aşağıdaki bölümde uygulama bileşenleri hakkında daha fazla bilgi edinebilirsiniz.
  • Uygulamanın şunları yapmak için ihtiyaç duyduğu izinler: sistemin korunan bölümlerine veya diğer uygulamalara erişmesine izin verilmez. 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 Cihazlar, uygulamayı Google Play'den yükleyebilir. 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'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 en önemli özelliklerden bazılarının manifesto dosyasında gösterilir.

Uygulama bileşenleri

Her uygulama için bileşenini kullanın, manifest dosyasında buna karşılık gelen bir XML öğesini tanımlayın:

Bu bileşenlerden herhangi birini manifest dosyasında bildirmeden alt sınıfa atarsanız: sistem bu dosyayı başlatamaz.

name kullanarak alt sınıfınızın adını belirtin özelliğini kullanın. Örneğin, Activity alt sınıf aşağıdaki gibi açıklanmıştı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 mülkünden alınan uygulama adlandırma alanı 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 bölümüne bakın.

Alt paketlerde (ör. com.example.myapp.purchases, name değeri eksik olan değerleri toplamalıdır veya ".purchases.PayActivity" gibi alt paket adlarını tam paket adıdır.

Intent filtreleri

Uygulama etkinlikleri, hizmetler ve anons intentler tarafından etkinleştirilir. Amaç, bir projenin Bir Intent nesnesini tanımlayan işlem yapılacak veriler, e-posta adresi kategorisi, bileşeni ve diğer talimatları içerir.

Bir uygulama sisteme bir istekte bulunduğunda, sistem bir uygulamayı bulur amaç filtresine göre niyeti işleyebilen bileşen beyanlarını her uygulamanın manifest dosyasında bulabilirsiniz. Sistem, eşleşen bileşenin bir örneğini başlatır ve Intent nesnesini bu bileşene iletir. Birden fazla uygulama işleme koyduktan sonra kullanıcı hangi uygulamanın kullanılacağını seçebilir.

Bir uygulama bileşeninde sınırsız sayıda intent filtresi ( <intent-filter>. öğesi), her biri söz konusu bileşenin farklı bir özelliğini açıklayan bir ifadedir.

Daha fazla bilgi için Intent'ler ve Intent Filtreleri belgesine bakın.

Simgeler ve etiketler

Bazı manifest öğelerinde icon ve label var özellikleri ile birlikte, sırasıyla küçük bir simge ve metin etiketi görüntüleyebilir. kullanıcılara gösterir.

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, veya <activity> veya <application> öğesi.

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ı makaleye bakın.

İzinler

Android uygulamaları, hassas kullanıcı verilerine erişim izni istemelidir, Örneğin, kişiler ve SMS gibi belirli sistem özelliklerini kamera ve internet erişimi. Her izin benzersiz bir etiketle tanımlanır. Örneğin, SMS mesajı göndermesi gereken bir uygulama şu özelliklere sahip olmalıdır: satırında şu satırı ekleyin:

<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 bir <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, izinlerle kendi bileşenlerini de koruyabilir. Kullanabileceğim aşağıdaki listede belirtildiği şekilde, Android tarafından tanımlanmış izinlerden herhangi biri android.Manifest.permission veya bir izin bir uygulamadır. Uygulamanız kendi izinlerini de tanımlayabilir. <permission> öğesiyle yeni bir izin beyan edilir.

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

Cihaz uyumluluğu

Manifest dosyasında ayrıca ne tür donanım veya uygulamanızın gerektirdiği yazılım özellikleri ve buna bağlı olarak, uygulamanızın ile uyumludur. Google Play Store, kullanıcıların uygulamanızı yüklemesine izin vermiyor uygulamanızın desteklediği özellikleri veya sistem sürümünü sağlamayan cihazlarda gerekiyor.

Uygulamanızın hangi cihazlarla uyumlu olduğunu tanımlayan çeşitli manifest etiketleri vardır. Aşağıda en yaygın olanları belirtilmiş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 temel olmayan bir cihazda çalışırsanız pusulayı sensörünü yükleyin:

<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 önemli sınırlamalar göz önünde bulundurmanız gerekir. 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 mevcuttur. 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 şuna dikkat edin: karşılık gelen mülkler tarafından geçersiz kılınır build.gradle dosyasıdır. Bu nedenle, Android Studio kullanıyorsanız minSdkVersion ve targetSdkVersion değerlerini burada belirtin:

EskiKotlin
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
        ...
    }
}
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, genellikle proje yönetiminde kullanılan öğelerini ve özniteliklerini içermelidir.

Öğeler
Yalnızca <manifest> ve <application> öğesi gerektirir. Her biri yalnızca bir kez geçmelidir. Diğer öğelerin çoğu sıfır veya daha fazla kez görülebilir. Ancak bazı manifest dosyasının kullanışlı olması için bunları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 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 referans belgeleri varsayılan değerleri gösterir.

Bazı kök dizin özellikleri hariç, <manifest>. öğesi varsa tüm özellik adları android: önekiyle başlar, android:alwaysRetainTaskState gibi. Ö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 neredeyse her zaman tekrarlanmasına neden olur. Örneğin, 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ı özelliklerde, kullanıcılara gösterilen değerler bulunur. Örneğin: bir etkinlik veya uygulama simgenizin başlığı. Bu özelliklerin değeri kullanıcının diline veya diğer cihaz yapılandırmalarına (ör. cihazın piksel yoğunluğuna göre farklı bir simge boyutu sağlar), bu nedenle değerleri, kod parçası olarak manifest dosyası olarak kaydedin. 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ı atlayabilirsiniz (Kitaplık kaynakları sizinkilerle birleştirildiğinden kitaplık bağımlılığı tarafından sağlanıyorsa dahil). Geçerli olan tek paket adı ise android, Android'deki bir kaynağı kullanmak istediğinizde bahsedeceğim.

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, 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ğ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> 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ı 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ş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 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 uygulamanın veya diğer uygulamaların belirli bileşenlerine veya özelliklerine erişimi sınırlamak için kullanılabilecek bir güvenlik izni tanımlar.
<permission-group> İlgili izinlerin mantıksal gruplandırması için bir ad tanımlar.
<permission-tree> İzin ağacının temel adını belirtir.
<provider> Bir iç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 rehberimizi 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ı beyan eder 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 belirtir.
<uses-library> Uygulamanın bağlanması gereken paylaşılan kitaplığı belirtir.
<uses-native-library> Uygulamanın bağlanması gereken, satıcı tarafından sağlanan yerel 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 bir sürümün yüklü olduğu 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 uzunlukları 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>