Android 如何使Android應用程序獲取系統權限 M

正文

 

    在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函數來修改系統時間,可惜無論你怎麼調用這個函數都是沒用的,無論模擬器還是真機,在logcat中總會得到"Unable to open alarm driver: Permission denied ".這個函數需要signatureOrSystem等級的permission才能使用。有兩種方法可以處理,來得到系統權限。

第一個方法直接修改編譯,需要在Android系統源碼的環境下用make來編譯:

   1. 在應用程序的AndroidManifest.xml中的manifest節點中加入android:sharedUserId="android.uid.system"這個屬性。

   2.  修改它的Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行

   3.  使用mm命令來編譯,生成的apk就有修改系統時間的權限瞭。

第二個方法使用系統簽名文件來處理:

1. 同上,和系統相同的uid. Android 的系統用戶id是android.uid.system , 在Manifest裡面添加android:sharedUserId="android.uid.system"。

2. 相同的系統簽名。包簽名需要用到android提供的signapk,但很遺憾,我們的開發包裡面並沒有,需要您手動的從源碼裡面編譯,在2.2的版本中,源碼路徑是:froyo\build\tools\signapk。

然後從源碼路徑froyo\build\target\product\security中取出兩個系統簽名文件platform.pk8 and platform.x509.pem. 

就可以對eclipse編譯好的apk簽名瞭,(註: 編譯好的apk在bin目錄下)。

形式是:

Java –jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk.

完成這兩部後,在運行之前,您還要從模擬器上卸載掉原來的相同程序,因為簽名改瞭,不然會報錯不能安裝。

對於在模擬器上進行setCurrentTimeMillis 雖然我們能夠修改模擬器的時間瞭,這個方法的返回值仍然是false, 可能是不能真正的修改系統的時鐘吧。在Log中的提示是:

08-16 08:29:24.307: WARN/SystemClock(125): Unable to set rtc to 1281918564: Invalid argument. 

這個和android模擬器裡面自帶的setting裡面的修改時間Log提示錯誤是一樣的。

發佈留言