更新 android 个时区数据

Update android time zone data

我在我的设备上 运行 Android 4.4.3 当然它有过时的时区,我正在尝试更新 [= /system/usr/share/zoneinfo 中的 25=]tzdata。但是,立即替换文件不会更新时区。

由于 ICU 保留了自己的时区数据副本,我们也必须替换它(根据 Google AOSP 团队)。更新后的数据文件为 Update for ICU and Update for bionic

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

我曾尝试解压 icudt53l.dat 并将其 *.res 文件推送到旧的 icudt51l.dat 中,但同样失败,因为 ICUPKG 工具会在打包之前检查 res 文件的校验和。

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

中寻找tzdata本身

我不是时区或ICU专家,如果看错了方向,请指点我并提供帮助。

无需更新 ICU 或 Bionic,只需将 tzdata 文件更改为更新后的文件即可。此外,您不需要从 IANA 时区数据手动生成文件 tzdata。您可以从 bionic repo. You can find the update file to the last version of Time Zone Data v. 2015g here.

中获取已经构建的 tzdata

下载文件后将其复制到您的设备上(例如 /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 日 Europe/Istanbul 的时区从 EET 更改为 EEST 因为在 v. 2015g 中土耳其的 DST从 10 月 25 日到 11 月 8 日回退。