Android自定義權限使用總結

最近在研究關於android自定義權限的問題,關於自定義權限通常是保證APP的安全性,那麼什麼事自定義權限?今天咱們來補充一下本身的知識android

做者:BrightVan
地址: https://www.jianshu.com/p/b60...

一、如何聲明自定義權限

在Manifest文件中使用Permission標籤訂義本身的權限:面試

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.bright.permission">    <permission        android:name="com.bright.permission.TEST"        android:description=""        android:permissionGroup="com.bright.permission-group.TEST"        android:protectionLevel="signature" />    ...</manifest>

解釋下各個屬性:安全

  • name,該標籤就是權限的名字。
  • description,該標籤就是權限的介紹。
  • permissionGroup,指定該權限的組。
  • protectionLevel,指定保護級別。

Android將權限分爲若干個保護級別,normal, dangerous, signature等。normal就是正常權限,該權限並不會給用戶或者設備的隱私帶來風險;dangerous就是危險權限,該級別的權限一般會給用戶的數據或設備的隱私帶來風險;signature指的是,只有相同簽名的應用才能使用該權限。更多的介紹能夠參考protectionLevel。微信

二、使用場景

自定義權限通常用於暴露出去的組件,提升安全性。Android容許一個應用(客戶端)調用另外一個應用(服務端)的組件。那麼做爲服務端的應用就得暴露相應的組件,客戶端應用才能訪問。固然,在暴露的時候,權限是非必須的,若是暴露的組件沒有權限的話,那麼任何的其餘應用均可以來調用該組件;若是該組件申請了權限,那麼只有擁有該權限的應用才能調用該組件。併發

<activity    android:name=".TestA_Activity"    android:exported="true"    ...  />

exported屬性就是表明是否暴露。該例子並無要求調用者須要申請權限,也就是說,任何的應用就能夠調用才組件。若是每一個應用均可以調用咱們的組件的話,顯然是不安全的,咱們但願只有使用了咱們的權限的應用,才能調用咱們暴露的組件,咱們能夠在activity中加入permission屬性。app

<activity    android:name=".TestA_Activity"    android:exported="true"    ...  />
Intent intent = new Intent();intent.setClassName("com.bright.permission", "com.bright.permission.TestA_Activity");startActivity(intent);

除了上面的方式,還能夠經過intent-filter隱式啓動:框架

<activity    android:name=".TestA_Activity"    android:exported="true"    ... >    <intent-filter>            <action android:name="com.bright.permission.action.TEST"/>            <category android:name="android.intent.category.DEFAULT"/>    </intent-filter></activity>
Intent intent = new Intent();intent.setAction("com.bright.permission.action.TEST");startActivity(intent);

三、自定義權限注意點

3.一、兩個應用聲明瞭相同的權限

  • Android不容許兩個不一樣的應用定義一個相同名字的權限(除非這兩個應用擁有相同的簽名),因此在命名的時候,須要特別注意。
  • 擁有相同自定義權限的軟件必須使用一樣的簽名,不然後一個程序沒法安裝。

3.二、和應用安裝順序的關係。

場景:App A中聲明瞭權限PermissionA,App B中使用了權限PermissionA。學習

  • 狀況一:PermissionA的保護級別是normal或者dangerous
    App B先安裝,App A後安裝,此時App B沒法獲取PermissionA的權限,從App B打開App A會報權限錯誤。
    App A先安裝,App B後安裝,從App B打開App A一切正常。
  • 狀況二:PermissionA的保護級別是signature或者signatureOrSystem
    App B先安裝,App A後安裝,若是App A和App B是相同的簽名,那麼App B能夠獲取到PermissionA的權限。若是App A和App B的簽名不一樣,則App B獲取不到PermissionA權限。
    即,對於相同簽名的app來講,不論安裝前後,只要是聲明瞭權限,請求該權限的app就會得到該權限。
    這也說明了對於具備相同簽名的系統app來講,安裝過程不會考慮權限依賴的狀況。安裝系統app時,按照某個順序(例如名字排序,目錄位置排序等)安裝便可,等全部app安裝完了,全部使用權限的app都會得到權限。

3.三、權限的獲取以及版本兼容

Android6.0引入了動態權限,這個你們都知道了。前面說到的自定義的權限的安全級別android:protectionLevel會影響權限在Android6.0+系統的使用3d

  • android:protectionLevel="normal",不須要動態申請
  • android:protectionLevel="dangerous",須要動態申請

閱讀個人更多文章

近3年BAT面試真題整理合集code

Java併發面試,幸好有點道行,否則又被忽悠了

NDK項目實戰—高仿360手機助手之卸載監聽

分享幾個Android很強勢的的開源框架

歡迎關注我微信公衆號:終端研發部,一塊兒交流和學習

相關文章
相關標籤/搜索