在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真 机,在logcat中总会得到"Unable to open alarm driver: Permission denied ".这个函数需要root权限或者运行与系统进程中才可以用。
本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。
2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行
3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。
第二个方法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:
1. 同上,加入android:sharedUserId="android.uid.system"这个属性。
2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
3. 用压缩软件打开apk文件,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件。
4. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,首先找到密钥文件,在我的Android源码目录中的位置 是"build\target\product\security",下面的platform.pk8和platform.x509.pem两个文件。然 后用Android提供的Signapk工具来签名,signapk的源代码是在"build\tools\signapk"下,用法为"signapk platform.x509.pem platform.pk8 input.apk output.apk",文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。
这样最后得到的apk和第一个方法是一样的。
最后解释一下原理,首先加入android:sharedUserId="android.uid.system"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,这样就 有权限来修改系统时间了。
只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform key,就是上面第二个方法提到的platform.pk8和platform.x509.pem两个文件。用这两个key签名后apk才真正可以放入系 统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。
这也有一个问题,就是这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到platform.pk8 和platform.x509.pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android中的key 来签名,程序在模拟器上运行OK,不过放到G3上安装直接提示"Package ... has no signatures that match those in shared user android.uid.system",这样也是保护了系统的安全。
最最后还说下,这个android:sharedUserId属性不只可以把apk放到系统进程中,也可以配置多个APK运行在一个进程中,这样可以共享数据,应该会很有用的。
以上部分来自: http://blog.csdn.net/liujian885/archive/2010/03/22/5404834.aspx
应用调试注解:
1. signapk.jar:signapk可执行文件,在out/host/linux-x86/framework/signapk.jar;
2. signapk用法:到out/host/linux-x86/framework/目录下执行
java -jar ./signapk platform.x509.pem platform.pk8 input.apk output.apk;
3. 在build\target\product\security\下有platform、shared、testkey、media四个密钥,经验证,如 不用android.uid.system, 应采用shared key,如android.uid.phone;
4. 据网友验证,不需要删掉META-INF目录下的CERT.SF和CERT.RSA两个文件,直接signapk就可以。
如:http://hi.baidu.com/donghaozheng/blog/item/30a00d4f9fca873baec3ab69.html
=======================================================
做Home程序的时候,由于需要提供时间日期的设置功能,所以需要修改系统时间。修改时间的代码很简单,就那么一句,但是要让它生效可就不那么容易了。
修改系统时间的条件是,你的程序的user id必须跟system一样,也就是说,需要system权限。
怎样达到这个条件呢?
Android提供了sharedUserId来设置程序归属哪个user id,我们在程序的manifest文件里面加上如下属性
Xml代码
android:sharedUserId="android.uid.system"
android:sharedUserId="android.uid.system" 这样还不行,因为这样编译出来的apk安装不了。还需要签名。
签名需要用到的文件是源码中的build\target\product\security目录下的platform.pk8和platform.x509.pem两个文件。然后使用signapk.jar来签名。这三个文件打包放到附件了。
在cmd下面,运行
java -jar signapk.rar platform.x509.pem platform.pk8 a.apk a_signed.apk
a.apk是待签名的apk,a_signed.apk是签名后的apk。这样,如果你的代码里面有用到需要platform权限的功能,就可以畅通无阻了。
当然,可能不同的系统platform.pk8和platform.x509.pem文件不一样,但是我手里的三个平板电脑都是用这两个文件签名的,运行正常。
分享到:
相关推荐
这是获取系统权限的相关工具和测试源码,可以在系统没有root的条件下,修改系统时间
Android修改系统时间(应用程序获得系统权限)!!!对你有所帮助
Android修改系统文件访问权限,在init.rc里配置service,通过启动service去执行脚本,在脚本里做修改文件访问权限操作。应用通过jni启动service。
用于获取Android程序的系统权限包含文件platform.x509.pem platform.pk8 signapk.jar 经过测试简单,好用
获取手机上android应用程序的权限列表,在打印log里,log的TAG是jishen
资源名称:Android经典应用程序开发内容简介:韩超编著的《Android经典应用程序开发》内容理论联系实际,系统化组织。全书由8章组成,涵盖了Android经典应用程序开发的各个方面,知识量巨大,技术要点清晰,结构紧凑...
《Android应用程序开发教程(第2版)》教学课件01Android系统与开发环境.pdf《Android应用程序开发教程(第2版)》教学课件01Android系统与开发环境.pdf《Android应用程序开发教程(第2版)》教学课件01Android系统与开发...
作 者: 张思民 著 ...《21世纪高等学校计算机基础实用规划教材:Android应用程序设计》可以作为高等院校及各类培训学校Android系统课程的教材,也可以作为学习Android程序设计的编程人员的自学用书。
android通过访问网络获取网络时间,并修改系统时间
自己整理的Android12版本的系统资源目录分析,包括各个目录对应的分支 ...frameworks:应用程序框架,Android系统核心部分,由Java和C++编写.pdf packages:应用程序包.pdf system:底层文件系统库、应用和组件.pdf
沙地机器人Android应用程序修改应用程序的权限Sandroid 是一个安卓应用程序,可用于在安装前查看、选择和修改任何应用程序所需的权限。 这使用户可以更好地控制他们的数据,并在安装任何未知应用程序时为其设备提供...
1. 开放源代码:Android 是基于 Linux 内核的开源操作系统,开发人员可以自由获取、使用和修改源代码。 2. 多样化的硬件设备支持:Android 支持多种硬件设备和屏幕尺寸,可以运行于手机、平板电脑、电视、手表等多种...
Android系统移植和应用程序开发,Android入门参考
在不刷root权限的情况下,如果想在应用层修改系统时间是比较复杂的。本资源是通过android:sharedUserId="android.uid.system",先打包apk,然后用压缩文件打开apk,删除META-INF文件夹下的CERT.SF和CERT.RSA,然后运行...
1.Android中获取所有应用程序列表信息 2.Android中获取系统应用程序列表信息 3.Android中获取第三方应用程序列表信息 4.Android中获取第三方应用程序列表信息
Magisk:Android 获取 Root 权限的工具。它可以快速、无痛地获得 Android 的超级用户权限,支持 Android 5.0 以上的设备。 介绍 Magisk是一套用于定制Android的开源...Zygisk:在每个Android应用程序的进程中运行代码
用一个ListView列表,显示Android系统中安装的应用程序信息 (包括本程序的图标,程序名,和版本号,并且非系统应用程序要在列表的右侧添加“卸载按钮”), 且点击按钮可提供卸载。 用另一个ListView显示系统应用...
本人想学习android1.5中系统应用程序如:联系人,发邮件,googlesearch,摄像,闹钟,日历,Mms,Music,Settings,Phone,Browser,HTMLViewer,IM等等android系统自带的应用程序.发现网上没有这些源码下载,于是自己用了...
主要介绍了android studio实现简单考试应用程序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下