Обновление временных зон на Android

Прочитав статью «Переезд временной зоны MSD в MSK — новый Y2K локального масштаба» — был, мягко говоря, озадачен. Неужели никто до сих пор не сделал какого-либо патча для Android? Вдумчивое гугление привело к подтверждению информации: да, патчей нет. Обновлений тоже нет. Что хотите — то и делайте.
Ну вот, собственно — и начал делать…

Противоречивая информация


По информации, найденной в Сети, файл временных зон в Android находится:
  • /etc/timezones.db — как было сказано в вышеуказанной статье;
  • /etc/WPDB.zip — найдено на нескольких форумах;
  • /system/usr/share/zoneinfo/ — опять-таки, найдено в форумах.

Взяв в руки adb, far и прочие нужные вещи, принялся за мини-исследование. Итог:
  • /etc/timezones.db — нет. Не часовые пояса. Просто файл в формате SQLite, содержащий в себе соответствия ID зоны и ее названий на разных языках (таблица timezone) и некоторые метаданные в количестве одной штуки (таблица android_metadata);
  • /etc/WPDB.zip — часовые пояса. И не только. Внутри архива — 22 файла с именами а-ля «WP_0419RUS.db». Файлы — всё тот же SQLite. В файле по три таблицы, в каждой из которых — да, названия страны, города и смещение от UTC в минутах — но насчет зимнего/летнего времени информации никакой;
  • /system/usr/share/zoneinfo/ — вот и то, что нам нужно. В каталоге — три файла: zoneinfo.dat, zoneinfo.idx, zoneinfo.version. Вот только где их брать?..

Инструменты


Кратко, потому что «растекания мысью по древу» вряд ли будут кому-то интересны.
  • Заголовок у zoneinfo.dat оказался ожидаемый: TZif2. Вот только встречался в файле он очень часто;
  • zoneinfo.idx наводил на мысли, что перед нами БД — только чем ее собрать? В голове начали мелькать идиотские мысли из серии: «Разобраться с форматом, написать «сборщик», взяв за основу нужные файлы временных зон с домашнего сервера на FreeBSD;

В итоге всё оказалось намного проще. После получаса настойчивых поисков была найдена ссылка, по которой лежал набор development tools для android, в том числе — шелл-скрипт, вызвающий zic для определенного набора каталогов и генерирующий выходные данные, и исходник на Java для, собственно, создания zoneinfo.dat и zoneinfo.idx.
Архив с данными временных зон, на который надо натравливать скрипт, нашёлся здесь.

Результаты


В итоге — получаем актуальные файлы временных зон для Android, осталось залить их в устройство. Увы, пользователям без root-доступа к телефону обновление не грозит.
Вариантов обновления — два.
  • Через ADB (Android Debug Bridge, часть Android SDK);
  • Через кастомный recovery, позволяющий устанавливать ZIP-файлы с корня SD-карты (У меня установлен CWM-AlphaRev Recovery)

Обновление через ADB


Предполагаю, что с базовыми знаниями о adb: что это такое, как им пользоваться, где брать — вы знакомы. Если нет — то вот первая найденная с ходу ссылка, изучаем…
  • Скачиваем архив с новыми временными зонами;
  • Распаковываем архив куда-нибудь поудобнее. К примеру, в c:\Temp\tz\;
  • Запускаем adb shell, проверяем, что раздел /dev/block/mtdblock3 примонтирован к /system:
    # mount|grep system
    mount|grep system
    /dev/block/mtdblock3 /system yaffs2 ro,relatime 0 0
  • Монтируем раздел /system в RW-режиме (если к /system примонтирован не mtdblock3 — заменить значение на своё):
    su
    mount -rw -o remount /dev/block/mtdblock3 /system
    exit
  • Закачиваем новые файлы временных зон в устройство:
    adb push c:\Temp\tz\zoneinfo.version /system/usr/share/zoneinfo/zoneinfo.version
    adb push c:\Temp\tz\zoneinfo.dat /system/usr/share/zoneinfo/zoneinfo.dat
    adb push c:\Temp\tz\zoneinfo.idx /system/usr/share/zoneinfo/zoneinfo.idx
  • Перезагружаем устройство.

Обновление через custom recovery на примере CWM-AlphaRev Recovery


Описание относится к HTC Desire A8181; на телефонах других моделей процесс входа в recovery может слегка отличаться.
  • Скачиваем архив с обновлением временных зон;
  • Кладём файл в корень SD-карты устройства;
  • Входим в Recovery: при выключенном телефоне (владельцы телефонов с Android 2.3.x — перед выключением устройства проверьте, что пункт меню Настройка — Приложения — Быстрая загрузка отключен!) нажимаем и удерживаем кнопку «уменьшить громкость», нажимаем кнопку питания;
  • В появившемся меню клавишами громкости выбираем пункт меню Recovery, подтверждаем выбор кнопкой включения питания; телефон загружается в recovery-режиме;
  • Последовательно выбираем пункты меню (подтверждение — нажатием оптического джойстика):
    -install zip from sdcard
    -choose zip from sdcard
    -выбрать zip

  • Появляется навигация по файловой системе. Выбираем файл timezone2011i.zip, который мы туда и загрузили;
  • Подтверждаем желание установить выбранный файл;
  • После окончания процесса установки с помощью клавиши «назад» поднимаемся на два уровня выше, выбираем пункт меню reboot. Телефон перезагрузится в обычном режиме, обновление установлено.



На этом, пожалуй, всё. Замечания, исправления, дополнения — приветствуются.
Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 85
  • +4
    Я правильно понимаю, что для того, чтобы обновить TZ-данные через ADB, нужен рут и без рута никак?
    • +3
      Да, в любом случае нужен рут. Система просто так не даст файл подменить…
      Да, есть еще третий вариант, забыл упомянуть в топике — просто перекинуть нужные файлы через Root Explorer прямо на устройстве.
      Кстати, уже после публикации этой статьи в топике « «Переезд временной зоны MSD в MSK…» появилась ссылка на патч в Маркете, делающий то же самое. Но он гораздо более user-friendly, чем мои методы. И да, рут всё равно нужен. Собственно: комментарий и ссыла на Маркет.
      • +1
        Предупреждение
        Если у вашего телефона нестандартная структура файлов таймзон, программа может быть просто бесполезной или превратить ваш телефон в кирпич
        и единственный комментарий
        Убил тело Gigabyte GSmart G1305 CyanogenMod 7. При перегрузке стоит надпись Android и все. Ребуты хард ресет не помогают. Буду перепрошивать.
        несколько настораживают.
        • +1
          Ну, здесь сказать ничего не могу — патч ко мне ни коим боком не относится. В принципе, вероятность «брикнуть» телефон минимальна — максимум, что может случиться — он уйдёт в bootloop, а это легко чинится заменой файлов на оригинальные (если они были сбэкаплены, конечно).
          Свои методы проверял на HTC Desire с оригинальной прошивкой и с CM7 и еще на трёх разных телефонах — всё проходило на «ура», эксцессов (тьфу-тьфу-тьфу) не было.
          • +1
            Galaxy S MIUI — убило =)

            В общем не подходит оно для MIUI/CM7…
            • +1
              Жаль, что я только после умерщвления своего LG P500 CyanogenMod 7.1.0 beta 6.5.8 пишу этот коммент-наставление: прежде чем что-то из под рута сделать прочти все доступные комменты
              • 0
                О, леший. Патч с маркета?..
                • 0
                  он…
                  • 0
                    С моим вариантом тоже поаккуратнее… Вон у Lattyf чуть ниже тоже какая-то беда-беда непонятная…
                    • 0
                      Распоследняя версия патча в маркете, по идее должна быть чуть лучше. Может для разнообразия и не убьёт ваш телефон :)
                  • +8
                    ПОСОНЫ НЕ КАЧАЙТИ!!! У МЕНЯ ТЕЛЕФОН ОТ ЭТОГО УМЕР!!! ПИШУ С КОМПА!!!
              • 0
                Есть множество успешных замен с помощью маркета, но есть и фейлы (не только у GSmart G1305).
                Хард ресет и ребуты не помогут, да. Но с другой стороны, всегда остаётся вариант через CWM (если уже есть).
                Также, поможет nandroid backup или перепрошивка на ту же версию.

                В последней версии добавлен тестовый прогон, и теперь есть подозрение, что телефоны умирают из-за не очень корректных файлов (2011l).
              • +1
                Считаю ваш метод более надежным чем тот патч на Маркете что есть. Уж больно настораживают комментарии.
                • +1
                  Метод более надежен разве что за счет того, что человек, его применяющий — понимает, как правило, ЧТО он делает.
                  Насчет патча — могут быть проблемы с перемонтированием /system. На Desire HD, насколько помню, это не /dev/block/mtdblock3. Да, mea culpa, забыл указать. Сейчас подредактирую пост.
                  • +1
                    На том же Desire /system не перемонтируется в rw, если не применялся S-OFF (как в моём случае), только из рекавери.
                    • 0
                      На самом деле не нужно знать, что туда смонтировано, чтобы перемонтировать в rw — просто скажите mount -o remount,rw /system и всё :)
                      • 0
                        Старые привычки, не могу избавиться :)
                        • 0
                          Хм, кстати:
                          # mount -o remount,rw /system
                          mount -o remount,rw /system
                          Usage: mount [-r] [-w] [-o options] [-t type] device directory
                          #
                          • 0
                            Хм. Да, наверное я не совсем прав. Без девайса можно, только если запись в /etc/fstab есть, а её, получается, может и не быть на андроидах…
                    • 0
                      перекинул с помощью rootexplorer
                  • +1
                    Плюс вам, милый человек.
                    • +2
                      (расшаркивается) Благодарю!
                    • +1
                      Спасибо, всё получилось! Acer Liquid 2.2 офиц.
                      • 0
                        Всегда пожалуйста.
                        И да, спасибо за фидбэк — интересно, всё-таки.
                      • 0
                        На desire s не встало. Прошивка Hyperion v2.0 (2.3.5). Ругается на amend scripting. Короче, некорректный формат zip-файла насколько я понял.
                        • 0
                          Не установилось через recovery, насколько понимаю? Рекавери всё-таки вещь в себе, кто во что горазд.
                          Советую попробовать простой вариант — через root explorer (или аналоги).
                          • 0
                            Да, делал через recovery. Может у меня он какой-то кривой стоит, хотя ранее проблем не возникало ни разу. Попозже попробую руками залить, думаю пройдёт без проблем.
                            Так или иначе, вещь очень полезная, спасибо!
                            • 0
                              Пожалуйста! Насчет формата zip-файла — странно, скрипт там самый банальный, ничего сверхъестественного.
                              Да, заливка руками проблем еще ни у кого не вызывала. И не вызовет, надеюсь…
                          • +1
                            Это связано с версий CMW. в версиях 3.0+ (насколько понял) перешли на другой формат этих скриптов.
                            Можно сконвертировать уже готовый архив с апдейтом с помощью софтины из этой темы. Небольшая программка написана на mono. Использовал только что под Debian Squeeze — все работает. Архив сконвертился с нужными скриптами и все установилось на LG GT540 + SwiftDroid (CM7.1).

                            Если другие телефоны, и их нет в списке програмки, можно либо поправить пути в окне Output, либо добавить в phoneDatabase.xml.
                            • 0
                              Усё получилось, спасибо за наводку!
                          • –1
                            гм. А смысл? Насколько я понимаю, современные мобилы берут время у оператора связи, а тот в свою очередь отдает не UTC, а именно локальное время (опсос же знает где какая сота стоит и какое локальное время с нее отдавать). Так что это затронет максимум планшеты без GSM, но им наверняка можно тупо поправить зону на +4.
                            • +2
                              У меня, например, получение времени от оператора связи отключено. Мало того, что периодически телефон получал какое-то «марсианское» время: -16 минут, например, так еще иногда телефон цепляется за польских операторов (живу в Калининграде). Очень неудобно.
                              Предпочитаю синхронизацию всех устройств по NTP.
                              • 0
                                ntp на андроиде моно реализовать?
                            • +1
                              Не знаю, как у кого, а я выключаю эту опцию через 2÷3 дня использования. Потому как постоянно вываливается предложение установить часы и выбрать часовой пояс после, например, катания в метро…

                              HTC Desire/Android 2.2 -> 2.3.3(root+S-OFF)/МТС Москва
                              • 0
                                Странно, не наблюдаю такого. А какой опсос?
                                • 0
                                  Дык, МТС Москва :)

                                  Причём, подобная фигня была и на нокиях (E51, 5800) с вариациями :) — Те ещё и не видели обновлений или синхронизировались по Германии иль ещё как…

                                  Происходит эта бяка не постоянно, но по 1÷2 раза в день — запросто. Точной закономерности не искал, но, обычно после пропадания связи
                                  • 0
                                    МТС Калининград и Билайн Калининград. Скакало. На Е51 та же история…
                                • +1
                                  У Вас просто телефон не телепортировался между городами :)
                                  Находясь дома в Екатеринбурге телефон считает, что он на пересечении Левашовского и Каменноостровского проспектов Санкт-Петербурга. А отвозя в воскресенье дочку в бассейн я «телепортируюсь» куда-то в подмосковье. Еще по городу наблюдаются порталы в Новосибирск и Владивосток.
                                  Оператор — МТС.
                                  Если оставлять синхронизацию включенной, то каждый раз Андроид корректирует часовой пояс, что несказанно «радует».
                                  • 0
                                    Это, кстати, лечится отключением 3G в телефоне.
                                    Такое ощущение, что МТС рассовали вышек то ли с одинаковыми СID, то ли просто с дефолтными настройками… Меня регулярно в Пермь забрасывало. В Google Latitude на историю перемещений вообще без слёз взглянуть нельзя было.
                                    • 0
                                      Нее… без 3G неинтересно. Я по этому поводу и письма пару раз писал и через техподдержку пытался добраться до имеющих отношение к делу инженеров. Бесполезно (:
                                • 0
                                  HTC Desire CM7 — после обновление через программу из маркета зависал при загрузке.
                                  После обновления через recovery поверх — также зависал. Пришлось CM7 ставить поверх, тогда завелся (но со старыми таймзонами, понятно дело).

                                  Эх, бекапы наше все :)
                                  • 0
                                    А на чистый CM7 попробовать воткнуть апдейт через recovery? Или уже всё, тяга к экспериментам иссякла?
                                    • 0
                                      С этим небольшая проблема :) У меня CWM 5.x, а в нем, как он говорит, убрали поддержку amend скриптов, поэтому пришлось конвертить ваш патч в edify. Использовал конвертер amend2edify-v1.0.1.1. Не уверен, может быть и он поломал. По сути еще одна проверка ничего не должна изменить, поскольку файлы все равно перезаписываются. Видимо дело в самих файлах.
                                      • 0
                                        (цыкает зубом) Ну, тогда только вручную файлы попробовать заменить. Сбэкапившись предварительно :)
                                        • 0
                                          Вручную уже не полезу, сорри. Итак уже замучал коллег просьбами скопировать на флешку через картридер всякие непонятные файлы. :)
                                          • 0
                                            Так прям с телефона файл скачать. Разархивировать-то его всяк на устройстве получится.
                                            • 0
                                              Опять убилось :) Но теперь-то я был готов :)
                                              • +1
                                                От’ собака, а. Странно…
                                                А разделы не ресайзнуты?
                                                • 0
                                                  Рисайзнуты. Ext 512, 32 swap остальное от 4 гигов на данные.
                                                  • 0
                                                    Имхо, свап на дизайре только мешает.
                                            • 0
                                              MyPhone Explorer на вашем компе и частота вытаскивания флешки падает до околонулевой.
                                              • 0
                                                Проблема в том что прошивка телефона не грузится. Доступ к карте есть только в режиме fastboot. Оно работает в этом режиме?
                                                • 0
                                                  Расширьте мой кругозор, пожалуйста.

                                                  1)Карточка обозревается любым файловым менеджером, начиная с AndroZip или каким нть ES File Explorer. Она не является системно скрытой от юзверя.

                                                  2)MyPhone Explorer позволяет гонять файлы туда-сюда посредством BT, WiFi, USB. Пи этом предоставляет наиболее удобный интерфейс к такому движняку из виденных мною.

                                                  3)Перепрошивка осуществляется при ребуте телефона в режим recovery или bootloader, и никакой другой юзерский приклад не в состоянии это делать иначе.

                                                  4)Типичный сценарий выглядит как размещение файла рома на флешке и последующее его использование их режима bootloader.

                                                  Где я ошибаюсь и что у вас не получается?
                                                  • 0
                                                    Телефон уже не грузиться, после неудачной прошивки. Каким образом я выполню пункт 4 если телефон вот прям щас вот не грузиться уже?

                                                    Что у меня не получается было описано выше в комментариях. Не надо тут говорить очевидные вещи с видом знатока, ваш троллинг слишком толстый, к сожалению.
                                                    • 0
                                                      Не проецируйте на меня свою фрустрацию, пожалуйста.
                                                      То, что вы брикнули тело — тема вежливого обсуждения на 4pda.ru/forum и аналогичных ресурсах, а не тема для хабра.
                                                      И я не телепат вычислять, что бы брикнули аппарат и предвидеть ваши обиды.
                                                      • 0
                                                        Ничего я не брикал. Вы читать вообще не умеете? Почитайте что ли ветку прежде чем отвечать. Мне надоел этот театр абсурда.
                                    • 0
                                      Кстати, сейчас посмотрел, у меня Екатеринбург обозначен как UTC+6, соответственно Москва — UTC+4. Это подразумевает, что файлы временных зон уже скорректированы? (Ведь по правильному Екб — UTC+5, Мкс — UTC+3).
                                      HTC Desire Z с официальной прошивкой 2.42.405.2
                                      • 0
                                        Перевести дату на месяц вперёд и проверить, не изменилось ли UTC+4 на UTC+3.
                                        В статье, на которую я ссылался, вроде бы как ни про одну официальную прошивку не было сказано, что «всё хорошо». Там много комментариев по этому поводу…
                                        • 0
                                          Я как оказалось ту статью читал еще до основного обсуждения, а оно многое добавило. В частности проверили и моё прошивку, диагноз — «все плохо» (с) Спасибо AlexeyRU
                                      • 0
                                        При обновлении через CWM-AlphaRev Recovery получается следующее:

                                        Opening update package…
                                        Installing update…
                                        Installation aborted.

                                        Информация по железу/софту:
                                        HTC Bravo (Desire GSM)
                                        Display: SLCD
                                        Base ROM: CyanogenMod 7.1
                                        Android: 2.3.7
                                        Recovery: ClockWorkMod 5.0.2.0
                                        Kernel: 2.6.38.8 (Tiamat 4.1.0)
                                        Radio: 32.56.00.32U_5.17.05.23.zip

                                        Утром буду пробовать установить через ADB.
                                        • 0
                                          Насчет нового CWM и CM7 вот здесь писали.
                                          • 0
                                            В итоге установил через ADB не ковыряясь с автоматической установкой.
                                        • 0
                                          К Motorola Milestone не подошло. Все зоны сбросились в +0. Перед заменой файлов сохраняйте резервные копии.
                                          Кто не сделал резервную копию может попробовать восстановить по ссылке в посте.
                                          • +1
                                            Мда и вот интересно, чем этот пост лучше, чем мой аналогичный про айфон? habrahabr.ru/blogs/apple/130432/
                                            • 0
                                              (разводит руками) А целевая аудитория другая. Как показал только что проведённый соцопрос — айфонщики люди ленивые. Раскидал ссылку на пост про обновление, получил ответы из серии: «Мне лень», «Не хочу делать джейлбрейк» и так далее. И им побоку, что jailbreak делается проще, чем рут на андроиде…
                                              • 0
                                                похоже да. написав свой пост я конечно ожидал, что он будет не очень популярным, но удивился что он даже на главную не вышел.
                                                по поводу джейла на айфонах — всё просто. он или делается просто или не делается вообще =)
                                            • 0
                                              byte46, а есть информация КАКИЕ зоны исправлены? То есть в timezone2011i.zip содержатся все изменения 2011 года, или это кто-то делал «исключительно под свои нужды» ;)?
                                              • 0
                                                Да, все изменения 2011 года.
                                                Инфа по ревизии i — ну, например, здесь.
                                                • 0
                                                  Там не изменения хранятся, а текущее состояние файлов тайм-зон на момент выхода данной версии tzdata.
                                                • 0
                                                  Optimus One — полет нормальный. Ставил через кастом от АмонРа.
                                                  • 0
                                                    timezone2011l с Android 4 ISC:

                                                    Информацию о ревизии, к сожалению, не нашёл.
                                                    • 0
                                                      Судя по содержимому файла zoneinfo.version из вашего архива, версия базы 2011l, что является последней версией (вышла 10 октября) и кстати новее той, что в топике
                                                  • +1
                                                    Сделал подписанный пакет для апдейта до 2011m
                                                    обновляет файлы в /system/usr/share/zoneinfo через recovery
                                                    просьба отписаться здесь, если кто будет ставить
                                                    файл предоставляется как обычно без гарантий — as is ;)
                                                    dl.dropbox.com/u/14143269/timezone2011m-signed.zip
                                                    • 0
                                                      Новый CWM не будет исполнять amend update-script.
                                                      Кому надо, то вот 2011m c edify скриптом:
                                                      jazzy.ws/desire/tz2011m_signed.zip
                                                      • 0
                                                        Лучше самостоятельно тогда прогнать через конвертер, пути к маунтпойнту /system различаются у многих тлф
                                                        forum.xda-developers.com/showthread.php?t=903598
                                                        • 0
                                                          Думаю, что mount(«MTD», «system», "/system") прокатит, если update-binary подходит, или я не прав?
                                                          • 0
                                                            Промахнулся, см ниже ответ.
                                                            • 0
                                                              на zte blade + cm7.1 не прокатило =(
                                                        • 0
                                                          Положил файлы из архива вручную через рекавери, всё работает.
                                                        • 0
                                                          Надо пробовать, я не уверен что везде прокатит — надо ковыряться в edify.
                                                          Зачем-то они все-таки сделали в конвертере такую опцию.
                                                          • 0
                                                            Motorola Defy с Цианом.

                                                            У товарища в Циане на LG500 тоже самое.
                                                            После исправления таймзон творится хаос с датами рождения контактов. Они поменялись на день, а у кого то не поменялись.
                                                            В аккаунте гугла на сайте все нормально.

                                                            После установки таймзоны «Тбилиси+4» все становится на свои месте.
                                                            Как только ставлю «Москва+4» — хаос.

                                                            Можно конечно поставить «Тбилиси» и не париться, но при использовании GPS телефон сам ставит зону «Москва+4» и опять хаос с ДР контактов.
                                                            Соответственно неправильные напоминания и т.д.
                                                            • 0
                                                              ДОКОЛЕ не будет оф. апдейта?
                                                              Не понимаю я что то в этом мире. Вся страна с косячным временем, а всем пофик что ли??
                                                              Я уже задолбался о своим SGS2. Проги многие тупят и брыкаются из за расхода времени. Даже гугл ток тупит нереально. Перевести часовой пояс из мск в ереван — глупо и тупо. Рутовать телефон не хочу — это небезопасно и глупо. ((( Не ожидал такой свиньи от разработчиков…

                                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.