123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- This directory contains code, tools and data related to time zone rules data
- and updates.
- Directory structure
- ===================
- distro
- - Code related to "distros", the collection of files that can be used to
- update time zone rules on Android devices. See distro/README for details.
- input_data
- - Contains files that provide inputs to the time zone rules update process.
- Some files come from external sources and some are mastered in Android.
- See also download-iana-data.py.
- output_data
- - Contains some derived files from the time zone rules update process and
- used in the Android system image and distros. Some files are also held by
- ICU - see also update-tzdata.py
- testing
- - Contains tools and scripts related to testing time zone update code. See
- testing/data/README for details.
- tzdatacheck
- - Source code for a binary executed during boot and used to ensure that a
- device doesn't boot with incompatible/outdated time zone data installed
- /data (as could happen if the device has just received an OTA upgrade).
- It is also responsible for committing staged install/uninstalls.
- zone_compactor
- - Used to create Android's native tzdata file format from the files
- produced by the zic tool. See also update-tzdata.py.
- Data file update tools
- ======================
- download-iana-data.py
- - A helper script run before update-tzdata.py.
- It downloads the latest tzdata update from IANA and puts it in
- the system/timezone/input_data/iana directory for use by the
- update-tzdata.py script.
- update-tzdata.py
- - Regenerates the external/icu and system/timezone/output_data timezone
- data files.
- See update instructions below for how these tools are used.
- IANA rules data changes
- =======================
- When IANA release new time zone rules, the update process is:
- 1) Run download-iana-data.py to update the system/timezone/input_data/iana
- file.
- 2) Make manual modifications to system/timezone/input_data/android files as
- needed.
- 3) There are sometimes code and metadata changes associated with tzdata updates
- that should be applied to Android's copy of ICU.
- e.g. see http://bugs.icu-project.org/trac/search?q=2015d
- 4) Run update-tzdata.py to regenerate the system/timezone/output_data,
- system/timezone/testing/data, external/icu runtime files and testing equivalents.
- 5) Build/flash a device image with the changes and run CTS:
- cts-tradefed
- run cts -m CtsLibcoreTestCases
- run cts -m CtsIcuTestCases
- (And any others that you think may have been affected)
- 6) Upload, review, submit the changes from external/icu and system/timezone.
- REMINDER: Any prebuilt apks of OEM-specific time zone data apps .apk files
- (i.e. ones that that contain distro files) will also need to be regenerated
- with a new version code / string and any OEM-specific tests should be run.
- Distro Versioning
- =================
- The Android time zone "distro" is a zip archive containing the files needed
- to update a device's time zone rules by overlaying files into locations in /
- data. See distro/ for details.
- The distro format (i.e. the files contained within the zip file) can change
- between major releases as Android evolves or makes updates to components that
- use the time zone data.
- Distros have a major and minor format version number:
- - Major format version numbers are mutually incompatible. e.g. v2 is not
- compatible with a v1 or a v3 device.
- - Minor format version numbers are backwards compatible. e.g. a v2.2 distro
- will work on a v2.1 device but not a v2.3 device.
- - The minor version is reset to 1 when the major version is incremented.
- The most obvious/common change that can occur between Android releases is an
- ICU upgrade, which currently requires a major format version increment: Android
- uses the ICU4C's native format for both ICU4C and ICU4J time zone code which is
- tied to the ICU major version. The main .dat file used by ICU is held in
- external/icu and will naturally be updated when ICU is updated. Less obviously,
- the distro code and files must be updated as well.
- Other examples of changes that affect format versioning:
- Major version increment:
- - A non-backwards compatible change to the tzdata or tzlookup.xml files used
- by bionic / libcore.
- - Removal of an existing file from the distro.
- Minor version increment:
- - Backwards compatible changes:
- - A new file in the distro.
- - Additional required data in an existing file (e.g. a backwards compatible
- change to tzdata / tzlookup.xml).
- Changing the distro format version
- ----------------------------------
- 1) Modify libcore/luni/src/main/java/libcore/timezone/TzDataSetVersion.java
- - CURRENT_FORMAT_MAJOR_VERSION, CURRENT_FORMAT_MINOR_VERSION
- 2) Run update-tzdata.py to regenerate the system/timezone/output_data,
- system/timezone/testing/data, external/icu runtime files and testing equivalents.
- 3) Build/flash a device image with the changes and run CTS:
- cts-tradefed
- run cts -m CtsHostTzDataTests
- run cts -m CtsLibcoreTestCases
- 4) Run non-CTS test cases:
- make -j30 FrameworksServicesTests
- adb install -r -g \
- "${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk"
- adb shell am instrument -e package com.android.server.timezone -w \
- com.android.frameworks.servicestests \
- "com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner"
- 5) Upload, review, submit the changes from system/timezone, libcore and external/icu.
- REMINDER: Any prebuilt apks of OEM-specific time zone data apps .apk files
- (i.e. ones that that contain distro files) will also need to be regenerated
- with a new version code / string and any OEM-specific tests should be run.
|