AndroidManifest Permissions: asosiy tushunchalar, deklaratsiya va ruxsatnoma turlari

Muallif: IT Sectr Nashr etilgan: 2026-05-21 O'qish vaqti: 10 daq

AndroidManifest Permissions — bu AndroidManifest.xml faylidagi ruxsatnoma deklaratsiyalari bo‘lib, ular ilovaning qaysi tizim resurslari va ma’lumotlariga kirish huquqini belgilaydi. Android har bir ruxsatnomani tegishli API dan foydalanishdan oldin manifestda ko‘rsatishni talab qiladi: kameradan va geolokatsiyadan SMS yuborish va kontaktlarga kirishgacha. Android Developer Documentation ga ko‘ra, har bir ruxsatnoma to‘rt himoya darajasidan biriga bo‘linadi: normal, dangerous, signature va special.

Asosiy ma’lumotlar

  • AndroidManifest.xml — barcha ilova ruxsatnomalarining deklaratsiyasi bo‘lgan manifest fayli
  • Himoya darajalari — normal, dangerous, signature, special turli so‘rov mexanizmlari bilan
  • Runtime Permission — dangerous ruxsatnomalari bajarish vaqtida so‘rov talab qiladi (Android 6+)
  • Declare vs Request — manifestda deklaratsiya majburiy, ammo dangerous qo‘shimcha kod so‘rovini talab qiladi
  • Guruhlar — ruxsatnomalar guruhlarga birlashtirilgan, biriga rozilik butun guruhga kirish imkonini beradi

AndroidManifest Permissions nima?

AndroidManifest Permissions — bu Android ilovalarning himoyalangan ma’lumotlar va tizim funksiyalariga kirishini boshqaruvchi xavfsizlik mexanizmidir. Har bir ilova AndroidManifest.xml faylida <uses-permission> elementi yordamida kerakli ruxsatnomalarni deklaratsiya qilishi kerak. Deklaratsiyasiz tegishli API ni chaqirish SecurityException xavfsizlik xatosi bilan tugaydi.

Android ruxsatnoma modeli bir necha evolyutsiya bosqichidan o‘tdi. Android 6.0 (API 23) dan oldin barcha ruxsatnomalar o‘rnatish vaqtida berilardi — foydalanuvchi to‘liq ro‘yxatni ko‘rar va ilova o‘rnatishga rozilik berar yoki rad etardi. Android 6.0 dan boshlab dangerous darajasidagi ruxsatnomalar bajarish vaqtida (Runtime Permissions) so‘raladi, bu foydalanuvchiga moslashuvchanroq nazorat beradi.

Ruxsatnomalar to‘rt himoya darajasiga bo‘linadi: normal (o‘rnatish vaqtida avtomatik beriladi), dangerous (bajarish vaqtida so‘rov talab qiladi), signature (faqat bir xil sertifikat bilan imzolangan ilovalar uchun mavjud) va special (sozlamalarda alohida yoqishni talab qiladi). Har bir daraja o‘zining berish va qaytarib olish mexanizmiga ega.

Google I/O 2024 ga ko‘ra, Android 15 da aniqroq ruxsatnomalar joriy etilishi rejalashtirilgan — foydalanuvchi butun media kutubxonasiga emas, balki faqat ma’lum fayllarga kirishni ta’minlashi mumkin bo‘ladi. Bu Androidning sukut bo‘yicha taqdim etiladigan ma’lumotlar hajmini minimallashtirish tendentsiyasini davom ettiradi.

iOS ruxsatnoma modelidan farqi

Barcha ruxsatnomalar bajarish vaqtida (runtime) so‘raladigan iOS dan farqli o‘laroq, Android ruxsatnomalarni o‘rnatish (install-time) va bajarish (runtime) ga ajratadi. Normal daraja o‘rnatish vaqtida foydalanuvchiga xabardor qilmasdan avtomatik beriladi. Dangerous daraja iOS dagi kabi aniq dialog oynasini talab qiladi.

Yana bir farq: Android da ruxsatnomalar guruhlarga (permission groups) birlashtirilgan. Agar foydalanuvchi kameraga kirishga rozilik bersa, ilova avtomatik ravishda mikrofon ga kirish huquqini oladi — ular bir xil MICROPHONE guruhida. iOS da har bir ruxsatnoma guruhdan qat’iy nazar alohida so‘raladi.

Android versiyalari bo‘yicha ruxsatnomalar evolyutsiyasi

Android versiyasiRuxsatnoma modelidagi o‘zgarish
Android 1.0–5.xBarcha ruxsatnomalar o‘rnatish vaqtida beriladi (install-time)
Android 6.0 (API 23)Dangerous darajasi uchun Runtime Permissions joriy etildi
Android 10 (API 29)Scoped Storage — fayl tizimiga kirish cheklangan
Android 11 (API 30)Ruxsatnomalarni avtomatik qaytarish — ishlatilmagan ruxsatnomalar qaytariladi
Android 14 (API 34)Media kirishi uchun Runtime ruxsatnomalari (foto, video, audio)

Ruxsatnomalarning qanday turlari mavjud

Android ruxsatnomalar uchun to‘rt himoya darajasini (protection levels) belgilaydi, har biri o‘ziga xos berish qoidalariga ega. Har bir darajani batafsil ko‘rib chiqamiz.

Normal Permissions (install-time)

Normal ruxsatnomalar ilova o‘rnatilayotganda foydalanuvchiga xabar bermasdan yoki so‘rovsiz avtomatik beriladi. Ular foydalanuvchi maxfiyligiga tahdid solmaydigan past xavfli funksiyalarga kirishni qamrab oladi: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, BLUETOOTH. Foydalanuvchi rozilik dialogini ko‘rmaydi — ruxsatnoma o‘rnatish fakti bilan berilgan hisoblanadi.

Ishlab chiquvchi normal ruxsatnomalar uchun kodda so‘rovni qayta ishlashi shart emas — ularni manifestda deklaratsiya qilish kifoya. Biroq, Android 12+ da Google Play dan o‘rnatishda foydalanuvchi barcha normal ruxsatnomalar ro‘yxati bilan “Ruxsatnomalar” yorlig‘ini ko‘radi, bu shaffoflikni oshiradi. Statista (2024) ga ko‘ra, Google Play dagi ilovalarning 90% dan ortig‘i eng keng tarqalgan normal ruxsatnoma INTERNET dan foydalanadi.

Dangerous Permissions (runtime)

Dangerous ruxsatnomalar maxfiylikni buzishi mumkin bo‘lgan ma’lumotlar va funksiyalarga kirishni qamrab oladi: kamera, mikrofon, geolokatsiya, kontaktlar, SMS, telefon, kalendar, tana sensorlari. Bu ruxsatnomalar ikki bosqichli mexanizmni talab qiladi: manifestda deklaratsiya + ActivityCompat.requestPermissions() orqali bajarish vaqtida so‘rov.

Foydalanuvchi dangerous ruxsatnomasini berishni rad etishi mumkin va ilova bu stsenariyni to‘g‘ri qayta ishlashi kerak. Android 11+ da agar foydalanuvchi ikki marta rad etgan bo‘lsa, keyingi so‘rovlar tizim dialogini ko‘rsatmaydi — tizim avtomatik ravishda DENIED qaytaradi. Bunday holda foydalanuvchini sozlamalarga yo‘naltirish kerak.

Signature va Special Permissions

Signature darajasi — agar ilova tizim yoki ruxsatnomani belgilagan boshqa ilova bilan bir xil sertifikat bilan imzolangan bo‘lsa, ruxsatnoma avtomatik beriladi. Tizim va korporativ ilovalar uchun ishlatiladi. Misol: BIND_ACCESSIBILITY_SERVICE — faqat tizim ilovalari uchun mavjud.

Special darajasi (SYSTEM_ALERT_WINDOW, WRITE_SETTINGS, REQUEST_INSTALL_PACKAGES, MANAGE_EXTERNAL_STORAGE) — tizim sozlamalari orqali foydalanuvchining alohida harakatini talab qiladi. Ilova Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION) bilan sozlamalar sahifasini ochishi mumkin. Google Play special ruxsatnomalaridan foydalanishni cheklaydi va nashr qilishda formada asoslashni talab qiladi.

Runtime Permission: dangerous ruxsatnomalari bilan ishlash

Android 6.0 dan boshlab barcha dangerous ruxsatnomalari bajarish vaqtida so‘rov talab qiladi. Kotlin da runtime permissions bilan to‘liq ishlash siklini ko‘rib chiqamiz.

Ruxsatnomani tekshirish va so‘rash

Dangerous ruxsatnomasini talab qiladigan API ni chaqirishdan oldin har doim joriy holatni ContextCompat.checkSelfPermission() orqali tekshiring. Agar holat PERMISSION_GRANTED bo‘lsa — API chaqirilishi mumkin. Agar PERMISSION_DENIED bo‘lsa — ActivityResultContract RequestPermission (AndroidX) yoki eskirgan requestPermissions() orqali ruxsatnoma so‘ralishi kerak.

Bir vaqtning o‘zida bir nechta ruxsatnomani so‘rash uchun ActivityResultContracts.RequestMultiplePermissions dan foydalanish tavsiya etiladi. Google bog‘liq ruxsatnomalarni (masalan, video yozish uchun kamera + mikrofon) bitta dialogda guruhlashni tavsiya qiladi, shunda foydalanuvchi so‘rovning to‘liq kontekstini ko‘radi.

kotlin
import android.Manifest
import android.content.pm.PackageManager
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat

class CameraActivity : AppCompatActivity() {
    private val requestPermissionLauncher =
        registerForActivityResult(
            ActivityResultContracts.RequestPermission()
        ) { isGranted: Boolean ->
            if (isGranted) {
                openCamera()
            } else {
                explainWhyPermissionNeeded()
            }
        }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        checkCameraPermission()
    }

    private fun checkCameraPermission() {
        when {
            ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA
            ) == PackageManager.PERMISSION_GRANTED -> {
                openCamera()
            }
            shouldShowRequestPermissionRationale(
                Manifest.permission.CAMERA
            ) -> {
                showRationale()
            }
            else -> {
                requestPermissionLauncher.launch(
                    Manifest.permission.CAMERA
                )
            }
        }
    }
}

“Don’t ask again” rad etishni qayta ishlash

Foydalanuvchi ruxsatnomani ikki marta rad etsa, Android so‘rovni “Never ask again” holatiga o‘tkazadi. Bunday holda shouldShowRequestPermissionRationale() false qaytaradi va tizim dialogi ko‘rsatilmaydi. Ilova foydalanuvchini Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) orqali tizim sozlamalariga yo‘naltirishi kerak.

Muhim: birinchi rad etishdan so‘ng darhol sozlamalarni ochishni taklif qiladigan dialog ko‘rsatmang — bu tajovuzkor xatti-harakat sifatida qabul qilinadi. Tushuntirishni ko‘rsatish kerakligini aniqlash uchun shouldShowRequestPermissionRationale() dan foydalaning. Material Design Guidelines faqat “Sozlamalarni och” tugmasi emas, balki kirish qiymatini tushuntiruvchi ekranni ko‘rsatishni tavsiya qiladi.

kotlin
private fun openAppSettings() {
    Intent(
        Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
        Uri.fromParts("package", packageName, null)
    ).also { intent ->
        startActivity(intent)
    }
}

private fun showPermissionSettings() {
    AlertDialog.Builder(this)
        .setTitle("Kameraga kirish")
        .setMessage("Sozlamalarda kameraga kirishga ruxsat bering, "
            + "profil uchun suratga olish uchun")
        .setPositiveButton("Sozlamalarni och") { _, _ ->
            openAppSettings()
        }
        .setNegativeButton("Bekor qilish", null)
        .show()
}

AndroidManifest.xml da ruxsatnomalarni deklaratsiya qilish

AndroidManifest.xml fayli ilova ishlatadigan har bir ruxsatnoma uchun <uses-permission> elementini o‘z ichiga oladi. Ruxsatnomalar <manifest> darajasida <application> elementidan oldin e’lon qilinadi.

Deklaratsiya sintaksisi

Har bir ruxsatnoma android:name atributi bilan to‘liq ruxsatnoma nomini ko‘rsatuvchi alohida <uses-permission> elementi sifatida e’lon qilinadi. Muayyan Android versiyalarida paydo bo‘lgan ruxsatnomalar uchun maxSdkVersion atributidan foydalanib, deklaratsiyani faqat kerakli versiyalar bilan cheklang — bu moslikni yaxshilaydi.

Masalan, WRITE_EXTERNAL_STORAGE ruxsatnomasi Android 10+ (Scoped Storage) da kerak emas, shuning uchun maxSdkVersion=“28” (Android 9) belgilang. Bu yangi versiyalarda foydalanuvchilardan keraksiz savollarning oldini oladi. Android Studio Lint orqali tavsiya etilgan maxSdkVersion haqida ogohlantiradi.

xml
<!-- AndroidManifest.xml -->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Normal permissions (install-time) -->
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!-- Dangerous permissions (runtime) -->
    <uses-permission
        android:name="android.permission.CAMERA" />
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!-- Legacy storage permission limited to API 28 and below -->
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="28" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <application>
        <!-- ... -->
    </application>
</manifest>

Filtrlash uchun <uses-feature> dan foydalanish

<uses-feature> elementi ilova ma’lum bir apparatni (kamera, GPS, NFC) talab qilishini belgilaydi. android:required=“false” atributi ilovani ushbu apparatsiz qurilmalarga o‘rnatish imkonini beradi — mavjudlik tekshiruvi kodda amalga oshiriladi. Agar required=“true” bo‘lsa, Google Play ilovani filtrlaydi va u mos bo‘lmagan qurilmalar uchun mavjud bo‘lmaydi.

Barcha apparat funksiyalari uchun required=“false” belgilash va mavjudlikni PackageManager.hasSystemFeature() orqali dasturiy tekshirish tavsiya etiladi. Bu ilovangiz auditoriyasini kengaytiradi. Yagona istisno — funksiya ilova ishlashi uchun muhim bo‘lgan holat (GPSsiz taksi buyurtma ilovasi ma’nosiz).

Eng yaxshi amaliyotlar va xatolar

Ruxsatnomalar bilan to‘g‘ri ishlash Android ilovasi sifatining asosiy jihatidir. Asosiy tavsiyalar va odatiy xatolarni ko‘rib chiqamiz.

So‘raladigan ruxsatnomalarni minimallashtirish

Faqat ilova ishlashi uchun haqiqatan zarur bo‘lgan ruxsatnomalarni so‘rang. Har bir qo‘shimcha ruxsatnoma o‘rnatish konversiyasini kamaytiradi va rad etishlar sonini oshiradi. Google Play Console foydalanuvchilarning qanchasi ruxsatnomalar to‘plami tufayli o‘rnatishdan voz kechganini ko‘rsatadi. AppBrain (2024) ga ko‘ra, 10+ dangerous ruxsatnomasi bo‘lgan ilovalar 35% kamroq o‘rnatishga ega.

Muntazam ravishda ruxsatnomalar ro‘yxatini ko‘rib chiqing. Foydalanilmaydiganlarini olib tashlang, ayniqsa ba‘zi ruxsatnomalar ixtiyoriy bo‘lgan yangi Android versiyalariga o‘tishda. Masalan, Android 13+ da foto tanlash (ActivityResultContracts.PickVisualMedia) paydo bo‘lishi bilan media kutubxonasiga kirish READ_MEDIA_IMAGES dangerous ruxsatnomasisiz olinishi mumkin.

So‘rovdan oldin rationale ko‘rsatish

Dangerous ruxsatnomasini so‘rashdan oldin foydalanuvchiga bu ruxsatnoma nima uchun kerakligi va qanday qiymat berishini tushuntiruvchi ekranni ko‘rsating. Material Design belgi, qisqa matn va “Davom etish” tugmasi bilan bottom sheet yoki dialog oynasidan foydalanishni tavsiya qiladi. Rationale to‘g‘ridan-to‘g‘ri so‘rov bilan solishtirganda rozilikni 20–30% ga oshiradi.

launch() chaqirishdan oldin shouldShowRequestPermissionRationale() ni tekshiring. Agar true bo‘lsa — rationale ko‘rsating. Agar false bo‘lsa — yoki ruxsatnoma allaqachon berilgan yoki foydalanuvchi butunlay rad etgan (never ask again). Oxirgi holatda so‘rovni takrorlash o‘rniga “Sozlamalarni och” tugmasini ko‘rsating.

Barcha ruxsatnoma stsenariylarini test qilish

Barcha mumkin bo‘lgan stsenariylarni test qiling: ruxsatnomani berish, rad etish, butunlay rad etish, sozlamalarda ruxsatnomani qaytarib olish, ruxsatnomalarni qaytarish (Android 11+ auto-reset). Har bir stsenariy crash va ma’lumot yo‘qotishisiz qayta ishlanishi kerak. Android Testing Guide testlarni avtomatlashtirish uchun TestPermission kutubxonasidan foydalanishni tavsiya qiladi.

Foydalanuvchi ilova ishlayotganda ruxsatnomani qaytarib olgan stsenariyga alohida e’tibor bering (kichraytirilgan ilova → Sozlamalar → qaytarib olish). Ilovaga qaytganda barcha ruxsatnomalarni onResume() orqali qayta tekshiring. Ruxsatnoma holatini keshlashga ishonmang — foydalanuvchi ularni istalgan vaqtda o‘zgartirishi mumkin.

Odatiy xatolar

  • checkSelfPermission bilan oldindan tekshirmasdan ruxsatnoma so‘rash — keraksiz dialogga sabab bo‘ladi
  • shouldShowRequestPermissionRationale ni e’tiborsiz qoldirish — birinchi rad etishdan keyin UX ni yomonlashtiradi
  • Kontekstsiz ruxsatnoma so‘rash (faqat “Kirishga ruxsat berilsinmi?”) — rozilikni kamaytiradi
  • Android 10+ da maxSdkVersion siz WRITE_EXTERNAL_STORAGE ishlatish — keraksiz so‘rov
  • onResume da ruxsatnomalarni tekshirmaslik — sozlamalarda ruxsatnomani qaytarib olishni o‘tkazib yuborish

Tez-tez so‘raladigan savollar

Agar SDK ruxsatnoma talab qilsa, uni deklaratsiya qilish kerakmi?

Ha, agar SDK o‘z manifestiga ruxsatnomani kiritgan bo‘lsa, u qurish vaqtida ilova manifesti bilan birlashtiriladi. SDK ning keraksiz ruxsatnomasini AndroidManifest.xml da tools:node=“remove” bilan o‘chirib qo‘yishingiz mumkin.

Agar ruxsatnoma rad etilishini qayta ishlamasam nima bo‘ladi?

Ruxsatnomasiz API chaqiruvi SecurityException ga sabab bo‘lib, ilovaning ishdan chiqishiga olib keladi. Har doim tegishli API dan foydalanishdan oldin ruxsatnoma holatini tekshiring va rad etishni to‘g‘ri qayta ishlang.

Ishlab chiqish jarayonida ruxsatnomalarni qanday qaytarish mumkin?

Qurilma sozlamalarida: Sozlamalar → Ilovalar → [sizning ilovangiz] → Ruxsatnomalar. Barcha ruxsatnomalarni qaytarish uchun adb buyrug‘idan foydalaning: adb shell pm reset-permissions.

Activity siz ruxsatnoma so‘rash mumkinmi?

Ha, Fragment yoki Service da ActivityResultLauncher yordamida. Biroq so‘rov dialogi har doim Activity UI kontekstini talab qiladi. Service uchun so‘rov bilan Activity ochadigan Intent bilan Notification ko‘rsatishingiz mumkin.

Ruxsatnomalar uchun maxSdkVersion nima uchun kerak?

Masalan, WRITE_EXTERNAL_STORAGE Android 10+ (Scoped Storage) da kerak emas. android:maxSdkVersion=“28” belgilash orqali siz yangi versiyalarda ruxsatnoma deklaratsiyasini istisno qilasiz, bu moslikni yaxshilaydi va so‘raladigan ruxsatnomalar ro‘yxatini kamaytiradi.

Xulosa

  • AndroidManifest Permissions — Android da tizim resurslariga majburiy kirish deklaratsiyalari
  • 4 himoya darajasi — normal, dangerous, signature, special turli berish mexanizmlari bilan
  • Runtime Permissions — dangerous ruxsatnomalari bajarish vaqtida so‘rov talab qiladi (Android 6+)
  • Ruxsatnoma guruhlari — guruhdagi bitta ruxsatnomaga rozilik guruhdagi hammasiga kirishni beradi
  • Rationale — so‘rovdan oldin tushuntirish ko‘rsatish rozilikni 20–30% ga oshiradi
  • Minimallashtirish — faqat kerakli ruxsatnomalarni so‘rang va maxSdkVersion dan foydalaning
  • Har doim API chaqirishdan oldin ruxsatnoma holatini tekshiring va barcha rad etish stsenariylarini qayta ishlang

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.

Loyihani muhokama qilish

Shuningdek o'qing