標籤:
在android系統的安全模型中,應用程式在預設的情況下不可以執行任何對其他應用程式,系統或者使用者帶來負面影響的操作。如果應用需要執行某些操作,就需要聲明使用這個操作對應的許可權。 (在manifest檔案中 委任標記)
android 系統提供了一系列這樣的許可權,具體可以查看android 許可權,另外,android系統在新的版本中會增加一些permission,可以查看android 版本資訊。
當然,app也可以自訂屬於自己的permission 或屬於開發人員使用的同一個簽名的permission。定義一個permission 就是在menifest檔案中添加一個permission標籤。
1 <permission android:description="string resource"
2 android:icon="drawable resource"
3 android:label="string resource"
4 android:name="string"
5 android:permissionGroup="string"
6 android:protectionLevel=["normal" | "dangerous" |"signature" | "signatureOrSystem"] />
7
下面對各參數做一個簡單說明:
android:description :對許可權的描述,一般是兩句話,第一句話描述這個許可權所針對的操作,第二句話告訴使用者授予app這個許可權會帶來的後果
android:label: 對許可權的一個簡短描述
android:name :許可權的唯一標識,一般都是使用 報名加許可權名
android:permissionGroup: 許可權所屬許可權組的名稱
android:protectionLevel: 許可權的等級,
normal 是最低的等級,聲明次許可權的app,系統會預設授予次許可權,不會提示使用者
dangerous 許可權對應的操作有安全風險,系統在安裝聲明此類許可權的app時會提示使用者
signature 許可權表明的操作只針對使用同一個認證簽名的app開放
signatureOrSystem 與signature類似,只是增加了rom中內建的app的聲明
android:name 屬性是必須的,其他的可選,未寫的系統會指定預設值
下面通過指定一個BroadcastReceiver的許可權來實驗
首先建立了兩個app,app A ,app B ;
app A中註冊了一個BroadcastReceiver ,app B 發送訊息
app A的menifest檔案:
1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 package="com.example.testbutton"
3 android:versionCode="1"
4 android:versionName="1.0" >
5 <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />
6 <!-- 聲明許可權 -->
7 <permission android:name="com.example.testbutton.RECEIVE" />
8 <application
9 android:icon="@drawable/ic_launcher"
10 android:label="@string/app_name"
11 android:theme="@style/AppTheme" >
12 <activity
13 android:name=".MainActivity"
14 launcheMode="singleTask"
15 android:configChanges="locale|orientation|keyboardHidden"
16 android:screenOrientation="portrait"
17 android:theme="@style/android:style/Theme.NoTitleBar.Fullscreen" >
18 <intent-filter>
19 <action android:name="android.intent.action.MAIN" />
20 <category android:name="android.intent.category.LAUNCHER" />
21 </intent-filter>
22 </activity>
23 <!-- 註冊Broadcast Receiver,並指定了給當前Receiver發送訊息方需要的許可權 -->
24 <receiver
25 android:name="com.example.testbutton.TestButtonReceiver"
26 android:permission="com.example.testbutton.RECEIVE" >
27 <intent-filter>
28 <action android:name="com.test.action" />
29 </intent-filter>
30 </receiver>
31 </application>
32 </manifest>
app B 的menifest 檔案內容
1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 package="com.example.testsender"
3 android:versionCode="1"
4 android:versionName="1.0" >
5 <uses-sdk
6 android:minSdkVersion="7"
7 android:targetSdkVersion="15" />
8 <!-- 聲明使用指定的許可權 -->
9 <uses-permission android:name="com.example.testbutton.RECEIVE" />
10 <application
11 android:icon="@drawable/ic_launcher"
12 android:label="@string/app_name"
13 android:theme="@style/AppTheme" >
14 <activity
15 android:name=".MainActivity"
16 android:label="@string/title_activity_main" >
17 <intent-filter>
18 <action android:name="android.intent.action.MAIN" />
19 <category android:name="android.intent.category.LAUNCHER" />
20 </intent-filter>
21 </activity>
22 </application>
23 </manifest>
這樣app B 給app A 發送訊息,A就可以收到了,若未在app B的menifest檔案中聲明使用相應的許可權,app B發送的訊息,A是收不到的。
另外,也可在app B 的menifest檔案中聲明許可權時,添加android:protectionLevel=“signature”,指定app B只能接收到使用同一認證簽名的app 發送的訊息。
兩個安卓APP之間的資料的相互調用是我們經常會遇到的問題,本文主要介紹的安卓開發自訂許可權問題希望對廣大安卓開發人員有所協助。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
android apk與apk 之間互相通訊--如何自訂許可權