Исправление часового пояса в Android

В связи с отменой перевода часов и перехода на зимнее время мой смартфон при автоматическом получении времени от сети начал спешить на час. В Linux исправление временного пояса лежит в обновлении tzdata. В Android за это отвечают 3 файла, лежащие в /system/usr/share/zoneinfo/:

  1. zoneinfo.dat,
  2. zoneinfo.idx,
  3. zoneinfo.version

Последний является текстовым файлом и содержит текущую версию tzdata. Остальные два можно получить с помощью любого дистрибутива Linux и JDK. Подробности и новейшие на момент написания статьи файлы под катом.

Как сделать новую версию tzdata для Android:

      1. Заходим в любимый дистрибутив Linux (я запустил LiveCD Ubuntu 12.04)
      2. Качаем с официального сайта последний пакет Time Zone Data tzdata (на текущий момент это v. 2013b, инструкция дальше будет содержать эту версию, вы везде ниже пишете ту, что скачаете)
      3. Качаем архив generate.zip
      4. Устанавливаем, если в системе нет, OpenJDK (или что-то похожее), например так apt-get instal openjdk-6-jdk
      5. Распаковываем содержимое tzdata2013b.tar.gz в новую папку с именем tzdata2013b
      6. Распаковываем generate.zip и правим в файле generate строчку version=tzdata2013b на свою версию.
      7. Делаем исполняемым и запускаем файл ./generate: chmod +x ./generate & ./generate.
      8. Забираем три созданных файла в устройство на OS Android
      9. Переименоваем папку /system/usr/share/zoneinfo/ в  zoneinfo.old, создаем новую с тем же именем и переносим внутрь новые файлы.
      10. Выставляем права на файлы точно так же, как было у исходных. В моем случае это выглядит так:
        permission tzdata
      11. Перезагружаем устройство

Альтернативный «легкий» способ поставить на место часовые пояса — скачать из маркета приложение TimeZone Fixer (требует ROOT прав).

Полученная в статье версия zoneinfo.

Ссылки: