Пользователи упомянутого в названии статьи замечательного мода наверняка заметили, что в меню "Обложки часов" появилась вкладка "Локальные циферблаты", в которой отображаются скачиваемые самим приложением официальные скины. Возник естественный вопрос: можно ли использовать эту функцию для установки кастомных, созданных энтузиастами циферблатов? Ведь было бы очень удобно хранить коллекцию прямо в приложении, и без лишних манипуляций со сторонним софтом (причём не всегда тривиальных) устанавливать скин по настроению!
Именно так рассудил и я. Установка официального скина в самом приложении (вкладка "Онлайн циферблаты") позволила выяснить, что соответствующие файлы копируются в папку /sdcard/Android/data/com.xiaomi.hm.health/files/watch_skin_local/%идентификатор_скина%. Но попытка скопировать туда же файлы с профильного форума ни к чему не приводила - в "локальных" отображались только установленные самим приложением циферблаты. Анализ кода показал, что Mi Fit выполняет проверку сигнатуры bin-файла, и отображает элементы во вкладке в зависимости от результата. Вот тут-то и выяснилось забавное: в силу особенностей редактора, все кастомные скины имеют одинаковую сигнатуру - сигнатуру AmazFit Cor. Именно поэтому приложение логично не показывает их в списке доступных для моих AmazFit Bip.
Первым моим решением было отключение проверки сигнатуры в самом приложении, т.е. я заставил его все скины в папке считать подходящими для Bip. Но это создаёт потенциальную опасность установки циферблата от Cor с последующим получением "кирпича". Я сам, вроде, обычно таких ошибок не допускаю, но хотелось сделать решение "для всех" :) А заодно хотелось получить максимально простой способ установки циферблатов с форума сразу "пачкой", без предварительной их индивидуальной распаковки/раскладки по папкам и т.п. Так возникло решение написать скрипт, который будет автоматически распаковывать, определять принадлежность (Bip или Cor), и при необходимости патчить сигнатуру кастомов, затем складывая их в нужную папку Mi Fit'а. Т.к. я совершенно не программист, то остановился именно на shell-скрипте, а для удобства использования "завернул" его в приложение-болванку RunScript с небольшими модификациями (спасибо автору!).
Работает это всё следующим образом:
"Под капотом" скрипта при этом происходит следующее:
СКАЧАТЬ ПРИЛОЖЕНИЕ
ОБСУДИТЬ В TELEGRAM
ПОКОРМИТЬ КАПИБАРУ :)
Именно так рассудил и я. Установка официального скина в самом приложении (вкладка "Онлайн циферблаты") позволила выяснить, что соответствующие файлы копируются в папку /sdcard/Android/data/com.xiaomi.hm.health/files/watch_skin_local/%идентификатор_скина%. Но попытка скопировать туда же файлы с профильного форума ни к чему не приводила - в "локальных" отображались только установленные самим приложением циферблаты. Анализ кода показал, что Mi Fit выполняет проверку сигнатуры bin-файла, и отображает элементы во вкладке в зависимости от результата. Вот тут-то и выяснилось забавное: в силу особенностей редактора, все кастомные скины имеют одинаковую сигнатуру - сигнатуру AmazFit Cor. Именно поэтому приложение логично не показывает их в списке доступных для моих AmazFit Bip.
Первым моим решением было отключение проверки сигнатуры в самом приложении, т.е. я заставил его все скины в папке считать подходящими для Bip. Но это создаёт потенциальную опасность установки циферблата от Cor с последующим получением "кирпича". Я сам, вроде, обычно таких ошибок не допускаю, но хотелось сделать решение "для всех" :) А заодно хотелось получить максимально простой способ установки циферблатов с форума сразу "пачкой", без предварительной их индивидуальной распаковки/раскладки по папкам и т.п. Так возникло решение написать скрипт, который будет автоматически распаковывать, определять принадлежность (Bip или Cor), и при необходимости патчить сигнатуру кастомов, затем складывая их в нужную папку Mi Fit'а. Т.к. я совершенно не программист, то остановился именно на shell-скрипте, а для удобства использования "завернул" его в приложение-болванку RunScript с небольшими модификациями (спасибо автору!).
Работает это всё следующим образом:
- В папку /sdcard/MiFitLolexmod складываем скачанные с форума циферблаты (как есть, не распаковывая);
- Запускаем Watchface Patcher и дожидаемся появления всплывающего сообщения о завершении. Приложение не имеет интерфейса, т.е. после нажатия на иконку визуально ничего не происходит: просто ждём всплывающего сообщения "Done", время выполнения зависит от количества архивов для обработки (в любом случае - не очень долго);
- Радуемся появлению кастомных скинов во вкладке "Локальные циферблаты" :)
"Под капотом" скрипта при этом происходит следующее:
- Исходная папка сканируется на предмет zip-архивов;
- В каждом обнаруженном архиве выполняется поиск пары .bin и .gif файлов обязательно с одинаковым названием. При этом структура папок внутри архива не имеет значения (т.к. на форуме встречаются разные варианты), а вспомогательные файлы в созданных на MAC-ах архивах игнорируются. Если подходящая пара не обнаружена - архив игнорируется;
- Найденная пара файлов извлекается в папку /sdcard/Android/data/com.xiaomi.hm.health/files/watch_skin_local/%имя_скина%, где %имя_скина% соответствует имени обнаруженных файлов;
- Определяется целевая модель устройства. В качестве критерия используется ширина изображения в соответствующем gif-файле (скрипт просматривает его заголовок);
- Если обнаружен скин для AmazFit Bip - выполняется корректировка его сигнатуры;
- Формируется файл с метаданными infos.xml для корректного отображения имени циферблата в списке локальных.
СКАЧАТЬ ПРИЛОЖЕНИЕ
ОБСУДИТЬ В TELEGRAM
ПОКОРМИТЬ КАПИБАРУ :)