最近在研究關於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>
解釋下各個屬性:安全
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);
場景:App A中聲明瞭權限PermissionA,App B中使用了權限PermissionA。學習
Android6.0引入了動態權限,這個你們都知道了。前面說到的自定義的權限的安全級別android:protectionLevel會影響權限在Android6.0+系統的使用3d
近3年BAT面試真題整理合集code
歡迎關注我微信公衆號:終端研發部,一塊兒交流和學習