更新android时区数据

时间:2015-10-30 15:05:41

标签: android timezone kernel android-4.4-kitkat icu

我在设备上运行 Android 4.4.3 ,当然它已经过时区了,我正在尝试更新/ strong / usr / share / zoneinfo中的 tzdata 。但是,立即替换文件不会更新时区。

由于 ICU 保留了自己的时区数据副本,我们也必须将其替换(根据Google AOSP小组)。更新的数据文件为Update for ICUUpdate for bionic

但是,当我构建并替换 icu4c库(libicui18n.so和libicuuc.so)并将icudt51l.dat替换为icudt53l.dat 时,系统无法初始化ICU。

我已经尝试解压缩icudt53l.dat并在旧的icudt51l.dat中推送其* .res文件但是也失败了因为ICUPKG工具在打包之前会检查res文件的校验和。

我关注XDA link to update tzdata但该方法失败,因为他们使用tzdata创建了 zoneinfo.dat,zoneinfo.idx,zoneinfo.version 文件。但系统在/ system / usr / share / zoneinfo

中查找 tzdata本身

我不是时区或ICU专家,如果我朝错误的方向寻求帮助,请指点我。

1 个答案:

答案 0 :(得分:4)

没有必要更新ICU或Bionic,您只需使用更新的文件更改tzdata文件即可。您也不需要从IANA时区数据手动生成文件tzdata。您可以从bionic repo获取已经构建的tzdata。您可以在最新版本的Time Zone Data v.2015g here找到更新文件。

下载文件后,将其复制到您的设备上(例如/sdcard/Download/tzdata),然后打开一个shell:

shell@maguro:/ $ su
shell@maguro:/ $ setprop persist.sys.timezone Europe/Istanbul
shell@maguro:/ $ date -s 20151106.130000
Fri Nov  6 13:00:00 EET 2015
root@maguro:/ # mount -o rw,remount /system
root@maguro:/ # cd /system/usr/share/zoneinfo/
root@maguro:/system/usr/share/zoneinfo # cp tzdata tzdata.bak
root@maguro:/system/usr/share/zoneinfo # cp /sdcard/Download/tzdata tzdata
root@maguro:/system/usr/share/zoneinfo # chmod 644 tzdata
root@maguro:/system/usr/share/zoneinfo # date
Fri Nov  6 14:00:47 EEST 2015

如果在此之后它仍然无效:

root@maguro:/ # cd /data/misc/zoneinfo/
root@maguro:/data/misc/zoneinfo # cp tzdata tzdata.bak
root@maguro:/data/misc/zoneinfo # cp /sdcard/Download/tzdata tzdata
root@maguro:/data/misc/zoneinfo # chmod 644 tzdata

正如您所看到的,更新后的tzdata 11月6日欧洲/伊斯坦布尔的时区从EET更改为EEST,因为在2015年版本中土耳其的夏令时从10月25日到11月8日,后退。