如何使Android应用程序获取系统权限
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
如何使android应用程序获取系统权限
[SOLUTION]
在android的API中有提供SystemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都
是没用的,无论模拟器还是真机,在logcat中总会得到"UnabletoopenalARMdriverermissiondenied".这个函数需要
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.pk8andplatform.x509.pem.
就可以对eCLIpse编译好的apk签名了,(注:编译好的apk在bin目录下)。
形式是:
Java–jarsignapk.jarplatform.x509.pemplatform.pk8input.apkoutput.apk.
完成这两部后,在运行之前,您还要从模拟器上卸载掉原来的相同程序,因为签名改了,不然会报错不能安装。
对于在模拟器上进行setCurrentTimeMillis虽然我们能够修改模拟器的时间了,这个方法的返回值仍然是false,可能是
不能真正的修改系统的时钟吧。在Log中的提示是:
08-1608:29:24.307:WARN/SystemClock(125):Unabletosetrtcto1281918564:Invalidargument.
这个和android模拟器里面自带的setting里面的修改时间Log提示错误是一样的。
