巴西从2019年宣布停止使用夏令时。Android8.1原生代码巴西圣保罗时区还是使用夏令时的,所以2021年显示时间就不对,快了一小时。
发现Android 10的巴西时区是正确的GMT-03:00,没有夏令时。于是从Android 10复制一份system/timezone/input_data/iana/tzdata2019c.tar.gz。解压缩,用里面的southamerica文件跟Android 8.1的tzdata2017b.tar.gz解压缩到tzdata2017b里的southamerica文件对比。
只修改Brazil的不同部分为新的。再重新压缩tzdata2017b为tzdata2017b.tar.gz,替换到旧的。在system/timezone/执行./update-tzdata.py脚本,会更新和生成:
external/icu
modified: icu4c/source/data/misc/zoneinfo64.txt
modified: icu4c/source/stubdata/icudt58l.dat
modified: icu4j/main/shared/data/icudata.jar
modified: icu4j/main/shared/data/icutzdata.jar
system/timezone
modified: input_data/iana/tzdata2017b.tar.gz
modified: output_data/distro/distro.zip
modified: output_data/iana/tzdata
modified: output_data/icu_overlay/icu_tzdata.dat
这时编译系统make -j16发现巴西时区圣保罗时区就更新成GMT-03:00了。问题解决。提交以上8个文件。