應用程序安裝的時候,應用程序請求的permissions通過package installer來批準獲取。package installer通過檢查該應用程序的簽名來確定是否給予該程序索取的權限。在用戶使用過程中不會檢查權限,也就是說要么在安裝時就批準該權限,使其按照設計可以使用該權限;要么就不批準,這樣用戶也就根本無法使用該feature,也不會有任何提示告知用戶嘗試失敗。當應用試圖在沒有權限的情況下做受限操作,應用將被系統殺掉以警示。
例如,使用有system級別權限設定的api時,需要apk擁有system權限。比如在 android 的API中有SystemClock.setCurrentTimeMillis()函數來修改系統時間。有兩個方法:
第一個方法簡單點,不過需要在Android系統源碼的情況下用make來編譯:
1. 在應用程序的AndroidManifest.xml中的manifest節點插入android:sharedUserId="android.uid.system"這個屬性。
2. 修改Android.mk文件,插入LOCAL_CERTIFICATE := platform
3. 使用mm命令來編譯,生成的apk就有修改系統時間的職權范圍了。
第2個方法:
1. 同上,插入android:sharedUserId="android.uid.system"這個屬性。
2. 使用eclipse編譯出apk文件,但是這個apk文件是不能用的。
3. 使用系統的platform密碼鑰匙來給apk文件重新簽名。signapk platform.x509.pem platform.pk8 input.apk output.apk