Her uygulama projesinin proje kaynak grubunun kök dizininde tam olarak bu ada sahip bir AndroidManifest.xml dosyası olmalıdır.
Manifesto dosyası, uygulamanızla ilgili temel bilgileri Android derleme araçlarına, Android işletim sistemine ve Google Play'e açıklar.
Manifest dosyasının, diğer birçok şeyin yanı sıra aşağıdakileri beyan etmesi 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 özellikleri ve bileşenin nasıl başlatılabileceğini açıklayan intent filtrelerini de bildirebilir. Aşağıdaki bölümlerden birinde uygulama bileşenleri hakkında daha fazla bilgi edinebilirsiniz.
- Uygulamanın, sistemin korunan bölümlerine veya diğer uygulamalara 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 izinleri de bildirir. İzinler hakkında daha fazla bilgiyi aşağıdaki bölümde bulabilirsiniz.
- Uygulamanın gerektirdiği donanım ve yazılım özellikleri, 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 edinebilirsiniz.
Uygulamanızı oluşturmak için Android Studio kullanıyorsanız manifesto dosyası sizin için oluşturulur ve özellikle kod şablonları kullanırken uygulamanızı oluştururken temel manifesto öğ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 karşılık gelen bir XML öğesi tanımlayın:
Activitysınıfının her bir alt sınıfı için<activity>Servicesınıfının her bir alt sınıfı için<service>BroadcastReceiversınıfının her bir alt sınıfı için<receiver><provider>ContentProvideralt sınıfının her biri için
Bu bileşenlerden herhangi birini manifesto dosyasında bildirmeden alt sınıf olarak kullanırsanız sistem bu bileşeni başlatamaz.
Tam paket 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>
Ancak name değerindeki ilk karakter nokta ise modül düzeyindeki build.gradle dosyasının namespace özelliğinden 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.
Intent filtreleri
Uygulama etkinlikleri, hizmetler ve yayın alıcılar intent'ler tarafından etkinleştirilir. Intent, gerçekleştirilecek bir işlemi açıklayan Intent nesnesi tarafından tanımlanan bir mesajdır. Bu nesne, üzerinde işlem yapılacak verileri, işlemi gerçekleştirmesi beklenen bileşenin kategorisini ve diğer talimatları içerir.
Bir uygulama sisteme bir intent gönderdiğinde sistem, her uygulamanın manifest dosyasındaki intent filtresi bildirimlerine 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. Amacı birden fazla uygulama işleyebiliyorsa kullanıcı hangi uygulamayı kullanacağını seçebilir.
Bir uygulama bileşeninde, her biri bu bileşenin farklı bir özelliğini açıklayan dilediğiniz sayıda intent filtresi (<intent-filter> öğesiyle tanımlanır) bulunabilir.
Daha fazla bilgi için Intent'ler ve Intent Filtreleri belgesini inceleyin.
Simgeler ve etiketler
Bir dizi manifest öğesi, kullanıcılara ilgili uygulama bileşeni için küçük bir simge ve metin etiketi göstermek üzere sırasıyla icon ve label özelliklerine sahiptir.
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 etkinlikler gibi her bir bileşeni için varsayılan simge ve etikettir.
Bir bileşenin
<intent-filter>
öğesinde ayarlanan simge ve etiket, bu bileşen bir amacı yerine getirmek için seçenek olarak sunulduğunda kullanıcıya gösterilir. Varsayılan olarak bu simge, üst bileşen için tanımlanan simgeden (<activity> veya <application> öğesi) devralınır.
Seçici iletişim kutusunda daha iyi belirtmek istediğiniz benzersiz bir işlem sağlayan bir 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'dan (API düzeyi 23) itibaren kullanıcı, çalışma zamanında bazı uygulama izinlerini onaylayabilir veya reddedebilir. Ancak uygulamanız hangi Android sürümünü desteklerse desteklesin, manifest dosyasında <uses-permission> öğesiyle tüm izin isteklerini beyan etmeniz gerekir. İzin verilirse uygulama, korunan özellikleri kullanabilir. Aksi takdirde, bu özelliklere erişme girişimleri başarısız olur.
Uygulamanız kendi bileşenlerini de izinlerle koruyabilir. Uygulama, android.Manifest.permission sayfasında listelenen Android tarafından tanımlanmış izinlerden herhangi birini veya başka bir uygulamada beyan edilen 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 izinler başlıklı makaleyi inceleyin.
Cihaz uyumluluğu
Manifesto dosyası, uygulamanızın gerektirdiği donanım veya yazılım özelliklerini ve dolayısıyla uygulamanızın hangi cihaz türleriyle uyumlu olduğunu beyan edebileceğiniz yerdir. 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 birkaç manifest etiketi vardır. Aşağıda en yaygın olanlardan bazıları verilmiştir.
<uses-feature>
<uses-feature> öğesi, uygulamanızın ihtiyaç duyduğu donanım ve yazılım özelliklerini beyan etmenize olanak tanır. Örneğin, uygulamanız pusula sensörü olmayan bir cihazda temel işlevlerini yerine getiremiyorsa aşağıdaki manifest etiketiyle pusula sensörünün gerekli olduğunu beyan edebilirsiniz:
<manifest ... > <uses-feature android:name="android.hardware.sensor.compass" android:required="true" /> ... </manifest>
Not: Uygulamanızı Chromebook'larda kullanılabilir hale getirmek 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 manifesti uyumluluğu başlıklı makaleyi inceleyin.
<uses-sdk>
Her yeni 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 özellikler tarafından geçersiz kılındığını unutmayın.
Android Studio kullanıyorsanız minSdkVersion ve targetSdkVersion değerlerini orada belirtin:
Modern
android { defaultConfig { applicationId 'com.example.myapp' // Defines the minimum API level required to run the app. minSdkVersion 23 // Specifies the API level used to test the app. targetSdkVersion 36 ... } }
Kotlin
android { defaultConfig { applicationId = "com.example.myapp" // Defines the minimum API level required to run the app. minSdkVersion(23) // Specifies the API level used to test the app. targetSdkVersion(36) ... } }
build.gradle dosyası hakkında daha fazla bilgi edinmek için derlemenizi yapılandırma ile ilgili makaleyi okuyun.
Uygulamanızın farklı cihazlara yönelik desteğini nasıl beyan edeceğiniz hakkında daha fazla bilgi edinmek için Cihaz uyumluluğuna genel bakış başlıklı makaleyi inceleyin.
Dosya kuralları
Bu bölümde, manifesto dosyasındaki tüm öğeler ve özellikler için genel olarak geçerli olan kurallar açıklanmaktadır.
- Öğeler
- Yalnızca
<manifest>ve<application>öğeleri gereklidir. Her biri yalnızca bir kez gerçekleşmelidir. Diğer öğelerin çoğu sıfır veya daha fazla kez kullanılabilir. Ancak manifesto dosyasının işe yaraması için bunlardan bazılarının bulunması 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ırayla yerleştirilebilir. Bu kuralın iki önemli istisnası vardır:-
<activity-alias>öğesi, takma adı olduğu<activity>öğesinden sonra gelmelidir. -
<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 belgelerinde varsayılan değerler belirtilir.
Kök
<manifest>öğesinin bazı özellikleri hariç olmak üzere tüm özellik adlarıandroid:ön ekiyle başlar (ör.android:alwaysRetainTaskState). Önek evrensel olduğundan, dokümanlarda özelliklerden adlarıyla bahsedilirken genellikle önek kullanılmaz. - Birden çok değer
- Birden fazla değer belirtilebiliyorsa öğe, tek bir öğe içinde birden fazla değer listelemek yerine neredeyse her zaman tekrarlanır.
Örneğin, bir intent filtresi birkaç işlem 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. Örneğin, 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 manifesto dosyasına sabit kodlanmak 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çimde değerler olarak ifade edilir:
"@[package:]type/name"Kaynak, uygulamanız tarafından sağlanıyorsa package adını çıkarabilirsiniz (kitaplık kaynakları sizinkilerle birleştirildiğinden kitaplık bağımlılığı tarafından sağlanan kaynaklar da buna dahildir). Android çerçevesinden bir kaynak kullanmak istediğinizde geçerli olan tek paket adı
android'dir.type,
stringveyadrawablegibi bir kaynak türüdür ve name, 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ış başlıklı makaleyi okuyun.
Bunun yerine bir temada tanımlanan 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 kaçış için çift ters eğik çizgi (
\\) kullanın. Örneğin, yeni satır için\\nveya Unicode karakteri için\\uxxxxkullanın.
Manifest öğeleri referansı
Aşağıdaki tabloda, AndroidManifest.xml dosyasındaki tüm geçerli öğeler için referans dokümanlarının bağlantıları verilmiştir.
<action> |
Intent filtresine işlem ekler. |
<activity> |
Bir etkinlik bileşeni tanımlar. |
<activity-alias> |
Bir etkinlik için takma ad bildirir. |
<application> |
Uygulamayı bildirir. |
<category> |
Intent filtresine kategori adı ekler. |
<compatible-screens> |
Uygulamanın uyumlu olduğu her ekran yapılandırmasını belirtir. |
<data> |
Intent 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ı bildirir. |
<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 verilerin bir öğesi 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 ya da özelliklerine erişimi sınırlamak için kullanılabilecek bir güvenlik izni bildirir. |
<permission-group> |
İlgili izinlerin mantıksal bir gruplandırması için bir ad bildirir. |
<permission-tree> |
Bir izin ağacının temel adını bildirir. |
<provider> |
İçerik sağlayıcı bileşenini bildirir. |
<queries> |
Uygulamanızın erişmek istediği diğer uygulamaları bildirir. Paket görünürlüğü filtreleme ile ilgili kılavuzda daha fazla bilgi edinebilirsiniz. |
<receiver> |
Yayın alıcı bileşenini bildirir. |
<service> |
Bir hizmet bileşeni tanımlar. |
<supports-gl-texture>
| Uygulamanın desteklediği tek bir GL doku sıkıştırma biçimini bildirir. |
<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 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 bildirir. |
<uses-library> |
Uygulamanın bağlanması gereken paylaşılan kitaplığı belirtir. |
<uses-native-library> |
Uygulamanın bağlanması gereken, tedarikçi 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 belirli bir izin istediğini belirtir ancak bu yalnızca uygulama Android 6.0 (API düzeyi 23) veya sonraki sürümlerin yüklü olduğu bir cihaza yüklüyse geçerlidir. |
<uses-sdk> |
Bir uygulamanın Android platformunun bir veya daha fazla sürümüyle uyumluluğunu bir API düzeyi tam sayısı aracılığıyla ifade etmenizi sağlar. |
Sınırlar
Aşağıdaki etiketlerin bir manifesto dosyasında bulunma 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 uzunluk sınırı vardır:
| Özellik | Sınır |
|---|---|
name |
1024 |
versionName |
1024 |
host |
255 |
mimeType |
255 |
Örnek manifesto dosyası
Aşağıdaki XML, uygulama için iki etkinlik bildiren 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>