美文网首页
Android源码分析(九)-----如何修改Android系统

Android源码分析(九)-----如何修改Android系统

作者: 一莫言一 | 来源:发表于2019-05-16 16:04 被阅读0次

    一 : 修改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简述

    相关文章

      网友评论

          本文标题:Android源码分析(九)-----如何修改Android系统

          本文链接:https://www.haomeiwen.com/subject/wpebaqtx.html