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編譯
首先: copy到system/timezone/input_data/iana,并刪除舊的文件, 這里就把下載好的 tzdata2024b.tar.gz放進去,把原來老的其他文件全刪了就是
修改下
system/timezone/input_data/android/countryzones.txt中的版本號,修改為對應的版本;比如我這里2024b
image.png
- 編譯
首先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