Android权限管理--权限类型
目錄
1.普通權(quán)限(normal)
2.運行時權(quán)限(dangerous)
3.簽名權(quán)限(signature)
4.特殊權(quán)限(privileged)
查看android權(quán)限的等級
判斷應(yīng)用是否擁有對應(yīng)權(quán)限
?Android 將權(quán)限分為不同的類型,包括安裝時權(quán)限、運行時權(quán)限和特殊權(quán)限。每種權(quán)限類型都指明了當(dāng)系統(tǒng)授予應(yīng)用該權(quán)限后,應(yīng)用可以訪問的受限數(shù)據(jù)范圍以及應(yīng)用可以執(zhí)行的受限操作范圍。
1.普通權(quán)限(normal)
此類權(quán)限允許訪問超出應(yīng)用沙盒的數(shù)據(jù)和執(zhí)行超出應(yīng)用沙盒的操作。但這些數(shù)據(jù)和操作對用戶隱私及對其他應(yīng)用的操作帶來的風(fēng)險非常小。
2.運行時權(quán)限(dangerous)
運行時權(quán)限也稱為危險權(quán)限,此類權(quán)限授予應(yīng)用對受限數(shù)據(jù)的額外訪問權(quán)限,并允許應(yīng)用執(zhí)行對系統(tǒng)和其他應(yīng)用具有更嚴(yán)重影響的受限操作。因此需要先在應(yīng)用中請求運行時權(quán)限,然后才能訪問受限數(shù)據(jù)或執(zhí)行受限操作。當(dāng)應(yīng)用請求運行時權(quán)限時,系統(tǒng)會顯示運行時權(quán)限彈窗提示。
3.簽名權(quán)限(signature)
當(dāng)應(yīng)用聲明了其他應(yīng)用已定義的簽名權(quán)限時,如果兩個應(yīng)用使用同一證書進(jìn)行簽名,系統(tǒng)會在安裝時向前者授予該權(quán)限。否則,系統(tǒng)無法向前者授予該權(quán)限。(注意:有些簽名權(quán)限不適合第三方應(yīng)用使用。)
該權(quán)限只需要在manifest中聲明使用,同時應(yīng)用和這類權(quán)限定義者擁有一樣的簽名系統(tǒng)就會默認(rèn)授予應(yīng)用這類權(quán)限;系統(tǒng)授予這類權(quán)限后應(yīng)用無需像運行時權(quán)限一樣動態(tài)申請。
4.特殊權(quán)限(privileged)
特殊權(quán)限與特定的應(yīng)用操作相對應(yīng)。只有平臺和原始設(shè)備制造商 (OEM) 可以定義特殊權(quán)限。此外,如果平臺和 OEM 想要防止有人執(zhí)行功能特別強大的操作(例如通過其他應(yīng)用繪圖),通常會定義特殊權(quán)限。系統(tǒng)設(shè)置中的特殊應(yīng)用訪問權(quán)限頁面包含一組用戶可切換的操作。其中的許多操作都以特殊權(quán)限的形式實現(xiàn)。每項特殊權(quán)限都有自己的實現(xiàn)細(xì)節(jié)。系統(tǒng)會為特殊權(quán)限分配“appop”保護(hù)級別。
該權(quán)限只需要在manifest中聲明使用,同時擁有系統(tǒng)簽名且不是預(yù)置到 **/priv_app/ (如:system/priv-app)目錄下,系統(tǒng)就會默認(rèn)授予;如果應(yīng)用是預(yù)置到 **/priv_app/ 目錄下則需要在配置文件privapp-permissions-platform.xml中配置權(quán)限信息,否則系統(tǒng)不會授予權(quán)限,并且也會無法通過cts測試
查看android權(quán)限的等級
在系統(tǒng)源碼中找到文件 /frameworks/base/core/res/AndroidManifest.xml ,這個文件中定義了系統(tǒng)權(quán)限等信息。
如 WRITE_MEDIA_STORAGE權(quán)限 具體如下:
權(quán)限名稱:android.permission.WRITE_MEDIA_STORAGE
權(quán)限等級為:signature|privileged (該權(quán)限既是signature也是privileged權(quán)限)
<!-- @SystemApi @TestApi Allows an application to write to internal media storage@hide --> <permission android:name="android.permission.WRITE_MEDIA_STORAGE"android:protectionLevel="signature|privileged" />如 READ_CONTACTS權(quán)限 具體如下:
權(quán)限名稱:android.permission.READ_CONTACTS
權(quán)限等級為:dangerous (該權(quán)限為運行時權(quán)限,也就是需要應(yīng)用去動態(tài)申請)
<!-- Allows an application to read the user's contacts data.<p>Protection level: dangerous --> <permission android:name="android.permission.READ_CONTACTS"android:permissionGroup="android.permission-group.UNDEFINED"android:label="@string/permlab_readContacts"android:description="@string/permdesc_readContacts"android:protectionLevel="dangerous" />同時,也可以如下adb命令來獲取權(quán)限等級
adb shell dumpsys package permision |grep -i prot
判斷應(yīng)用是否擁有對應(yīng)權(quán)限
使用如下命令查看 adb shell dumpsys package com.miui.home
下面的install permissions記錄的是該應(yīng)用擁有的普通權(quán)限以及簽名權(quán)限的信息,如果應(yīng)用申請的權(quán)限被系統(tǒng)授予了,在對應(yīng)權(quán)限后面就會顯示 granted=true
相反,如果沒有搜到相關(guān)權(quán)限的字符串,說明該應(yīng)用沒有聲明使用這個權(quán)限
C:\Users\Administrator>adb shell dumpsys package com.miui.home Activity Resolver Table: ... ... ... ... Packages:Package [com.miui.home] (41dff44):userId=10089pkg=Package{724982d com.miui.home} install permissions:android.permission.REAL_GET_TASKS: granted=truecom.android.settings.permission.CLOUD_SETTINGS_PROVIDER: granted=trueandroid.permission.WRITE_SETTINGS: granted=truemiui.autoinstall.config.permission.AUTOINSTALL: granted=trueandroid.permission.SET_PROCESS_LIMIT: granted=trueandroid.permission.MODIFY_AUDIO_SETTINGS: granted=truemiui.os.permisson.INIT_MIUI_ENVIRONMENT: granted=trueandroid.miui.permission.SHELL: granted=trueandroid.permission.SYSTEM_ALERT_WINDOW: granted=true為什么應(yīng)用在manifest中申請了signature權(quán)限或者privileged權(quán)限,但是還報錯沒有權(quán)限錯誤
1.對于signature權(quán)限,先判斷應(yīng)用是否擁有平臺簽名。可以通過dump命令來判斷,執(zhí)行 adb shell dumpsys package 包名 |findstr -i signatures 和adb shell dumpsys package android | findstr signatures,對比兩者的簽名是否一致。
2.對于privileged權(quán)限,先判斷應(yīng)用的預(yù)置路徑。是否預(yù)置到.../priv-app/路徑下(獲取通過包信息查看應(yīng)用的flag是否帶有privileged),如果是就把/system/etc/permissions/的配置文件pull出來,配置文件為:privapp-permissions-platform.xml,查看自己的應(yīng)用是否在這兩個文件里面配置了,如果沒有配置則需要在代碼中進(jìn)行配置。(可以將修改的文件push到/system/etc/permissions/目錄,然后重啟手機驗證是否生效)
總結(jié)
以上是生活随笔為你收集整理的Android权限管理--权限类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA---FX
- 下一篇: Android 动态权限申请