我在设备上运行 Android 4.4.3 ,当然它已经过时区了,我正在尝试更新/ strong / 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并在旧的icudt51l.dat中推送其* .res文件但是也失败了因为ICUPKG工具在打包之前会检查res文件的校验和。
我关注XDA link to update tzdata但该方法失败,因为他们使用tzdata创建了 zoneinfo.dat,zoneinfo.idx,zoneinfo.version 文件。但系统在/ system / usr / share / zoneinfo
中查找 tzdata本身我不是时区或ICU专家,如果我朝错误的方向寻求帮助,请指点我。
答案 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日,后退。