Android 修改系统时间

利用系统权限修改系统时间,将应用伪装成系统应用

Posted by GG on June 29, 2017

前言

最近工作中碰到修改系统时间这个问题,现在解决了,顺便写篇博客记录一下。

正文

问题来源

我在代码中使用下面这段程序修改系统时间

Calendar c = Calendar.getInstance();
c.set(2010, 1, 1, 12, 00, 00);
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.setTime(c.getTimeInMillis());     

在AndroidManifest.xml中加入了如下权限

<uses-permission android:name="android.permission.SET_TIME"/>   

但是却被无情的报错了,后来查了很多资料,有了解决方案。

解决思路

将我们的应用伪装成系统的应用

实现步骤

共享系统UID
使用系统签名(匹配签名需要公钥和密钥两个文件生成keystore)

具体实现

1、修改AndroidManifest.xml

我们在AndroidManifest.xml文件的manifest节点中增加如下属性,来共享系统uid

android:sharedUserId="android.uid.system"  

2、利用IDE生成apk文件

具体步骤我在这里就不多说明了,

3、利用签名工具生成系统签名apk

这里我用了一个工具来生成系统签名apk,下载这个签名工具文件,下载后解压这个工具的目录结构如下图:

我们将导出的apk放到上图所示的文件夹中

如下图:

然后我们打开cmd控制台,进入上图所示的目录中,按以下格式输入命令:

java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk  

其中input.apk为要签名的apk文件, output.apk为签名后输出的apk文件,命令执行后在当前目录下会多一个apk,这个apk就是带有系统签名的一个apk。

4、安装apk

首先,我们先要卸载的手机上原来安装的apk文件,然后,在命令行中输入如下命令安装带有系统签名的apk文件。

adb install new.apk  

前提是命令行当前目录是带有系统签名apk文件所在的目录,如果安装后提示”Success”就是安装成功了。

运行

运行测试成功,系统时间成功变成自己在代码中设置的时间。

以上就实现了Android利用系统权限实现手机重启的功能。