В связи с отменой перевода часов и перехода на зимнее время мой смартфон при автоматическом получении времени от сети начал спешить на час. В Linux исправление временного пояса лежит в обновлении tzdata. В Android за это отвечают 3 файла, лежащие в /system/usr/share/zoneinfo/:
- zoneinfo.dat,
- zoneinfo.idx,
- zoneinfo.version
Последний является текстовым файлом и содержит текущую версию tzdata. Остальные два можно получить с помощью любого дистрибутива Linux и JDK. Подробности и новейшие на момент написания статьи файлы под катом.
Как сделать новую версию tzdata для Android:
- Заходим в любимый дистрибутив Linux (я запустил LiveCD Ubuntu 12.04)
- Качаем с официального сайта последний пакет Time Zone Data tzdata (на текущий момент это v. 2013b, инструкция дальше будет содержать эту версию, вы везде ниже пишете ту, что скачаете)
- Качаем архив generate.zip
- Устанавливаем, если в системе нет, OpenJDK (или что-то похожее), например так apt-get instal openjdk-6-jdk
- Распаковываем содержимое tzdata2013b.tar.gz в новую папку с именем tzdata2013b
- Распаковываем generate.zip и правим в файле generate строчку version=tzdata2013b на свою версию.
- Делаем исполняемым и запускаем файл ./generate: chmod +x ./generate & ./generate.
- Забираем три созданных файла в устройство на OS Android
- Переименоваем папку /system/usr/share/zoneinfo/ в zoneinfo.old, создаем новую с тем же именем и переносим внутрь новые файлы.
- Выставляем права на файлы точно так же, как было у исходных. В моем случае это выглядит так:
- Перезагружаем устройство
Альтернативный «легкий» способ поставить на место часовые пояса — скачать из маркета приложение TimeZone Fixer (требует ROOT прав).
Полученная в статье версия zoneinfo.
Ссылки: