前言
         欢迎大家我分享和推荐好用的代码段~~
声明
         欢迎转载,但请保留文章原始出处:
         CSDN:
http://www.csdn.net
         雨季o莫忧离:http://blog.csdn.net/luckkof

正文

 

    在 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提示错误是一样的。

更多相关文章

  1. android程序目录结构及分析
  2. Android(安卓)安全机制
  3. 在android上使用valgrind检测内存泄漏
  4. linux系统和android系统的区别
  5. androidstudio搭建flutter环境,遇到的问题
  6. android 中遥控器键值的添加和修改
  7. Android系统中UID
  8. Android公共库(缓存,下拉ListView,下载管理,Pro 静默安装,root运
  9. 高通平台android 环境配置编译及开发经验总结【转】

随机推荐

  1. android 10.0拍照显示并上传服务器
  2. 弹球效果动画
  3. android:屏幕自适应
  4. Android(安卓)Password Field Example
  5. android环境搭建
  6. 聊聊Android切图
  7. Android帧布局实现霓虹灯的效果
  8. android半透明activity设置
  9. Android命令大全
  10. Android(安卓)开发最佳实践