Android13—修改默认时区(MTK平台)

问题

客户产品要买往其他国家,需要修改默认时区为芝加哥,具体的时区代码在我的另一篇文章http://t.csdn.cn/GaYfD

代码地址

a/alps/device/mediatek/system/common/device.mk

具体代码

PRODUCT_SYSTEM_DEFAULT_PROPERTIES += persist.sys.timezone = America/Chicago

代码分析

在平时的情况下一般修改时区的位置应该在alps/devices/mediateksample/项目文件夹/system.prop里面,mediateksample目录下没有项目文件夹,只能另寻他法。

代码编译的结果build.prop:out_sys\target\product\mssi_64_cn_armv82\system\build.prop

具体解法

1.查看当前时区 

adb shell getprop persist.sys.timezone

2.查询以前修改方法(880)

lyz 添加上海时区
author	[email protected] <[email protected]>	
Tue, 16 May 2023 19:37:50 +0800 (19:37 +0800)
committer	[email protected] <[email protected]>	
Tue, 16 May 2023 19:37:50 +0800 (19:37 +0800)
alps/device/mediateksample/w869_cn/buildinfo_project.sh		patch | blob | history
alps/device/mediateksample/w869_cn/custom.prop		patch | blob | history
diff --git a/alps/device/mediateksample/w869_cn/buildinfo_project.sh b/alps/device/mediateksample/w869_cn/buildinfo_project.sh
index f0a7620..352afbb 100755 (executable)
--- a/alps/device/mediateksample/w869_cn/buildinfo_project.sh
+++ b/alps/device/mediateksample/w869_cn/buildinfo_project.sh
@@ -8,9 +8,6 @@ echo "ro.config.lock_wallpaper="system/media/default_lockWallpaper.png""
 
 echo "ro.config.ringtone="WP_ringtone.mp3""
 
-echo "persist.sys.timezone="Asia/Shanghai""
-
-
 echo "qemu.hw.mainkeys="0""
 
 echo "# end build properties"
diff --git a/alps/device/mediateksample/w869_cn/custom.prop b/alps/device/mediateksample/w869_cn/custom.prop
index 36aa039..11af18f 100755 (executable)
--- a/alps/device/mediateksample/w869_cn/custom.prop
+++ b/alps/device/mediateksample/w869_cn/custom.prop
@@ -24,4 +24,6 @@ ro.vendor.xw.lyz_headset=0
 ro.vendor.xw.lyz_backlight=0
 ro.vendor.xw.lyz_memory=0
 ro.vendor.xw.lyz_sim_card=0
-ro.vendor.xw.lyz_storage_equipment=0
\ No newline at end of file
+ro.vendor.xw.lyz_storage_equipment=0
+
+persist.sys.timezone=Asia/Shanghai

3.研究新方法

修改默认时区就是在device里面添加一个宏,只要把这个宏(persist.sys.timezone = America/Chicago)给编译到了就可以了,在这里面可以看到编译结果(alps\out_sys\target\product\mssi_64_cn_armv82\system\build.prop)找到类似的宏写法,在这个(alps/device/mediatek/system/common/device.mk)文件里面有一个类似的宏(PRODUCT_SYSTEM_DEFAULT_PROPERTIES += persist.sys.fuse.passthrough.enable=true),模仿他的写法(PRODUCT_SYSTEM_DEFAULT_PROPERTIES += persist.sys.timezone = America/Chicago)。然后编译,发现成功写入,验证正确,需求完成。

git 提交记录:

修改默认时区为America/Chicago
[mt6877_T0_V5_2.git] / alps / device / mediatek / system / common / device.mk
diff --git a/alps/device/mediatek/system/common/device.mk b/alps/device/mediatek/system/common/device.mk
index 5bf3254..49f950c 100755 (executable)
--- a/alps/device/mediatek/system/common/device.mk
+++ b/alps/device/mediatek/system/common/device.mk
@@ -3884,7 +3884,7 @@ endif
 
 # Enable FUSE passthrough on the device
 PRODUCT_SYSTEM_DEFAULT_PROPERTIES += persist.sys.fuse.passthrough.enable=true
-
+PRODUCT_SYSTEM_DEFAULT_PROPERTIES += persist.sys.timezone = America/Chicago
 # Configure SurfaceFlinger sf-duration and app-duration for backpressure and latchsignaledbuffer mechanism
 PRODUCT_SYSTEM_DEFAULT_PROPERTIES += debug.sf.use_phase_offsets_as_durations=1
 PRODUCT_SYSTEM_DEFAULT_PROPERTIES += debug.sf.late.sf.duration=27600000

旧的修改时区方法

Android 修改默认时区
首先介绍应用程序修改 : 

复制代码
AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            mAlarmManager.setTimeZone("America/Santiago");// Asia/Taipei//GMT+08:00
            // mAlarmManager.setTimeZone("Asia/Taipei");
            TimeZone tz = TimeZone.getDefault();
            
            // tz.setID("GMT+08:00");//

            Toast.makeText(
                    this,
                    "zone : " + tz.getID() + " itz : "
                            + tz.getTimeZone("GMT+08:00"), Toast.LENGTH_SHORT)
                    .show();
复制代码
注意下面的一句 :

mAlarmManager.setTimeZone("America/Santiago");
"America/Santiago" 是XML一个ID值,这个ID值来自 : 下面xml中id后面的赋值

<timezone id="Pacific/Majuro">马朱罗</timezone>
    <timezone id="Pacific/Midway">中途岛</timezone>
    <timezone id="Pacific/Honolulu">檀香山</timezone>
    <timezone id="America/Anchorage">安克雷奇</timezone>
上面只列出部分项.

修改后,进入Setting->Date & Time->Select time zone项,既可以看到结果.

 

其次可以通过系统修改,通过系统修改是修改系统默认值:

Android 系统默认时区为GMT + 00:00,在设置中的“日期和时间”中可以看到,下面是修改默认时区的方法。

在Android源码中找到Device/(设备或平台名称)/(这里可能还有一层是编译的代号之类的吧)/system.prop 

 

在其中添加,若已存在则修改为 persist.sys.timezone=Asia/Shanghai

 

persist.sys.timezone属性的对应值在如下文件中,frameworks\base\core\res\res\xml\time_zones_by_country.xml

这个xml文件中可以找到中国所在的 GMT + 8:00时区的对应值

复制代码
复制代码
 <!-- CHINA, 8:00 -->

    <timezone code="cn">Asia/Shanghai</timezone>
    <timezone code="cn">Asia/Harbin</timezone>
    <timezone code="cn">Asia/Chongqing</timezone>
    <timezone code="cn">Asia/Urumqi</timezone>
    <timezone code="cn">Asia/Kashgar</timezone>
复制代码
复制代码
 

修改完之后需要重新编译整个系统,编译后的结果在/out/target/product/(以设备平台名称编译版本命名的文件夹)/system/build.prop中可以看到。

 

system.prop 这个文件中还可以修改其他一些默认属性,例如默认的显示语言和国家区域如下:

ro.product.locale.language=zh ro.product.locale.region=CN

猜你喜欢

转载自blog.csdn.net/m0_66587877/article/details/131574973