android编译时间定制,修改Android系统时间为默认编译时间

修改Android系统时间为默认编译时间

为了修改android的默认时间。 在网上查询一些资料,发现有介绍在SystemServer.java 里修改的。 但发现在此处修改,并没有达到预期效果,经查询在AlarmManagerService.java 中设置系统的默认时间更为妥当。

下面是Android 8.1 中

frameworks/base/services/core/java/com/android/server/AlarmManagerService.java

的代码块。其中setKernelTime 即为设置系统的时间。

@Override

public void onStart() {

mNativeData = init();

mNextWakeup = mNextNonWakeup = 0;

// We have to set current TimeZone info to kernel

// because kernel doesn't keep this after reboot

setTimeZoneImpl(SystemProperties.get(TIMEZONE_PROPERTY));

// Also sure that we're booting with a halfway sensible current time

if (mNativeData != 0) {

final long systemBuildTime = Environment.getRootDirectory().lastModified();

if (System.currentTimeMillis() < systemBuildTime) {

Slog.i(TAG, "Current time only " + System.currentTimeMillis()

+ ", advancing to build time " + systemBuildTime);

setKernelTime(mNativeData, systemBuildTime);

}

}

.......

}

从这里可以看出,system会取当前时间与system分区文件夹的时间进行比较。 如果时间小于文件夹时间,那么就会改成文件夹时间。

因为我们的目的是要将系统默认时间从1970修改到较近的一个时间。

为保证原先的逻辑。

增加一个逻辑,使时间为编译时间。

我们这里修改代码如下

public void onStart() {

mNativeData = init();

mNextWakeup = mNextNonWakeup = 0;

// We have to set current TimeZone info to kernel

// because kernel doesn't keep this after reboot

setTimeZoneImpl(SystemProperties.get(TIMEZONE_PROPERTY));

// Also sure that we're booting with a halfway sensible current time

if (mNativeData != 0) {

long systemBuildTime = Environment.getRootDirectory().lastModified();

String CurrentTimeMillis = SystemProperties.get("ro.build.date.utc");

long defaultBuildTime = Long.parseLong(CurrentTimeMillis) * 1000;

Slog.i(TAG, "systemBuildTime " + systemBuildTime + "defaultBuildTime " + defaultBuildTime);

if (systemBuildTime < defaultBuildTime)

{

systemBuildTime = defaultBuildTime;

Slog.i(TAG, "Correct build time to " + systemBuildTime);

}

if (System.currentTimeMillis() < systemBuildTime) {

Slog.i(TAG, "Current time only " + System.currentTimeMillis()

+ ", advancing to build time " + systemBuildTime);

setKernelTime(mNativeData, systemBuildTime);

}

}

......

}

date 命令使用

为方便使用,附上date 命令的简单使用方式

Linux命令转换时间戳,如下:

$ date +%s --date 19700101 --utc // 1970-01-01 00:00 UTC

0

$ date +%s --date 20120101 --utc // 2012-01-01 00:00 UTC

1325376000

$ date +%s --date 20160101 --utc // 2016-01-01 00:00 UTC

1451606400

UNIX时间戳转换为具体日期

$ date --date=@86400 --utc

1970年 01月 02日 星期五 00:00:00 UTC

$ date --date=@1451606400 --utc

2016年 01月 01日 星期五 00:00:00 UTC

$ date --date=@1451606400

2016年 01月 01日 星期五 08:00:00 CST

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值