Пользователь
0,0
рейтинг
20 октября 2011 в 12:45

Обновление временных зон на 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. Телефон перезагрузится в обычном режиме, обновление установлено.



На этом, пожалуй, всё. Замечания, исправления, дополнения — приветствуются.
Сергей @byte46
карма
19,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (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 на андроиде моно реализовать?
        • +2
          Да. Сам пользуюсь вот этим: ClockSync.
    • +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 октября) и кстати новее той, что в топике
      • 0
        Time Zone Data v. 2011m (Released 24 October 2011)
        www.iana.org/time-zones
        • 0
          Ну последняя на момент комментария :)
  • +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. Проги многие тупят и брыкаются из за расхода времени. Даже гугл ток тупит нереально. Перевести часовой пояс из мск в ереван — глупо и тупо. Рутовать телефон не хочу — это небезопасно и глупо. ((( Не ожидал такой свиньи от разработчиков…

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