更新android时区数据

更新android时区数据,android,timezone,kernel,android-4.4-kitkat,icu,Android,Timezone,Kernel,Android 4.4 Kitkat,Icu,我正在我的设备上运行安卓4.4.3,当然它的时区已经过时,我正在尝试更新/system/usr/share/zoneinfo中的tzdata。但是,直接替换文件不会更新时区 由于ICU拥有自己的时区数据副本,我们也必须替换它(根据谷歌AOSP团队)。更新的数据文件为和 但是,当我构建并替换icu4c库(libicui18n.so和libicuuc.so)并将icudt51l.dat替换为icudt53l.dat时,系统无法初始化ICU 我曾尝试解包icudt53l.dat并将其*.res文件放入

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

由于ICU拥有自己的时区数据副本,我们也必须替换它(根据谷歌AOSP团队)。更新的数据文件为和

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

我曾尝试解包icudt53l.dat并将其*.res文件放入旧的icudt51l.dat中,但也失败了,因为ICUPKG工具在打包之前检查了res文件的校验和

我采用了这种方法,但失败了,因为它们使用tzdata创建了zoneinfo.dat、zoneinfo.idx、zoneinfo.version文件。但是系统在/system/usr/share/zoneinfo中查找tzdata本身


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

无需更新ICU或仿生,您只需用更新的文件更改
tzdata
文件即可。此外,您不需要从IANA时区数据手动生成文件
tzdata
。您可以从中获取已构建的
tzdata
。您可以找到时区数据v的最新版本的更新文件。2015g

下载文件后,将其复制到设备上(例如,
/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日退后到11月8日。

您是想更新操作系统、icu还是两者都要更新?我只想更新icu,但如果操作系统的任何其他组件都依赖于icu版本,我不介意更新操作系统。ICU用户指南回答了您的问题吗?我尝试将metaZones.res、timezoneTypes.res、windowZones.res和ZoneInfo 64.res打包到设备上的当前icudt51l.dat中。还更改了相应的tzdata,但仍然无效。尝试此+1我已经替换了十几次tzdata,但从未执行adb的date命令。我注意到莫斯科的日期向后移了1小时,这是正确的。然而,设置应用程序仍然显示GMT+4而不是GMT+3。我删除了dalvik缓存,现在显示的是GMT+3,之前从未想过这一点。你知道哪些系统调用依赖于ICU吗?不幸的是,我没有找到依赖于ICU的系统调用列表。我试图在android repo的JAVA部分进行快速搜索,唯一提到ICU时区的地方似乎是中的
TimeZoneNames
。在其他地方,它直接使用
tzdata
文件,例如在