Her uygulama projesinin, proje kaynağı grubunun kökünde tam olarak bu ada sahip bir AndroidManifest.xml
dosyası olmalıdır.
Manifest dosyasında Android derleme araçları, Android işletim sistemi ve Google Play için uygulamanızla ilgili temel bilgiler açıklanmaktadır.
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, bu uygulamanın içeriğine erişmek isteyen diğer uygulamaların sahip olması gereken tüm izinleri de tanımlar. İzinler hakkında daha fazla bilgi için aşağıdaki bölümü inceleyin.
- 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 uygulamanızı derlediğiniz sırada gerekli manifest öğ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 buna karşılık gelen bir XML öğesi 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- Her bir
BroadcastReceiver
alt sınıfı için<receiver>
<provider>
ContentProvider
alt sınıflarının her biri için
Bu bileşenlerden herhangi birini, manifest dosyasında bildirmeden alt sınıflara ayırı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>
Bununla birlikte, name
değerindeki ilk karakter bir noktaysa modül düzeyindeki build.gradle
dosyasının namespace
özelliğinden alınan uygulama 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ü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, hizmetler ve yayın alıcıları intentler 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 bir intent gönderdiğinde sistem, her bir uygulamanın manifest dosyasındaki amaç filtresi bildirimlerine göre niyeti 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. Varsayılan olarak bu simge, üst bileşen (<activity>
veya <application>
öğesi) için bildirilen simgeden 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 dosyasında <uses-permission>
öğesiyle bildirmeniz gerekir. İzin verilirse uygulama, korumalı özellikleri kullanabilir. Aksi halde 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
Uygulamanızın ne tür donanım veya yazılım özelliklerine ihtiyaç duyduğunu ve buna bağlı olarak, uygulamanızın hangi cihaz türleriyle uyumlu olduğunu da manifest dosyasında beyan edebilirsiniz. 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 sorunlardan 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>
Birbirini izleyen 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ızda <uses-sdk>
etiketi ve minSdkVersion
özelliği bulunmalıdır.
Ancak <uses-sdk>
öğesindeki özelliklerin, build.gradle
dosyasındaki karşılık gelen mülkler tarafından geçersiz kılındığını unutmayın.
Dolayısıyla, Android Studio kullanıyorsanız bunun yerine minSdkVersion
ve targetSdkVersion
değerlerini 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 edinmek için derlemenizi nasıl yapılandıracağınızı öğrenin.
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 geçmelidir. 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ırada yerleştirilebilir. Bu kuralın iki önemli istisnası vardır:-
<activity-alias>
öğesi, kısaltması olduğu<activity>
öğesini izlemelidir. -
<application>
öğesi,<manifest>
öğesinin 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.
Tamamen isteğe bağlı özellikler için referans belgelerinde varsayılan değerler belirtilmiştir.
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 öğe, tek bir öğe içinde birden fazla değer listelenmesi yerine neredeyse her zaman tekrarlanır.
Örneğin, bir 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ı ö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ğerinin dize olduğu durumlarda karakterlere çıkış yapmak için çift ters eğik çizgi (
\\
) kullanın. Örneğin, yeni satır için\\n
, Unicode karakteri için\\uxxxx
kullanabilirsiniz.
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 bildirir. |
<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şme izni olan 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 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 gruplandırması için bir ad tanımlar. |
<permission-tree> |
İzin ağacı için temel adı tanımlar. |
<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 ile ilgili kılavuzda daha fazla bilgi edinin. |
<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ı 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 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 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ü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 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>