Android时区规则库更新

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类型的即可

image.png

(2) 放入ROM编译

  1. 首先: copy到system/timezone/input_data/iana,并删除旧的文件, 这里就把下载好的 tzdata2024b.tar.gz放进去,把原来老的其他文件全删了就是

  2. 修改下

system/timezone/input_data/android/countryzones.txt中的版本号,修改为对应的版本;比如我这里2024b

image.png
  1. 编译

首先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 failed
        at 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:00

Traceback (most recent call last):
  File "./update-tzdata.py", line 292, in <module>
    main()
  File "./update-tzdata.py", line 275, in main
    BuildTzlookupAndTzIds(iana_data_dir)
  File "./update-tzdata.py", line 206, in BuildTzlookupAndTzIds
    tzlookup_dest_file, tzids_dest_file])
  File "/usr/lib/python2.7/subprocess.py", line 541, in check_call
    raise CalledProcessError(retcode, cmd)

就再修改下 update-tzdata.py , 把后面文件的校验数据的给注释掉即可

image.png

我这就能编译过了,然后呢,在回到ROM根目录下,完整再编译一次ROM,最终把生成的super.img烧录就能验证了.

注意:在py脚本执行后,是会在 system/timezone/output_data/iana下生成tzdata的,但是直接push效果验证不了,要烧录对应的img哈。低版本可能是system.img,我是android 12,烧的super.img

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容