Сегодня я расскажу вам, как научить приложение погоды, входящее в HTC Sense, узнавать ваш город. По умолчанию приложение знает совсем немного городов, а автоопределение местоположения иногда дает осечки, что и произошло в моем случае.

WTF? Должен быть город Ухта.
Ну что ж, попробуем помочь пациенту.
Для начала нужно получить root-доступ к девайсу и залить custom recovery-образ. Это отдельная тема, и затрагивать ее здесь не хочется. Почитать на примере HTC Desire можно тут и там.
Покопавшись немного в файловой системе больного, выясняем, что список городов хранится в файле

Запаковываем обратно наш модифицированный файл и заливаем в корень карты пациента. Перезагружаем девайс в recovery-mode, подключаем по usb и запускаем adb:
Осталось лишь перезагрузить пациента и очистить данные приложения Weather Provider.

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

На сем позвольте раскланяться, надеюсь информация кому-нибудь пригодится.
P.S.: Если есть возможность проверить на аппаратах, отличных от Desire, прошу в комментарии.
Update: как было подсказано пользователем MainNika, загружать recovery-mode необязательно:

WTF? Должен быть город Ухта.
Ну что ж, попробуем помочь пациенту.
Для начала нужно получить root-доступ к девайсу и залить custom recovery-образ. Это отдельная тема, и затрагивать ее здесь не хочется. Почитать на примере HTC Desire можно тут и там.
Покопавшись немного в файловой системе больного, выясняем, что список городов хранится в файле
/system/etc/WP.zip
. Нам понадобится файл WP_0419RUS.db
из этого архива (для других локалей — по аналогии). При внимательном рассмотрении файл оказывается ничем иным, как базой SQLite. Что ж, берем первый попавшийся под руку инструмент для вскрытия (например Lita — SQLite Administration Tool) и находим таблицу “locationlist”
. Теперь остается добавить новую запись в таблицу. Главный атрибут здесь — “code”
, вида часть_света|страна|регион|город
. Проще всего скопировать это поле из уже существующего города вашего региона, заменив город на свой. Проверить правильное написание города можно на accuweather.com.
Запаковываем обратно наш модифицированный файл и заливаем в корень карты пациента. Перезагружаем девайс в recovery-mode, подключаем по usb и запускаем adb:
C:\android-sdk\tools\>adb shell
# mount /system
# mount /sdcard
# rm /system/etc/WP.zip
# cp /sdcard/WP.zip /system/etc
Осталось лишь перезагрузить пациента и очистить данные приложения Weather Provider.

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


На сем позвольте раскланяться, надеюсь информация кому-нибудь пригодится.
P.S.: Если есть возможность проверить на аппаратах, отличных от Desire, прошу в комментарии.
Update: как было подсказано пользователем MainNika, загружать recovery-mode необязательно:
В режиме отладки USB можно ввести
./adb remount
и /system станет доступным для записи
потом обратно
./adb remount