Her uygulama projesinin, proje kaynak grubunun kökünde tam olarak bu ada sahip bir AndroidManifest.xml
dosyası olmalıdır.
Manifest dosyası, Android derleme araçları, Android işletim sistemi ve Google Play için uygulamanızla ilgili temel bilgileri açıklar.
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, 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. 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 gerekli manifest öğelerinin çoğu uygulamanızı derlediğiniz sırada 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 ilgili XML öğesini tanımlayın:
<activity>
Activity
alt sınıflarının her biri için<service>
Service
alt sınıflarının her biri için<receiver>
BroadcastReceiver
alt sınıflarının her biri için<provider>
ContentProvider
alt sınıflarının her biri için
Bu bileşenlerden herhangi birini manifest dosyasında belirtmeden alt sınıfa alı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>
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
özelliğindeki uygulama ad alanının adı 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, hizmetleri ve yayın alıcıları intent'ler 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 intent gönderdiğinde sistem, her uygulamanın manifest dosyasında bulunan intent filtresi beyanlarına 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. 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. Bu simge varsayılan olarak üst bileşen için tanımlanan <activity>
veya <application>
öğesinden 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'te <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, 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
Manifest dosyası, uygulamanızın hangi donanım veya yazılım özelliklerini gerektirdiğini ve buna bağlı olarak hangi cihaz türleriyle uyumlu olduğunu da belirtebileceğiniz yerdir. 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 olanlardan 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>
Sıralı platform sürümlerinin her biri 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 ilgili mülkler tarafından geçersiz kılındığını unutmayın.
Bu nedenle, Android Studio kullanıyorsanız minSdkVersion
ve targetSdkVersion
değerlerini burada 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 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, 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 kullanılmalıdır. 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ırayla yerleştirilebilir. Bu kuralın iki önemli istisnası vardır:-
<activity-alias>
öğesi, kısaltması 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 varsayılan değerler referans dokümanlarında belirtilir.
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 tek bir öğede birden fazla değer listelenmek yerine öğe 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 (ö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
veyadrawable
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ğ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> |
Bir intent filtresine 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> |
Bir intent 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 izlemenizi sağlayan 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 intent türlerini belirtir. |
<manifest> |
AndroidManifest.xml dosyasının kök öğesi. |
<meta-data> |
Üst bileşene sağlanabilecek ek, rastgele veri öğesi için bir 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 gruplaması için bir ad tanımlar. |
<permission-tree> |
İzin ağacının temel adını belirtir. |
<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 hakkında daha fazla bilgi edinmek için kılavuzu 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ı 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 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 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üzeyi tam sayısıyla ifade etmenizi sağlar. |
Sınırlar
Aşağıdaki etiketlerin manifest dosyasında görünme 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 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>