blob: 490de9b64bd187b00f7ea41f29a1b4e72fb2609c [file] [log] [blame]
Neil Fuller3830d702017-08-18 17:03:59 +01001This directory contains code, tools and data related to time zone rules data
2and updates.
Neil Fuller86e72c52017-06-12 15:36:06 +01003
Neil Fuller3830d702017-08-18 17:03:59 +01004Directory structure
5===================
6
Neil Fuller9bfe7122019-04-16 15:11:59 +01007apex
8 - Code related to the Android time zone update APEX file that can be used
9 to update time zone rules on Android devices.
10
11debug_tools
12 - Contains tools useful for debugging time zone issues on Android devices.
13
Neil Fuller3830d702017-08-18 17:03:59 +010014distro
15 - Code related to "distros", the collection of files that can be used to
16 update time zone rules on Android devices. See distro/README for details.
17
18input_data
19 - Contains files that provide inputs to the time zone rules update process.
20 Some files come from external sources and some are mastered in Android.
21 See also download-iana-data.py.
22
Neil Fuller9bfe7122019-04-16 15:11:59 +010023input_tools
24 - Contains tools that generate Android time zone files.
25
Neil Fuller3830d702017-08-18 17:03:59 +010026output_data
27 - Contains some derived files from the time zone rules update process and
Neil Fuller9bfe7122019-04-16 15:11:59 +010028 used in the Android system image, distros and APEX files. Some files are
29 also held by ICU - see also update-tzdata.py
Neil Fuller3830d702017-08-18 17:03:59 +010030
31testing
32 - Contains tools and scripts related to testing time zone update code. See
33 testing/data/README for details.
34
35tzdatacheck
36 - Source code for a binary executed during boot and used to ensure that a
37 device doesn't boot with incompatible/outdated time zone data installed
38 /data (as could happen if the device has just received an OTA upgrade).
39 It is also responsible for committing staged install/uninstalls.
40
Neil Fuller3830d702017-08-18 17:03:59 +010041
42
43Data file update tools
44======================
Neil Fuller86e72c52017-06-12 15:36:06 +010045
Neil Fuller9bfe7122019-04-16 15:11:59 +010046download-iana-files.py
Neil Fuller56166d32017-06-12 12:57:10 +010047 - A helper script run before update-tzdata.py.
Neil Fuller9bfe7122019-04-16 15:11:59 +010048 It downloads the latest tzdata and/or tzcode files from IANA and puts them
49 in the input_data/iana and input_tools/iana directories for use by the
50 update-tzdata.py script. See download-iana-files.py --help for more.
Neil Fuller56166d32017-06-12 12:57:10 +010051
Neil Fuller56166d32017-06-12 12:57:10 +010052update-tzdata.py
Neil Fuller35467e12017-06-12 16:55:44 +010053 - Regenerates the external/icu and system/timezone/output_data timezone
54 data files.
Neil Fuller56166d32017-06-12 12:57:10 +010055
Neil Fuller3830d702017-08-18 17:03:59 +010056See update instructions below for how these tools are used.
57
58IANA rules data changes
59=======================
60
61When IANA release new time zone rules, the update process is:
62
Neil Fuller9bfe7122019-04-16 15:11:59 +0100631) Run "download-iana-files.py --data" to update the input_data/iana file.
642) Make manual modifications to input_data/android files as needed.
Neil Fuller3830d702017-08-18 17:03:59 +0100653) There are sometimes code and metadata changes associated with tzdata updates
66 that should be applied to Android's copy of ICU.
67 e.g. see http://bugs.icu-project.org/trac/search?q=2015d
684) Run update-tzdata.py to regenerate the system/timezone/output_data,
Neil Fuller6a49edb2017-11-24 13:59:32 +000069 system/timezone/testing/data, external/icu runtime files and testing equivalents.
Neil Fuller45b6b1b2017-10-24 12:14:00 +0100705) Build/flash a device image with the changes and run CTS:
Neil Fuller3830d702017-08-18 17:03:59 +010071 cts-tradefed
72 run cts -m CtsLibcoreTestCases
73 run cts -m CtsIcuTestCases
74 (And any others that you think may have been affected)
Neil Fuller45b6b1b2017-10-24 12:14:00 +0100756) Upload, review, submit the changes from external/icu and system/timezone.
Neil Fuller3830d702017-08-18 17:03:59 +010076
77REMINDER: Any prebuilt apks of OEM-specific time zone data apps .apk files
78(i.e. ones that that contain distro files) will also need to be regenerated
79with a new version code / string and any OEM-specific tests should be run.
Neil Fuller9bfe7122019-04-16 15:11:59 +010080APEX files containing time zone data files will also need to be regenerated.
81
82IANA tools changes
83==================
84
85Occasionally it might be necessary / desirable to update the version of zic
86used to generate Android's tzdata file. For example, if IANA introduce new
87syntax to the text rules files (e.g. asia, north_america, etc.) or adds useful
88command-line arguments to zic. This should be needed very rarely.
89
90It is recommended that this is done independently of a data update to help
91isolate unexpected changes to behavior.
92
93Note that updating the version of zic used to create the tzdata file is
94independent of the copy of zic used by ICU. Also, bionic contains
95a copy of tzcode (e.g. localtime.c) which is based on yet another IANA
96release so compatibility and consistency is a consideration.
97
98The steps for updating IANA tools are similar to updating IANA data except
99you can use "download-iana-files.py --tools" instead of "--data" and testing
100should be more rigorous.
101
102REMINDER: As above, having updated the tooling then all binaries that contain
103tzdata should also be regenerated. e.g. APK and APEX files.
Neil Fuller3830d702017-08-18 17:03:59 +0100104
105
Neil Fuller9bfe7122019-04-16 15:11:59 +0100106Time Zone Data Set Versioning
107=============================
Neil Fuller3830d702017-08-18 17:03:59 +0100108
Neil Fuller9bfe7122019-04-16 15:11:59 +0100109Android needs various files to be updated to take a time zone data update.
110These files come from various sources and we needed a concise shorthand
111to indicate compatibility between a set of files and an Android release. This is
112known as the "Time Zone Data Set Version". Currently we expect to increment this
113version with every dessert release, though this may change in future.
Neil Fuller3830d702017-08-18 17:03:59 +0100114
Neil Fuller9bfe7122019-04-16 15:11:59 +0100115The idea of a single version to describe time zone data updates was first
116introduced in O-MR1 with the concept of a "distro" which could be delivered by
117an APK. The Android time zone "distro" is a zip archive containing the files
118needed to update a device's time zone rules by overlaying files into locations
119in /data. See distro/ for details.
Neil Fuller3830d702017-08-18 17:03:59 +0100120
Neil Fuller9bfe7122019-04-16 15:11:59 +0100121The "distro" concept will be removed in a future release of Android as it is
122being replaced by an APEX file containing the same data. As the APEX contains
123the same files we continue to use a shorthand version code. See apex/ for
124details.
Neil Fuller3830d702017-08-18 17:03:59 +0100125
Neil Fuller9bfe7122019-04-16 15:11:59 +0100126Time Zone Data Set Versions have a major and minor version number:
127
128- Major version numbers are mutually incompatible. e.g. v2 is not compatible
129 with a v1 or a v3 device.
130- Minor version numbers are backwards compatible. e.g. a v2.2 distro will work
131 on a v2.1 device but not a v2.3 device.
Neil Fuller3830d702017-08-18 17:03:59 +0100132- The minor version is reset to 1 when the major version is incremented.
133
134The most obvious/common change that can occur between Android releases is an
Neil Fuller9bfe7122019-04-16 15:11:59 +0100135ICU upgrade, which currently requires a major version increment: Android uses
136the ICU4C's native file format for both ICU4C and ICU4J time zone code which is
Neil Fuller3830d702017-08-18 17:03:59 +0100137tied to the ICU major version. The main .dat file used by ICU is held in
138external/icu and will naturally be updated when ICU is updated. Less obviously,
Neil Fuller9bfe7122019-04-16 15:11:59 +0100139the time zone data set version code and files must be updated as well.
Neil Fuller3830d702017-08-18 17:03:59 +0100140
141Other examples of changes that affect format versioning:
142
143Major version increment:
144- A non-backwards compatible change to the tzdata or tzlookup.xml files used
145 by bionic / libcore.
146- Removal of an existing file from the distro.
147
148Minor version increment:
149- Backwards compatible changes:
150 - A new file in the distro.
151 - Additional required data in an existing file (e.g. a backwards compatible
152 change to tzdata / tzlookup.xml).
153
154
Neil Fuller9bfe7122019-04-16 15:11:59 +0100155Changing the Time Zone Data Set Version
156---------------------------------------
Neil Fuller3830d702017-08-18 17:03:59 +0100157
Neil Fuller231c68c2018-11-28 22:37:30 +00001581) Modify libcore/luni/src/main/java/libcore/timezone/TzDataSetVersion.java
Neil Fuller3830d702017-08-18 17:03:59 +0100159 - CURRENT_FORMAT_MAJOR_VERSION, CURRENT_FORMAT_MINOR_VERSION
Neil Fuller231c68c2018-11-28 22:37:30 +00001602) Run update-tzdata.py to regenerate the system/timezone/output_data,
Neil Fuller9bfe7122019-04-16 15:11:59 +0100161 system/timezone/testing/data, external/icu runtime files and testing equivalents.
1623) Build/flash a device image with the changes and run CTS tests:
163 atest CtsHostTzDataTests
164 atest CtsLibcoreTestCases
Neil Fuller231c68c2018-11-28 22:37:30 +00001654) Run non-CTS test cases:
Neil Fuller9bfe7122019-04-16 15:11:59 +0100166 atest FrameworksServicesTests:com.android.server.timezone
1675) Upload, review, submit the changes from system/timezone and libcore.
168 Note: you may have changes in external/icu/ but usually there is no need to update
169 external/icu as only a timestamp in zoneinfo64.txt should have changed.
Neil Fuller3830d702017-08-18 17:03:59 +0100170
Neil Fuller9bfe7122019-04-16 15:11:59 +0100171REMINDER: Any prebuilt apks / apex files (i.e. ones that that contain time zone files)
172will also need to be regenerated after this change.
Neil Fuller86e72c52017-06-12 15:36:06 +0100173