AndroidManifest Permissions: əsas anlayışlar, icazə bəyannaməsi və növləri

Müəllif: IT Sectr Dərc olunub: 2026-05-21 Oxuma vaxtı: 10 dəq

AndroidManifest Permissions — AndroidManifest.xml faylında icazə bəyannamələridir ki, proqramın hansı sistem resurslarına və məlumatlara girişi olduğunu müəyyən edir. Android hər bir icazənin manfestdə göstərilməsini tələb edir: kameradan və geolokasiyadan SMS göndərməyə və kontaktlara girişə qədər. Android Developer Documentation-a görə hər bir icazə dörd qoruma səviyyəsindən birinə bölünür: normal, dangerous, signature və special.

Əsas məqamlar

  • AndroidManifest.xml — proqramın bütün icazələrinin bəyannaməsi olan manifest faylı
  • Qoruma səviyyələri — normal, dangerous, signature, special müxtəlif sorğu mexanizmləri ilə
  • Runtime Permission — dangerous icazələri icra zamanı sorğu tələb edir (Android 6+)
  • Declare vs Request — manifestdə bəyannamə məcburidir, lakin dangerous əlavə kod sorğusu tələb edir
  • Qruplar — icazələr qruplara birləşdirilib, birinə razılıq bütün qrupa giriş verir

AndroidManifest Permissions nədir?

AndroidManifest Permissions — Android-in proqramların qorunan məlumatlara və sistem funksiyalarına girişini idarə edən təhlükəsizlik mexanizmidir. Hər bir proqram AndroidManifest.xml faylında <uses-permission> elementi ilə lazımi icazələri bəyan etməlidir. Bəyannamə olmadan müvafiq API-nin çağırışı SecurityException təhlükəsizlik xətası ilə nəticələnəcək.

Android icazə modeli bir neçə təkamül mərhələsindən keçdi. Android 6.0 (API 23)-dən əvvəl bütün icazələr quraşdırma zamanı verilirdi — istifadəçi tam siyahını görür və razılaşır və ya quraşdırmadan imtina edirdi. Android 6.0-dan başlayaraq dangerous səviyyəli icazələr icra zamanı (Runtime Permissions) sorğulanır ki, bu da istifadəçiyə daha çevik nəzarət verir.

İcazələr dörd qoruma səviyyəsinə bölünür: normal (quraşdırma zamanı avtomatik verilir), dangerous (icra zamanı sorğu tələb edir), signature (eyni sertifikatla imzalanmış proqramlar üçün əlçatandır) və special (parametrlərdə ayrıca aktivləşdirmə tələb edir). Hər səviyyənin öz vermə və geri çağırma mexanizmi var.

Google I/O 2024-ə görə Android 15-də dənəvər icazələrin tətbiqi planlaşdırılır — istifadəçi media kitabxanasının hamısına deyil, yalnız müəyyən fayllarına giriş verə biləcək. Bu Android-in susmaya görə verilən məlumatların həcmini minimuma endirmək tendensiyasını davam etdirir.

iOS icazə modelindən fərq

iOS-dən fərqli olaraq, bütün icazələrin icra zamanı (runtime) sorğulandığı yerdə, Android icazələri quraşdırma (install-time) və icra (runtime) olaraq ayırır. Normal səviyyə quraşdırma zamanı istifadəçiyə bildiriş olmadan avtomatik verilir. Dangerous səviyyə iOS-da olduğu kimi aşkar dialoq tələb edir.

Digər fərq: Android-də icazələr qruplara (permission groups) birləşdirilib. İstifadəçi kameraya girişə razı olarsa, proqram avtomatik olaraq mikrofona giriş əldə edir — onlar eyni MICROPHONE qrupundadır. iOS-da hər icazə qrupdan asılı olmayaraq ayrıca sorğulanır.

Android versiyaları üzrə icazələrin təkamülü

Android versiyasıİcazə modelində dəyişiklik
Android 1.0–5.xBütün icazələr quraşdırma zamanı verilir (install-time)
Android 6.0 (API 23)Dangerous səviyyə üçün Runtime Permissions-in tətbiqi
Android 10 (API 29)Scoped Storage — fayl sisteminə giriş məhdudlaşdırıldı
Android 11 (API 30)İcazələrin avtomatik sıfırlanması — istifadə olunmayan icazələr sıfırlanır
Android 14 (API 34)Media girişi üçün Runtime icazələri (foto, video, audio)

Hansı icazə növləri mövcuddur

Android icazələr üçün dörd qoruma səviyyəsi (protection levels) müəyyən edir, hər biri öz vermə qaydaları ilə. Hər səviyyəni ətraflı nəzərdən keçirək.

Normal Permissions (install-time)

Normal icazələr proqramın quraşdırılması zamanı istifadəçiyə bildiriş və ya sorğu olmadan avtomatik verilir. Bunlar istifadəçinin məxfiliyinə təhlükə yaratmayan aşağı riskli funksiyalara girişi əhatə edir: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, BLUETOOTH. İstifadəçi razılıq dialoqu görmür — icazə quraşdırma faktı ilə verilmiş sayılır.

Tərtibatçı normal icazələr üçün kodda sorğu emal etməlidir — onları manifestdə bəyan etmək kifayətdir. Lakin Android 12+-da Google Play-dən quraşdırma zamanı istifadəçi bütün normal icazələrin siyahısı ilə “İcazələr” sekmesini görür ki, bu da şəffaflığı artırır. Statista (2024)-yə görə Google Play-də proqramların 90%-dən çoxu ən geniş yayılmış normal icazə olan INTERNET-dən istifadə edir.

Dangerous Permissions (runtime)

Dangerous icazələr məxfiliyi poza biləcək məlumatlara və funksiyalara girişi əhatə edir: kamera, mikrofon, geolokasiya, kontaktlar, SMS, telefon, təqvim, bədən sensorları. Bu icazələr iki mərhələli mexanizm tələb edir: manifestdə bəyannamə + ActivityCompat.requestPermissions() vasitəsilə icra zamanı sorğu.

İstifadəçi dangerous icazəsini verməkdən imtina edə bilər və proqram bu ssenarini düzgün emal etməlidir. Android 11+-da istifadəçi iki dəfə imtina edərsə, sonrakı sorğular sistem dialoqunu göstərmir — sistem avtomatik olaraq DENIED qaytarır. Bu halda istifadəçini parametrlərə yönləndirmək lazımdır.

Signature və Special Permissions

Signature səviyyəsi — icazə, proqram sistemi və ya icazəni təyin edən digər proqramla eyni sertifikatla imzalanmışsa avtomatik verilir. Sistem və korporativ proqramlar üçün istifadə olunur. Nümunə: BIND_ACCESSIBILITY_SERVICE — yalnız sistem proqramları üçün əlçatandır.

Special səviyyəsi (SYSTEM_ALERT_WINDOW, WRITE_SETTINGS, REQUEST_INSTALL_PACKAGES, MANAGE_EXTERNAL_STORAGE) — sistem parametrləri vasitəsilə istifadəçinin ayrıca hərəkətini tələb edir. Proqram Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION) ilə parametrlər səhifəsini aça bilər. Google Play special icazələrin istifadəsini məhdudlaşdırır və nəşr zamanı formada əsaslandırma tələb edir.

Runtime Permission: dangerous icazələri ilə iş

Android 6.0-dan başlayaraq bütün dangerous icazələri icra zamanı sorğu tələb edir. Kotlin-də runtime permissions ilə tam iş dövrünü nəzərdən keçirək.

İcazənin yoxlanması və sorğusu

Dangerous icazə tələb edən API-ni çağırmazdan əvvəl həmişə cari statusu ContextCompat.checkSelfPermission() ilə yoxlayın. Status PERMISSION_GRANTED-dirsə — API çağırıla bilər. PERMISSION_DENIED-dirsə — ActivityResultContract RequestPermission (AndroidX) və ya köhnəlmiş requestPermissions() vasitəsilə icazə sorğulanmalıdır.

Bir neçə icazəni eyni anda sorğulamaq üçün ActivityResultContracts.RequestMultiplePermissions istifadə etmək tövsiyə olunur. Google əlaqəli icazələrin (məsələn, video yazmaq üçün kamera + mikrofon) bir dialoqda qruplaşdırılmasını tövsiyə edir ki, istifadəçi sorğunun tam kontekstini görsün.

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” imtinasının emalı

İstifadəçi icazəni iki dəfə imtina edərsə, Android sorğunu “Never ask again” vəziyyətinə keçirir. Bu halda shouldShowRequestPermissionRationale() false qaytarır və sistem dialoqu göstərilməyəcək. Proqram istifadəçini Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) vasitəsilə sistem parametrlərinə yönləndirməlidir.

Vacib: ilk imtinadan dərhal sonra parametrləri açmağı təklif edən dialoq göstərməyin — bu aqressiv davranış kimi qəbul edilir. İzahatın göstərilməsinin lazım olub-olmadığını müəyyən etmək üçün shouldShowRequestPermissionRationale() istifadə edin. Material Design Guidelines sadəcə “Parametrləri aç” düyməsi deyil, girişin dəyərini izah edən ekran göstərməyi tövsiyə edir.

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("Kameraya giriş")
        .setMessage("Parametrlərdə kameraya girişə icazə verin, "
            + "profil üçün foto çəkmək üçün")
        .setPositiveButton("Parametrləri aç") { _, _ ->
            openAppSettings()
        }
        .setNegativeButton("Ləğv et", null)
        .show()
}

AndroidManifest.xml-də icazələrin bəyannaməsi

AndroidManifest.xml faylı proqramın istifadə etdiyi hər bir icazə üçün <uses-permission> elementi ehtiva edir. İcazələr <manifest> səviyyəsində <application> elementindən əvvəl bəyan edilir.

Bəyannamənin sintaksisi

Hər bir icazə tam icazə adını göstərən android:name atributu ilə ayrıca <uses-permission> elementi kimi bəyan edilir. Müəyyən Android versiyalarında ortaya çıxan icazələr üçün maxSdkVersion atributundan istifadə edərək bəyannaməni yalnız lazımi versiyalarla məhdudlaşdırın — bu uyğunluğu yaxşılaşdırır.

Məsələn, WRITE_EXTERNAL_STORAGE icazəsi Android 10+-da (Scoped Storage) lazım deyil, ona görə də maxSdkVersion=„28” (Android 9) göstərin. Bu, yeni versiyalarda istifadəçilərdən lazımsız sualların qarşısını alır. Android Studio Lint vasitəsilə tövsiyə olunan maxSdkVersion barədə xəbərdarlıq edir.

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>

Filtrləmə üçün <uses-feature> istifadəsi

<uses-feature> elementi proqramın müəyyən avadanlıq (kamera, GPS, NFC) tələb etdiyini göstərir. android:required=„false” atributu proqramı bu avadanlıq olmayan cihazlarda quraşdırmağa imkan verir — əlçatanlıq yoxlaması kodda aparılır. required=„true” olarsa, Google Play proqramı filtrləyir və uyğun olmayan cihazlar üçün əlçatmaz olur.

Bütün avadanlıq funksiyaları üçün required=„false” göstərmək və əlçatanlığı PackageManager.hasSystemFeature() vasitəsilə proqramlı şəkildə yoxlamaq tövsiyə olunur. Bu proqramınızın auditoriyasını genişləndirir. Yeganə istisna — funksiyanın proqramın işləməsi üçün kritik olduğu haldır (GPS olmadan taksi sifariş proqramının mənası yoxdur).

Ən yaxşı təcrübələr və səhvlər

İcazələrlə düzgün iş Android proqramının keyfiyyətinin əsas aspektidir. Əsas tövsiyələri və tipik səhvləri nəzərdən keçirək.

Sorğulanan icazələrin minimuma endirilməsi

Yalnız proqramın işləməsi üçün həqiqətən zəruri olan icazələri sorğulayın. Hər bir artıq icazə quraşdırma konversiyasını azaldır və imtinaların sayını artırır. Google Play Console istifadəçilərin nə qədərinin icazə dəstinə görə quraşdırmadan imtina etdiyini göstərir. AppBrain (2024)-yə görə 10+ dangerous icazəsi olan proqramların 35% daha az quraşdırması var.

İcazə siyahısını mütəmadi olaraq nəzərdən keçirin. İstifadə olunmayanları silin, xüsusən də bəzi icazələrin isteğe bağlı olduğu yeni Android versiyalarına keçərkən. Məsələn, Android 13+-da foto seçicinin (ActivityResultContracts.PickVisualMedia) meydana gəlməsi ilə media kitabxanasına giriş READ_MEDIA_IMAGES dangerous icazəsi olmadan əldə edilə bilər.

Sorğudan əvvəl rationale göstərilməsi

Dangerous icazəsini sorğulamazdan əvvəl istifadəçiyə bu icazənin nə üçün lazım olduğunu və hansı dəyəri verdiyini izah edən ekran göstərin. Material Design işarə, qısa mətn və “Davam et” düyməsi olan bottom sheet və ya dialoqdan istifadə etməyi tövsiyə edir. Rationale birbaşa sorğu ilə müqayisədə razılığı 20–30% artırır.

launch() çağırmazdan əvvəl shouldShowRequestPermissionRationale() yoxlayın. true olarsa — rationale göstərin. false olarsa — ya icazə artıq verilib, ya da istifadəçi birdəfəlik imtina edib (never ask again). Sonuncu halda sorğunu təkrarlamaq əvəzinə “Parametrləri aç” düyməsini göstərin.

Bütün icazə ssenarilərinin test edilməsi

Bütün mümkün ssenariləri test edin: icazənin verilməsi, imtina, birdəfəlik imtina, parametrlərdə icazənin geri götürülməsi, icazələrin sıfırlanması (Android 11+ auto-reset). Hər ssenari crash və məlumat itkisi olmadan emal edilməlidir. Android Testing Guide testlərin avtomatlaşdırılması üçün TestPermission kitabxanasından istifadə etməyi tövsiyə edir.

Xüsusi diqqəti istifadəçinin proqram işləyərkən icazəni geri götürdüyü ssenariyə yetirin (kiçildilmiş proqram → Parametrlər → geri götürmə). Proqrama qayıtdıqda bütün icazələri onResume() vasitəsilə yenidən yoxlayın. İcazə statusunun keşləşdirilməsinə etibar etməyin — istifadəçi onları istənilən vaxt dəyişə bilər.

Tipik səhvlər

  • checkSelfPermission ilə əvvəlcədən yoxlamadan icazə sorğulamaq — lazımsız dialoqa səbəb olur
  • shouldShowRequestPermissionRationale-ı nəzərə almamaq — ilk imtinadan sonra UX-i pisləşdirir
  • Kontekstsiz icazə sorğulamaq (sadəcə “Girişə icazə verilsin?”) — razılığı azaldır
  • Android 10+-da maxSdkVersion olmadan WRITE_EXTERNAL_STORAGE istifadə etmək — lazımsız sorğu
  • onResume-də icazələrin yoxlanılmaması — parametrlərdə icazənin geri götürülməsinin qaçırılması

Tez-tez verilən suallar

SDK icazə tələb edirsə, onu bəyan etmək lazımdırmı?

Bəli, əgər SDK öz manifestinə icazə daxil edirsə, o, proqramın manifesti ilə birləşdirilir. SDK-nın lazımsız icazəsini AndroidManifest.xml-də tools:node=„remove” ilə söndürə bilərsiniz.

İcazə imtinasını emal etməsəm nə olar?

İcazəsiz API çağırışı SecurityException-a səbəb olacaq, bu da proqramın çökməsinə gətirib çıxarır. Həmişə müvafiq API-dən istifadə etməzdən əvvəl icazə statusunu yoxlayın və imtinanı düzgün emal edin.

İnkişaf prosesində icazələri necə sıfırlamaq olar?

Cihaz parametrlərində: Parametrlər → Proqramlar → [proqramınız] → İcazələr. Bütün icazələri sıfırlamaq üçün adb əmrindən istifadə edin: adb shell pm reset-permissions.

Activity olmadan icazə sorğulamaq olarmı?

Bəli, Fragment və ya Service-də ActivityResultLauncher vasitəsilə. Lakin sorğu dialoqu həmişə Activity UI konteksti tələb edir. Service üçün sorğu ilə Activity açan Intent ilə Notification göstərə bilərsiniz.

İcazələr üçün maxSdkVersion nə üçün lazımdır?

Məsələn, WRITE_EXTERNAL_STORAGE Android 10+-da (Scoped Storage) lazım deyil. android:maxSdkVersion=„28” göstərməklə yeni versiyalarda icazə bəyannaməsini istisna edirsiniz ki, bu da uyğunluğu yaxşılaşdırır və sorğulanan icazələrin siyahısını azaldır.

Nəticə

  • AndroidManifest Permissions — Android-də sistem resurslarına məcburi giriş bəyannamələri
  • 4 qoruma səviyyəsi — normal, dangerous, signature, special müxtəlif vermə mexanizmləri ilə
  • Runtime Permissions — dangerous icazələri icra zamanı sorğu tələb edir (Android 6+)
  • İcazə qrupları — qrupdakı bir icazəyə razılıq qrupdakı hamısına giriş verir
  • Rationale — sorğudan əvvəl izahat göstərmək razılığı 20–30% artırır
  • Minimallaşdırma — yalnız zəruri icazələri sorğulayın və maxSdkVersion istifadə edin
  • Həmişə API çağırmazdan əvvəl icazə statusunu yoxlayın və bütün imtina ssenarilərini emal edin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun