Normal Permission — Android-da tizim foydalanuvchidan so'ramasdan avtomatik ravishda taqdim etadigan ruxsatlar toifasidir. Android Developer Documentation, 2024 ma'lumotlariga ko'ra, normal ruxsatlar ProtectionLevel normal ga ega va xavfli ruxsatlardan farqli o'laroq, runtime dialogni talab qilmaydi. Ular internetga, tarmoq holatiga va tebranishga kirishni o'z ichiga oladi, foydalanuvchining maxfiy ma'lumotlari uchun xavf tug'dirmaydi.
Asosiy
Normal Permission — ProtectionLevel normal bo'lgan Android tizim ruxsatlarining bir turi bo'lib, dasturga o'rnatish vaqtida avtomatik ravishda beriladi. Ishlab chiqaruvchi so'rov uchun kod yozishi shart emas — AndroidManifest.xml da ruxsatni ko'rsatish kifoya. Foydalanuvchi dialoglarni ko'rmaydi va normal permissionni alohida bekor qila olmaydi, faqat dasturni butunlay o'chirish orqali.
Android tizimi normal ruxsatlarni past xavfli deb tasniflaydi — ular shaxsiy ma'lumotlarga, kameraga yoki mikrofonga kirishni bermaydi. Oddiy misollar: internetga kirish, tebranishni boshqarish, Wi-Fi holatini o'qish. Android Security Model (2024) ma'lumotlariga ko'ra, barcha tizim ruxsatlarining taxminan 40 foizi normal toifasiga kiradi.
Muhim xususiyat — normal ruxsatlar Settings orqali runtime da bekor qilinmaydi. Agar foydalanuvchi kirishni taqiqlamoqchi bo'lsa, yagona yo'l dasturni o'chirishdir. Ishlab chiqaruvchilar buni arxitekturada hisobga olishlari kerak, ammo foydalanuvchilar uchun bunday yondashuv o'zaro ta'sirni soddalashtiradi: birinchi ishga tushirishda hech qanday dialoglar yo'q.
Normal va xavfli ruxsatlarga bo'linish Android 6.0 Marshmallow (API 23) da paydo bo'ldi. Ushbu versiyadan oldin barcha ruxsatlar o'rnatish vaqtida so'ralardi — foydalanuvchi yagona ro'yxatni ko'rar va uni to'liq qabul qilar yoki rad etardi. Normal Permission ushbu modelni past xavfli operatsiyalar uchun saqlab qoldi, Dangerous esa runtime so'roviga o'tdi. Bu o'zgarish foydalanuvchi tajribasini yaxshiladi va bir vaqtning o'zida xavfsizlikni oshirdi.
Ko'plab Android tizim API lari, kirish avtomatik bo'lsa ham, normal ruxsatni aniq ko'rsatishni talab qiladi. Masalan, ConnectivityManager sinfi ACCESS_NETWORK_STATE, VibratorService VIBRATE, WifiManager ACCESS_WIFI_STATE talab qiladi. Tegishli uses-permission e'lon qilinmasdan, ushbu API larni chaqirish SecurityException ga olib keladi.
ProtectionLevel normal — Android Permission System dagi minimal himoya darajasi. Ushbu darajadagi ruxsatlar manifestda e'lon qilinadi va tizim o'rnatish vaqtida deklaratsiyani tekshiradi, foydalanuvchi aralashuvisiz kirishni taqdim etadi. Hech qanday UI elementi ko'rsatilmaydi, hech qanday callback chaqirilmaydi.
Tekshirish mexanizmi PackageManager darajasida ishlaydi. APK o'rnatilayotganda, tizim barcha uses-permission teglarini skanerdan o'tkazadi, permissions.xml fayllaridagi tizim ta'riflari bilan solishtirib har bir ruxsatning himoya darajasini aniqlaydi va normal-level uchun oddiygina kirishni ro'yxatga oladi. Jarayon millisekundlar davom etadi va foydalanuvchi interfeysi bilan o'zaro ta'sirni talab qilmaydi.
Taqdim etish algoritmi quyidagicha:
Foydalanuvchi interfeys orqali normal ruxsatni bekor qila olmaydi. Dastur sozlamalarida Ruxsatlar bo'limida faqat xavfli ruxsatlar ko'rsatiladi. Bu iOS bilan farq qiladi, u erda har bir ruxsat funksiyaning sezgirlik darajasidan qat'i nazar, alohida tasdiqlashni talab qiladi.
Normal va Dangerous Permission — Android da ikkita qarama-qarshi himoya toifasi. Asosiy farq taqdim etish usulida: normal ruxsatlar o'rnatish vaqtida avtomatik beriladi, xavfli ruxsatlar runtime dialog orqali aniq rozilik talab qiladi. Bu farq Android 6.0 Marshmallow versiyasidan boshlab xavfsizlik arxitekturasiga kiritilgan.
Asosiy xususiyatlarni taqqoslash:
| Xususiyat | Normal Permission | Dangerous Permission |
|---|---|---|
| ProtectionLevel | normal | dangerous |
| Foydalanuvchi so'rovi | Talab qilinmaydi | Runtime dialog majburiy |
| Bekor qilish imkoniyati | Yo'q, faqat dasturni o'chirish | Ha, istalgan vaqtda sozlamalar orqali |
| Kodda tekshirish | Har doim PERMISSION_GRANTED | checkSelfPermission majburiy |
| Misollar | INTERNET, VIBRATE, ACCESS_NETWORK_STATE | CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION |
Foydalanuvchi Normal Permission so'rovida hech qanday dialogni ko'rmaydi. Agar dasturga INTERNET kerak bo'lsa — uni jimgina oladi. Dangerous Permission uchun tizim so'ralgan kirish tavsifi bilan modal dialog ko'rsatadi. Foydalanuvchi Allow yoki Deny tugmasini bosadi va keyinroq istalgan vaqtda Settings orqali ruxsatni bekor qilishi mumkin. Bu interfeysni ishlab chiqish strategiyasini belgilaydigan asosiy UX farqidir.
Normal kirish sezgir ma'lumotlarga tegishli bo'lmagan barcha holatlarda qo'llanilishi kerak. ACCESS_NETWORK_STATE ulanishni tekshirish uchun, VIBRATE tebranish aloqasi uchun, INTERNET HTTP so'rovlari uchun — bularning barchasi normal ruxsatlardir. Normal etarli bo'lgan joyda dangerous darajasini qo'llash yomon amaliyot bo'lib, keraksiz dialoglar yaratadi va foydalanuvchining dasturga bo'lgan ishonchini kamaytiradi.
Android belgilaydi o'nlab normal ruxsatlar, har biri ma'lum bir tizim funksiyasiga mos keladi. Ularning barchasi Manifest.permission sinfi konstantalari orqali mavjud. Quyida dastur ishlab chiqishda eng ko'p qo'llaniladiganlar ro'yxati keltirilgan.
| Konstanta | Kirish | Ta'rif |
|---|---|---|
| INTERNET | Tarmoq | HTTP so'rovlari uchun tarmoq soketlarini ochish |
| ACCESS_NETWORK_STATE | Tarmoq | Tarmoq holati haqida ma'lumot olish |
| ACCESS_WIFI_STATE | Wi-Fi | Wi-Fi ulanishlari haqida ma'lumot o'qish |
| VIBRATE | Tebranish | Qurilma vibratorini boshqarish |
| BLUETOOTH | Bluetooth | Bluetooth qurilmalariga ulanish |
| WAKE_LOCK | Quvvat | Protsessorning uyquga o'tishini bloklash |
| SET_ALARM | Budilnik | AlarmManager orqali budilnik o'rnatish |
| CHANGE_NETWORK_STATE | Tarmoq | Tarmoq ulanish holatini o'zgartirish |
Normal ruxsatlar UI da ko'rsatish uchun Permission Group da guruhlanmaydi. Android dagi guruhlar sozlamalar ekrani uchun mo'ljallangan bo'lib, unda faqat xavfli ruxsatlar ko'rsatiladi. Biroq, mantiqan normal ruxsatlarni toifalarga bo'lish mumkin: tarmoq (INTERNET, ACCESS_NETWORK_STATE), apparat (VIBRATE, WAKE_LOCK), tizim (SET_ALARM) va Bluetooth ruxsatlari.
Manifest.permission dan ba'zi konstantalar turli Android versiyalarida himoya darajasini o'zgartirishi mumkin. Masalan, BLUETOOTH_CONNECT Android 12+ da runtime so'rovi bilan xavfli ruxsatga aylandi, garchi eski versiyalarda normal bo'lsa ham. Ishlab chiqaruvchilarga maqsadli API uchun hujjatlar orqali joriy protectionLevel ni tekshirish tavsiya etiladi.
Ishlab chiqaruvchi dasturiy ravishda PackageManager orqali ruxsatning normal ekanligini tekshirishi mumkin. getPermissionInfo metodi protectionLevel maydonida PermissionInfo.PROTECTION_NORMAL bayrog'ini o'z ichiga olgan PermissionInfo qaytaradi. Bu dinamik ishlov berish va tuzatish uchun foydalidir.
fun isNormalPermission(permission: String): Boolean {
val pm = packageManager
val info = pm.getPermissionInfo(
permission,
PackageManager.GET_META_DATA
)
return info.protectionLevel ==
PermissionInfo.PROTECTION_NORMAL
}
Normal Permission ni e'lon qilish AndroidManifest.xml da bitta uses-permission tegini talab qiladigan eng oddiy operatsiyadir. Qo'shimcha protectionLevel konfiguratsiyasi talab qilinmaydi, chunki himoya darajasi dastur manifesti bilan emas, balki tizim ta'rifi bilan belgilanadi. Ishlab chiqaruvchi oddiygina konstanta to'liq nomini ko'rsatadi.
<!-- AndroidManifest.xml -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.VIBRATE" />
Tizim o'rnatish vaqtida barcha deklaratsiyalarni qayta ishlaydi. Agar ko'rsatilgan ruxsatlardan kamida bittasi normal dan farqli protectionLevel ga ega bo'lsa, runtime so'rovi talab qilinadi. INTERNET — eng mashhur normal ruxsat, ayniqsa HTTP so'rovlarini bajaradigan yoki tarmoqdan kontent yuklaydigan ko'pgina Android dasturlarida mavjud.
Normal va xavfli ruxsatlarga ega to'liq AndroidManifest.xml namunasi farqni ko'rsatadi: sintaktik jihatdan uses-permission teglari bir xil, ammo bajarish bosqichida INTERNET va VIBRATE avtomatik taqdim etiladi, CAMERA esa dialog talab qiladi.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Normal permissions -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.VIBRATE" />
<!-- Dangerous permission -->
<uses-permission
android:name="android.permission.CAMERA" />
</manifest>
Kutubxonalardan — Google Play Services, Firebase, Glide — foydalanganda ular Manifest Merger orqali yakuniy manifestga o'z uses-permission teglarini qo'shishi mumkin. Ulardan ba'zilari normal (Firebase uchun INTERNET), boshqalari xavfli (Google Maps uchun ACCESS_FINE_LOCATION). Ishlab chiqaruvchi nashr qilishdan oldin build/outputs/logs/manifest-merger-report.txt faylida yakuniy birlashtirilgan manifestni tekshirishi kerak.
Normal Permission ikkita asosiy cheklovga ega: foydalanuvchi tomonidan bekor qilinmasligi va boshqaruv uchun UI ning yo'qligi. Agar foydalanuvchi dasturga ishonmasa, lekin normal ruxsat allaqachon avtomatik berilgan bo'lsa — yagona chiqish yo'li dasturni o'chirishdir. Bu ma'lum xavf tug'diradi, chunki normal ruxsatlar Android standart vositalari bilan bloklanmaydi.
Qo'shimcha cheklov bir nechta profilli qurilmalarda (Work Profile, Multiple Users) namoyon bo'ladi. Normal Permission barcha profillar uchun darhol taqdim etiladi — dastur ruxsatni faqat bittasi bilan cheklay olmaydi. Korporativ stsenariylarda bu Managed Configurations orqali hal qilinadi.
Dastur hozirda Normal Permission dan foydalanayotganligini tekshirish mumkin emas. Tizim metodi checkSelfPermission faqat xavfli ruxsatlar uchun ishlaydi. Normal uchun u har doim PERMISSION_GRANTED qaytaradi, bu real faoliyatni aks ettirmaydi. Buni xavfsizlik auditi va dastur harakatini tahlil qilishda hisobga olish kerak.
Shuningdek, ba'zi qurilma ishlab chiqaruvchilari (Xiaomi, Huawei, Samsung) ruxsatlarning standart xatti-harakatini o'zgartirishini yodda tutish kerak. Ularning proshivkalarida Normal Permission MIUI yoki EMUI markali qobig'ida qo'shimcha ruxsatlarni talab qilishi mumkin. Ishlab chiqaruvchilarga turli ishlab chiqaruvchilarning real qurilmalarida ishlashni sinab ko'rish tavsiya etiladi.
Tez-tez beriladigan savollar
Normal Permission o'rnatish vaqtida dialogsiz avtomatik taqdim etiladi. Dangerous foydalanuvchining aniq roziligi bilan runtime so'rovini talab qiladi va sozlamalar orqali bekor qilinishi mumkin. Normal ProtectionLevel normal, Dangerous esa protectionLevel dangerous dan foydalanadi.
Yo'q, normal ruxsatlar uchun AndroidManifest.xml da uses-permission e'lon qilish kifoya. So'rov uchun kod talab qilinmaydi — tizim kirishni avtomatik taqdim etadi. Bu ActivityCompat.requestPermissions talab qiladigan xavfli ruxsatlardan farq qiladi.
Eng ko'p qo'llaniladiganlar: INTERNET (tarmoq so'rovlari), ACCESS_NETWORK_STATE (ulanishni tekshirish), VIBRATE (tebranish aloqasi) va WAKE_LOCK (protsessorni ushlab turish). Deyarli har bir Android dasturi kamida INTERNET dan foydalanadi.
Yo'q, Normal Permission dastur sozlamalari orqali bekor qilinmaydi. Kirishni to'xtatishning yagona yo'li dasturni o'chirishdir. Bu foydalanuvchi istalgan vaqtda o'chirib qo'yishi mumkin bo'lgan xavfli ruxsatlardan asosiy farqdir.
PackageManager.getPermissionInfo dan foydalaning, ruxsatning satr nomini uzating. Metod protectionLevel maydoni bilan PermissionInfo qaytaradi. Toifani aniqlash uchun PermissionInfo.PROTECTION_NORMAL yoki PROTECTION_DANGEROUS konstantalari bilan solishtiring.
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.
Shuningdek o'qing