如何使Android应用程序获取系统权限 来修改系统时间

昨天搞了setCurrentTimeMillis 不能修改时间的问题。不甘心今天上午又搞上了。

主要原因是因为SystemClock的setCurrentTimeMillis 的permission是signatureOrSystem等级的,直接使用user-permission没有作用。需要做两方面的事情:

一方面是相同的uid. Android 的系统用户id是android.uid.system , 在Manifest里面添加android:sharedUserId="android.uid.system"。

二方面是相同的包签名。包签名需要用到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提示错误是一样的。


你可能感兴趣的:(eclipse,android,Security)