【问题标题】:Update android time zone data更新android时区数据
【发布时间】:2015-10-30 15:05:41
【问题描述】:

我在我的设备上运行 Android 4.4.3,当然它有过时的时区,我正在尝试更新 /system/usr/share/zoneinfo 中的 tzdata强>。但是直接替换文件并不会更新时区。

由于 ICU 保留了自己的时区数据副本,因此我们也必须替换它(根据 Google AOSP 团队的说法)。更新后的数据文件为Update for ICU和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 专家,如果我看错了方向并提供帮助,请指点我。

【问题讨论】:

  • 您是要更新 os、icu 还是两者都更新?
  • 我只想更新 icu,但如果操作系统的任何其他组件依赖于 ICU 版本,我不介意更新操作系统。
  • ICU 用户指南中的Updating the Time Zone Data 是否回答了您的问题?
  • 我尝试将 metaZones.res、timezoneTypes.res、windowZones.res 和 zoneinfo64.res 打包到我设备上的当前 icudt51l.dat 中。也改了对应的tzdata还是没有效果。

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


【解决方案1】:

无需更新 ICU 或 Bionic,您只需将 tzdata 文件更改为更新后的文件即可。此外,您不需要从 IANA 时区数据手动生成文件 tzdata。您可以从bionic repo 中获取已构建的tzdata。您可以找到Time Zone Data v. 2015g here最新版本的更新文件。

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

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,因为在 v. 2015g 中,土耳其的 DST 回退从 10 月 25 日移至 8 日11 月。

【讨论】:

  • +1 我已经替换了 tzdata 十几次,但从未执行过来自 adb 的 date 命令。我注意到莫斯科的日期向后移动了 1 小时,这是正确的。但是,设置应用程序仍然显示 GMT+4 而不是 GMT+3。我删除了 dalvik-cache,现在它显示 GMT+3,之前从没想过这个。你知道哪些系统调用依赖于 ICU 吗?
  • 很遗憾,我没有找到依赖于 ICU 的系统调用列表。我试图在 android repo 的 JAVA 部分中进行快速搜索,在ZoneGetter.java 中唯一提到 ICU 时区的似乎是TimeZoneNames。在其他地方,它直接使用tzdata 文件,例如ZoneInfoDB.java
猜你喜欢
  • 2019-08-14
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2016-04-10
  • 2010-12-05
  • 1970-01-01
  • 2020-08-16
  • 2010-12-31
相关资源
最近更新 更多