Uygulama manifestine genel bakış

Her uygulama projesinin bir AndroidManifest.xml dosyası olmalıdır. ad, proje kaynak kümesinin kök dizininde yer alı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. 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, Bu uygulamadan içeriğe erişmek isteyen diğer uygulamaların sahip olması gereken tüm izinler. Aşağıdaki bölümden izinler hakkında daha fazla bilgi edinebilirsiniz.
  • 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 kullanıyorsanız manifest dosyası için oluşturulur ve temel manifest öğelerinin çoğu uygulamanızı geliştirirken (özellikle kod şablonlarını kullanırken)

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ğerindeki ilk karakter noktaysa uygulamanın ad alanını kullanır. Bu işlem, modül düzeyindeki build.gradle dosyasının namespace özelliği, adın önüne eklenir. Örneğin, ad alanı "com.example.myapp", aşağıdaki etkinlik adı şu şekilde çözümlenir: com.example.myapp.MainActivity:

<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 başlatılır. eşleşen bileşenin bir örneğini verir 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 Amaçlar ve Amaç 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 varsayılan olarak kullanılır Tüm alt öğeler için icon ve label değeri. Örneğin, <application>. öğesi, uygulamanın her bileşeni (ör. tüm etkinlikler) için varsayılan simge ve etikettir.

Bir bileşenin <intent-filter>. söz konusu bileşen bir seçenek olarak sunulduğunda kullanıcıya bir amacı ifade eder. Varsayılan olarak bu simge, veya <activity> veya <application> öğesi.

Simgeyi değiştirmek isteyebilirsiniz. bir amaç filtresi için, açılış sayfanızda daha iyi belirtmek istediğiniz benzersiz bir işlem sağlıyorsa seçici iletişim kutusu. 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>

Şununla başlayan: Android 6.0 (API düzeyi 23) yüklüyse, kullanıcı çalışma zamanında bazı uygulama izinlerini onaylayabilir veya reddedebilir. Ama Uygulamanızın hangi Android sürümünü desteklediğinden bağımsız olarak, tüm izin isteklerini bir <uses-permission>. öğesine dokunun. İzin verilirse uygulama, korunan özellikleri. 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. Yeni bir izin, <permission>. öğesine dokunun.

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 cihazları içerdiğini tanımlayan birkaç manifest etiketi vardır uyumlu olabiliyor. Aşağıda en yaygın olanları belirtilmiştir.

<uses-feature>

<uses-feature> öğesi, donanımı ve en iyi uygulamaları paylaşacağız. Ö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 bkz. Şunun için uygulama manifesti uyumluluğu: Chromebook'lar.

<uses-sdk>

Birbirini izleyen her platform sürümü genellikle önceki sürümde mevcuttur. Uygulamanızın kullandığı minimum sürümü belirtmek için uyumlu değilse manifest dosyanız <uses-sdk> etiketini içermelidir ve minSdkVersion özelliğini gönderin.

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. Dolayısıyla, Android Studio kullanıyorsanız minSdkVersion ve Bunun yerine burada targetSdkVersion değerleri var:

Eski

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.

Farklı cihazlarda uygulamanızın desteğini beyan etme hakkında daha fazla bilgi edinmek için daha fazla bilgi için Cihaz uyumluluğu genel bakış bölümüne bakın.

Dosya kuralları

Bu bölümde, genel olarak tüm proje yönetimi süreçlerinin öğelerini ve özniteliklerini içermelidir.

Elements
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, özellikler aracılığıyla ayarlanır, içindeki karakter verileri olarak değil. bir öğedir.

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

  • <activity-alias> öğesi, <activity> takma addır.
  • <application> öğesi, <manifest> öğesi.
Özellikler
Teknik olarak tüm özellikler isteğe bağlıdır. Ancak birçok özellik bir öğenin amacını gerçekleştirebilmesi için belirtilmelidir. 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 olduğu gibi, dokümanlarda genellikle ilişkilendirme modelinden bahsederken yazarsınız.

Birden çok değer
Birden fazla değer belirtilebiliyorsa öğe neredeyse her zaman tekrarlanmasına neden olur. Örneğin, intent filtresi çeşitli işlemleri 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. Daha sonra gerçek değer, kaynaklar hakkında daha fazla bilgi edinin.

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

"@[package:]type/name"

Kaynak, kuruluşunuz tarafından sağlanıyorsa package adını çıkarabilirsiniz. (bir kitaplık bağımlılığı tarafından sağlanmış olması da buna dahildir, çünkü kitaplık kaynakları sizinkiyle birleştirilecektir). Geçerli olan tek paket adı ise android, Android'deki bir kaynağı kullanmak istediğinizde bahsedeceğim.

type, string veya drawable, name ise belirli kaynağı tanımlayan addır. Örnek:

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

Projenize nasıl kaynak ekleyeceğiniz hakkında daha fazla bilgi için Uygulama kaynaklarına genel bakış.

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 çift ters eğik çizgi kullanın Karakterlerden çıkış yapmak için (\\) (örneğin, \\n) yeni satır veya Unicode karakteri için \\uxxxx ekleyin.

Manifest öğeleri referansı

Aşağıdaki tabloda, geçerli tüm siteler için referans belgelerinin bağlantıları verilmiştir: öğelerini AndroidManifest.xml dosyasına koyabilirsiniz.

<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ı tanımlar.
<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 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> İç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 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ı için temel adı tanımlar.
<provider> Bir içerik sağlayıcı bileşeni tanımlar.
<queries> Uygulamanızın erişmeyi hedeflediği diğer uygulama grubunu tanımlar. Daha fazla bilgi edinin paket görünürlüğüyle ilgili kılavuza göz atın filtre uygulama.
<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ı 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 tanımlar.
<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 doğru şekilde çalışması için kullanıcının vermesi gereken sistem iznini belirtir.
<uses-permission-sdk-23> Bir uygulamanın, yalnızca Android 6.0 (API düzeyi 23) veya sonraki bir sürümü çalıştıran bir cihazda yüklü olması durumunda 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ü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, AndroidManifest.xml API'sinin iki etkinlik var.

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