【Android】时区规则库tzdata更新
1 背景:
最近我遇到墨西哥城时区,会出现夏令时,而墨西哥城在2022年底都已经取消夏令时了。
看起来是要更新RK3588上的时区库,我的还是2021a,而现在都已经2024年了
这样能看版本号:
cat /system/usr/share/zoneinfo/tz\_version
比如当前的看是:
005.001|2021a|001
另外下面也有tzdata文件,是实际的规则文件
2. 更新
(1) 下载最新的文件,在iana下载
我下载的 2024b (Released 2024-09-04), 下载Data类型的即可
(2) 放入ROM编译
-
首先: copy到system/timezone/input_data/iana,并删除旧的文件, 这里就把下载好的 tzdata2024b.tar.gz放进去,把原来老的其他文件全删了就是
-
修改下
system/timezone/input_data/android/countryzones.txt中的版本号,修改为对应的版本;比如我这里2024b
- 编译
首先source build/envsetup.sh 和 lunch这些执行完后,
到system/timezone/ 下
执行:
./update-tzdata.py
如果遇到文件校验的报错:
E: Stopping due to fatal condition
com.android.libcore.timezone.util.Errors$HaltExecutionException: One or more countries failedat com.android.libcore.timezone.util.Errors.throwIfError(Errors.java:123)at com.android.libcore.timezone.tzlookup.TzLookupGenerator.createOutputData(TzLookupGenerator.java:309)at com.android.libcore.timezone.tzlookup.TzLookupGenerator.execute(TzLookupGenerator.java:163)at com.android.libcore.timezone.tzlookup.TzLookupGenerator.main(TzLookupGenerator.java:98)
I: Issues:
[country=aq, id=Antarctica/Casey, offset=11:00, shownInPicker=true]: Offset mismatch: You will want to confirm the ordering for aq still makes sense. Raw offset for Antarctica/Casey is 08:00 and not 11:00 at 2025年7月2日 UTC 下午12:00:00
[country=aq, id=Antarctica/Vostok, offset=6:00, shownInPicker=true]: Offset mismatch: You will want to confirm the ordering for aq still makes sense. Raw offset for Antarctica/Vostok is 05:00 and not 06:00 at 2025年7月2日 UTC 下午12:00:00Traceback (most recent call last):File "./update-tzdata.py", line 292, in <module>main()File "./update-tzdata.py", line 275, in mainBuildTzlookupAndTzIds(iana_data_dir)File "./update-tzdata.py", line 206, in BuildTzlookupAndTzIdstzlookup_dest_file, tzids_dest_file])File "/usr/lib/python2.7/subprocess.py", line 541, in check_callraise CalledProcessError(retcode, cmd)
就再修改下 update-tzdata.py , 把后面文件的校验数据的给注释掉即可
我这就能编译过了,然后呢,在回到ROM根目录下,完整再编译一次ROM,最终把生成的super.img烧录就能验证了.
注意:在py脚本执行后,是会在 system/timezone/output_data/iana下生成tzdata的,但是直接push效果验证不了,要烧录对应的img哈。低版本可能是system.img,我是android 12,烧的super.img