一 : 修改Android系統默認時間
源碼路徑:frameworks/base/services/java/com/android/server/SystemServer.java
主要變量EARLIEST_SUPPORTED_TIME
// The earliest supported time. We pick one day into 1970, to
// give any timezone code room without going into negative time.
private static final long EARLIEST_SUPPORTED_TIME = 1514764800000L;//20180101 00:00:00
通過SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME)設置系統時間,只需要修改EARLIEST_SUPPORTED_TIME變量的值。
private void run() {
try {
traceBeginAndSlog("InitBeforeStartServices");
// If a device's clock is before 1970 (before 0), a lot of
// APIs crash dealing with negative numbers, notably
// java.io.File#setLastModified, so instead we fake it and
// hope that time from cell towers or NTP fixes it shortly.
if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {
Slog.w(TAG, "System clock is before 1970; setting to 1970.");
SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);
}
設置系統默認時間這段代碼請放在startOtherServices()之后,否則無效。
// Start services.
try {
traceBeginAndSlog("StartServices");
startBootstrapServices();
startCoreServices();
startOtherServices();
//add by jasun@180730 for default time start
if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {
Slog.w(TAG, "System clock is before 2018.; setting to 2018.");
SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);
}
//add by jasun@180730 for default time end
SystemServerInitThreadPool.shutdown();
} catch (Throwable ex) {
Slog.e("System", "******************************************");
Slog.e("System", "************ Failure starting system services", ex);
throw ex;
} finally {
traceEnd();
}
二 : 時間轉換為UNIX時間戳
EARLIEST_SUPPORTED_TIME變量值如何獲取?
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 // Android默認EARLIEST_SUPPORTED_TIME值為86400×1000
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
喜歡源碼分析系列可參考其他文章:
Android源碼分析(一)-----如何快速掌握Android編譯文件
Android源碼分析(二)-----如何編譯修改后的framework資源文件
Android源碼分析(三)-----系統框架設計思想
Android源碼分析(四)-----Android源碼編譯及刷機步驟
Android源碼分析(五)-----如何從架構師的角度去設計Framework框架
Android源碼分析(六)-----藍牙Bluetooth源碼目錄分析
Android源碼分析(七)-----如何解決java編譯版本問題
Android源碼分析(八)-----系統啟動流程&IPC簡述
