AndroidManifest.xml har bir Android ilovasining majburiy konfiguratsiya fayli bo'lib, uning komponentlari, ruxsatlari va metama'lumotlarini tavsiflaydi. Android tizimi bu faylni har bir ilovani o'rnatish va ishga tushirishda o'qiydi. Android Developers, 2025 ma'lumotlariga ko'ra, to'g'ri manifest bo'lmasa, ilova qurilmaga o'rnatilmaydi. AndroidManifest.xml operatsion tizim uchun Activity, Service, BroadcastReceiver va ContentProvider-ni ro'yxatdan o'tkazadi.
Asosiy ma'lumotlar
AndroidManifest.xml XML formatidagi asosiy konfiguratsiya fayli bo'lib, har bir Android loyihasi uni app/src/main katalogida saqlashi shart. Android tizimi uni har qanday ilova kodini ishga tushirishdan oldin — APK-ni o'rnatish vaqtida tahlil qiladi. Agar manifestda sintaktik xato bo'lsa yoki majburiy e'lon yo'q bo'lsa, o'rnatish xato xabari bilan to'xtatiladi.
Fayl ilovaning to'liq e'lonini o'z ichiga oladi: barcha komponentlar ro'yxati (Activity, Service, BroadcastReceiver, ContentProvider), so'raladigan ruxsatlar, minimal SDK versiyasi, apparat talablari va mavzu/uslub konfiguratsiyasi. Tizim yoki boshqa ilovalar tomonidan chaqirilishi mumkin bo'lgan har bir komponent manifestda aniq e'lon qilinishi kerak. Bu xavfsizlik talabi: aniq e'lon bo'lmasa, komponent chaqiruv uchun mavjud emas.
To'g'ri sozlangan manifest bo'lmasa, ilova Google Play yoki yonma-yon o'rnatish orqali o'rnatilmaydi. Tizim APK-ni tahlil qilish bosqichida manifestni tekshiradi va xatolar bo'lsa, o'rnatishni rad etadi. Google Play shuningdek, xavfli konfiguratsiyalar uchun manifestni skanerdan o'tkazadi: intent-filtersiz komponentda exported=true bo'lsa, ogohlantirish beriladi, targetSdk 34+ uchun majburiy ruxsatlar yo'q bo'lsa, nashr etish bloklanadi. Shuning uchun manifest tuzilishini tushunish Android dasturchisi uchun majburiy mahoratdir.
Android ilovasining har bir komponenti manifestda aniq ro'yxatdan o'tkazilishi kerak. Bu platformaning barcha to'rt turdagi komponentlar uchun majburiy talabidir. Ro'yxatdan o'tkazilmasa, komponent tizim tomonidan yaratilmaydi va uni ishga tushirish urinishi ActivityNotFoundException yoki shunday istisnoga olib keladi. Komponentlar application tegi ichida ularning ishiga ta'sir qilmaydigan tartibda ro'yxatdan o'tkaziladi.
activity tegi ilovaning ekranini ro'yxatdan o'tkazadi. exported atributi boshqa ilovalar ushbu Activity-ni ishga tushirishi mumkinligini aniqlaydi. Android 12 dan boshlab, intent-filter mavjud bo'lganda exported yo'qligi kompilyatsiya xatosiga olib keladi — bu xavfsizlik talabi. Kirish nuqtasi MAIN action va LAUNCHER category bilan intent-filter orqali o'rnatiladi. Har bir Activity sinfning to'liq yoki nisbiy nomiga mos keladigan noyob android:name ga ega bo'lishi kerak.
<activity
android:name=".MainActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
service tegi fon xizmatini belgilaydi. Android 8 dan boshlab, fon xizmatlari qattiq cheklovlarga ega: foreground service foydalanuvchiga ko'rinadigan belgili majburiy bildirishnomani talab qiladi, bound service esa faqat ulangan mijoz mavjud bo'lganda ishlaydi. Bildirishnomasiz fonda ishlaydigan xizmatlar ilova fon rejimiga o'tgandan keyin bir necha daqiqada tizim tomonidan avtomatik tugatiladi. Uzoq muddatli vazifalar uchun Service o'rniga WorkManager dan foydalaning.
<service
android:name=".SyncService"
android:exported="false"
android:foregroundServiceType="dataSync" />
receiver tegi tizim yoki maxsus translyatsiya xabarlarini qabul qiluvchini e'lon qiladi. Android 8 dan boshlab, ko'pchilik noaniq translyatsiyalar manifestda statik e'lon qilingan qabul qiluvchilarga endi yetkazilmaydi. Buning o'rniga qabul qiluvchilarni kodda Context.registerReceiver orqali dinamik ro'yxatdan o'tkazish tavsiya etiladi. Istisno — BOOT_COMPLETED kabi hali ham manifestda statik ro'yxatdan o'tkazishni talab qiladigan ba'zi tizim translyatsiyalaridir.
<receiver
android:name=".ConnectivityReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Android-dagi har bir xavfli ruxsat manifestda uses-permission tegi orqali e'lon qilinishi kerak. Android 6 dan boshlab, xavfli ruxsatlar ish vaqtida foydalanuvchi bilan dialog orqali so'raladi, ammo manifestdagi e'lon majburiy bo'lib qoladi. Usiz requestPermissions metodi SecurityException istisnosini chiqaradi. INTERNET va ACCESS_NETWORK_STATE kabi oddiy darajadagi ruxsatlar o'rnatish vaqtida avtomatik beriladi.
| Ruxsat | Maqsad |
|---|---|
| CAMERA | Surat va video uchun qurilma kamerasiga kirish |
| ACCESS_FINE_LOCATION | GPS va tarmoq orqali aniq geolokatsiya |
| RECORD_AUDIO | Qurilma mikrofonidan ovoz yozish |
| READ_CONTACTS | Telefon daftarchasidan kontaktlarni o'qish |
| POST_NOTIFICATIONS | Android 13+ da bildirishnomalarni yuborish |
uses-permission-sdk-23 tegi faqat Android 6.0+ da kerakli ruxsatlarni ko'rsatadi. Bu mavjud bo'lmagan ruxsatlarni so'ramasdan eski versiyalar bilan moslikni saqlashga imkon beradi. Masalan, POST_NOTIFICATIONS faqat Android 13+ da mavjud, shuning uchun uni uses-permission-sdk-33 orqali ko'rsatish kerak, aks holda eski qurilmalarda noma'lum ruxsat xatosi yuz beradi. uses-permission-dagi maxSdkVersion atributi ilovani yangi Android versiyalarida yangilashda keraksiz ruxsatlarni avtomatik bekor qilish imkonini beradi.
Oddiy darajadagi ruxsatlar (INTERNET, ACCESS_NETWORK_STATE) o'rnatish vaqtida avtomatik beriladi va ish vaqtida so'rovni talab qilmaydi. Ular ham uses-permission orqali e'lon qilinadi, lekin foydalanuvchiga dialogda ko'rsatilmaydi. Boshqa ilovalardan ilova komponentlariga kirishni nazorat qilish uchun permission-protected components mexanizmi qo'llaniladi: Activity yoki Service darajasida maxsus ruxsat belgilanishi mumkin, u komponent tashqaridan chaqirilganda tizim tomonidan tekshiriladi. Bu jarayonlararo aloqa uchun qo'shimcha xavfsizlik darajasini ta'minlaydi.
Manifestdagi intent-filter tegi komponent qanday noaniq intentlarni qayta ishlashi mumkinligini e'lon qiladi. Bu Android tizim yoki maxsus harakatlarni ilova bilan bog'laydigan mexanizmdir. Intent filter uch elementdan iborat: action (harakat), category (kategoriya) va data (ma'lumotlar). Uchalasi komponent qanday intentlarni qabul qilishi kerakligini aniq tasvirlash uchun birlashtirilishi mumkin. Tizim eng aniq filtr asosida mos komponentni tanlaydi.
<activity android:name=".DeepLinkActivity">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="itsectr.com"
android:pathPrefix="/app" />
</intent-filter>
</activity>
autoVerify atributi Android App Links tekshiruvini faollashtiradi: tizim domen egaligini tasdiqlash uchun server bilan bog'lanadi. Tekshiruvsiz chuqur havolalar standart tanlash dialogi orqali ishlaydi, bunda foydalanuvchi havolani qaysi ilova bilan ochishni tanlaydi. Muvaffaqiyatli tekshiruvdan so'ng havolalar dialogsiz to'g'ridan-to'g'ri ilovada ochiladi. Google Search Console ham deep link-larni indekslash va qidiruv natijalarida ko'rsatish uchun autoVerify-dan foydalanadi.
action.VIEW va DEFAULT va BROWSABLE kategoriyalari bo'lgan filtrlar brauzer, elektron pochta va boshqa ilovalardan kelgan havolalarni qayta ishlaydi. Bu Android-da chuqur havolalarni amalga oshirishning asosiy mexanizmidir. myapp:// kabi maxsus URL sxemalarini qo'llab-quvvatlash uchun hostsiz scheme ni ko'rsatish kifoya. Biroq, Google maxsus sxemalar o'rniga HTTPS chuqur havolalaridan foydalanishni tavsiya qiladi, chunki ular xavfsizroq va qo'shimcha ruxsatlarni talab qilmaydi. Maxsus sxemalar xuddi shu sxemani ro'yxatdan o'tkazgan har qanday ilova tomonidan ushlanishi mumkin.
Asosiy manifest tegi paket, versiya va SDK atributlarini o'z ichiga oladi. application tegi global sozlamalarni saqlaydi: mavzu, belgi, yorliq va tuzatish bayroqlari. manifest atributlari paket darajasida versiyalashni o'rnatadi, application atributlari esa ilovaning umumiy ko'rinishi va xatti-harakatini belgilaydi. Qiymatlar @-sintaksisi orqali resurslarga havolalar yoki satr literallari bo'lishi mumkin.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itsectr.myapp"
<uses-sdk
android:minSdkVersion="24"
android:targetSdkVersion="34" />
<application
android:label="MyApp"
android:icon="@mipmap/ic_launcher"
android:theme="@style/Theme.MyApp"
android:supportsRtl="true"
android:allowBackup="true">
<!-- Ilova komponentlari -->
</application>
</manifest>
application ichidagi meta-data tegi ixtiyoriy kalit-qiymat juftliklarini saqlashga imkon beradi. Bu uchinchi tomon kutubxonalarini sozlash uchun qulay: API kalitlari, endpoint manzillari va funksionallik bayroqlari. meta-data ma'lumotlari ish vaqtida PackageManager.getApplicationInfo().metaData orqali mavjud. Masalan, Firebase va Google Maps meta-data dan kirish kalitlarini manba kodida qattiq kodlashtirmasdan uzatish uchun foydalanadi. Kalitlar manifestda ko'rsatiladi va turli kompilyatsiya variantlari uchun farq qilishi mumkin.
android:extractNativeLibs atributi APK dan mahalliy kutubxonalarni chiqarishni boshqaradi. targetSdk 34+ bo'lgan ilovalar uchun bu atribut aniq ko'rsatilishi kerak, aks holda kompilyatsiya INSTALL_FAILED_INVALID_APK xatosi bilan muvaffaqiyatsiz bo'lishi mumkin. Agar extractNativeLibs=false bo'lsa, mahalliy kutubxonalar ochilmasdan APK ichida qoladi, bu o'rnatilgan ilova hajmini kamaytiradi, lekin kutubxonalarni yuklash vaqtini oshiradi. Zamonaviy ilovalarning aksariyati uchun foydalanuvchi diskida joyni tejash uchun extractNativeLibs=false tavsiya etiladi.
android:networkSecurityConfig atributi tarmoq xavfsizligi konfiguratsiya faylini belgilashga imkon beradi. Bu, ayniqsa, HTTP trafigi standart sifatida bloklangan targetSdk 28+ bo'lgan ilovalar uchun muhimdir. Konfiguratsiya fayli ishonchli sertifikatlar, HTTP ulanishlari uchun domenlar va sertifikat pinning qoidalarini belgilaydi. Bu eskirgan android:usesCleartextTraffic atributini almashtiradi va OT darajasida ulanish xavfsizligini boshqarish uchun yanada moslashuvchan mexanizmni ta'minlaydi.
android:largeHeap atributi ilova uchun kattalashtirilgan to'p hajmini so'raydi. Standart sifatida Android har bir ilovaga qurilma va OT versiyasiga bog'liq cheklangan miqdordagi xotirani ajratadi. Agar ilova og'ir tasvirlar, video yoki katta ma'lumotlar to'plamlari bilan ishlasa, largeHeap OutOfMemoryError ning oldini olishi mumkin. Biroq, bu atributdan suiiste'mol qilish zararli: katta xotira iste'moli bo'lgan ilova resurslar yetishmaganda tizim tomonidan tezroq tugatiladi. largeHeap dan faqat profillash va zaruratni tasdiqlashdan keyin foydalaning.
Tez-tez beriladigan savollar
Android 12 dan boshlab, intent-filter mavjud bo'lganda exported atributining yo'qligi kompilyatsiya xatosiga olib keladi. Tizim intent-filterga ega har bir komponentning ko'rinishini aniq ko'rsatishni talab qiladi — bu komponentlarning boshqa ilovalar tomonidan tasodifan ochilishining oldini olish uchun xavfsizlik chorasidir. Intent-filtersiz Activity uchun exported standart sifatida false.
Ha, lekin ishga tushirgichda ilovaning bir nechta belgisi ko'rsatiladi. MAIN/LAUNCHER bilan har bir Activity alohida kirish nuqtasiga aylanadi. Bu ilovaning turli bo'limlariga, masalan to'g'ridan-to'g'ri sozlamalarga yoki yangi yozuv yaratishga o'tish uchun yorliqlar yaratishda qo'llaniladi. Har bir belgi tegishli Activity-ni to'g'ridan-to'g'ri ochadi.
Android kutubxonalardan olingan manifestlarni ilovaning asosiy manifesti bilan birlashtiradi. Atributlar ziddiyatida tools:replace yoki tools:node="merge" hal qilish uchun ishlatiladi. Bu mexanizm avtomatik: Gradle orqali kutubxona qo'shilganda uning manifesti asosiy bilan birlashtiriladi. Kutubxonadagi atributni bekor qilish yoki almashtirish uchun tools:node="remove" yoki tools:replace="attributeName" dan foydalaning.
Odatiy sabablar: ruxsat manifestda uses-permission orqali e'lon qilinmagan, oddiy darajadagi ruxsat ishlatilmoqda (ish vaqtida so'rov talab qilmaydi), foydalanuvchi "Boshqa so'rama" ni tanlagan va ruxsat abadiy rad etilgan, yoki targetSdkVersion 23 dan past, bunda ruxsatlar o'rnatish vaqtida so'raladi. Tashxis uchun manifestni va adb logcat orqali jurnallarni tekshiring.
android:debuggable atributi ADB orqali ilovani tuzatishni faollashtiradi. Google Play-dagi reliz kompilyatsiyalari uchun false bo'lishi kerak. Agar reliz kompilyatsiyasida debuggable=true bo'lsa, tajovuzkor ADB orqali ilovaga ulanishi, ma'lumotlarni o'qishi va ixtiyoriy kodni bajarishi mumkin. Google Play avtomatik ravishda debuggable=true bo'lgan kompilyatsiyalarning nashr etilishini bloklaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.