Содержание статьи
Ты только раб, Neo
Мы познакомимся с универсальными принципами создания программ для часов на практическом примере гаджета Samsung Gear 2. Я экспериментировал с моделью Neo, а к свежей версии Gear S с изогнутым дисплеем компания Samsung приурочила выпуск в октябре доработанного Tizen SDK for Wearable 1.0.0, которым наконец‑то стало удобно пользоваться.
Умные часы применяются как заменитель смартфона или, скорее, дополнение к нему, которое всегда под рукой: на них удобно украдкой просматривать оповещения, быстро отвечать на входящие, отдавать голосовые команды, отслеживать свое физическое состояние, играть и даже использовать по прямому назначению (ты наверняка часто вытаскиваешь свой смартфон, чтобы просто узнать время). Главный же минус, пока ограничивающий этот рынок, — множество мелких недочетов, как технических, так и организационных, присущих сегодня фактически всем моделям smart watches. Даже с точки зрения конечного пользователя установка программы (виджета) на часы — процесс нетривиальный. В качестве примера отмечу, что мой «серый» смартфон Samsung S4 с часами вообще не заработал (судя по всему, кривовато реализован Bluetooth 4), а законнектились часы только с «родным» S4 mini.
Программная архитектура умных часов
Типичная программа для Neo представляет собой классический APK-файл для Android, устанавливаемый на конкретном смартфоне (хост). Виджет, реализующий программную логику на часах, исходно скрыт внутри этого файла. На хосте должна быть инсталлирована программа Gear Manager, управляющая виджетами на часах через Bluetooth. Сам виджет работает под управлением сервиса Wearable Manager Service в ОС Tizen (модифицированный Android). Возможна также классическая клиент‑серверная схема, когда на хосте исполняется некая универсальная «серверная» программа, а на часах — виджеты, инсталлируемые отдельно. И третий вариант — автономный виджет, запускаемый только на часах и с телефоном не взаимодействующий. Это могут быть, например, самые разные игры, украшательства, будильники, спортивный софт, не требующий общения со смартфоном, и подобное.
Домашнее задание 1
Я попробовал «легально» обратиться с часов к тайзеновскому API блютуза, дабы научить Neo, например, взаимодействовать с гаджетами Apple, однако оказалось, что этот API залочен на уровне прошивки. Но для тру‑хакера это ведь не проблема?
Настраиваем инструментарий программирования
Когда APK-файл запускается на смартфоне, скрытый в нем виджет автоматически грузится на часы, где проверяется и устанавливается (или по каким‑то причинам в установке отказывается), о чем сообщает Gear Manager на смартфоне. Так как хост — это обычное APK-приложение, то разработка ведется с использованием типовых инструментов для Android. Рекомендованная среда — это, конечно, Eclipse, в дополнение к которой требуется установить Tizen SDK for Wearable (SDK и среда на базе Eclipse), последняя версия которого, 1.0.0, вышла 6 октября. В свою очередь, этот SDK требует использования основного Tizen SDK, поэтому порядок установки всего комплекса разработки на чистой машине такой: Eclipse, плагин ADT, Tizen SDK, Tizen SDK for Wearable.
При установке Tizen SDK тебя будут поджидать неприятные сюрпризы, связанные с настройками конкретной версии Windows. Для их разбора придется покопаться в логе LOCALAPPDATA%\.
. Отмечу баг инсталлятора, который украл у меня несколько часов, — сообщение Fatal
. Как выяснилось из этого лога, в переменной PATH моей «семерки» не был прописан путь к каталогу Windows/
. А зачем он понадобился? Даже если инсталлируется 64-разрядная версия SDK, в процессе установки файлы копируются с помощью системной 32-разрядной утилиты XCOPY!
Разбираем пример взаимодействия часов со смартфоном
Официальный ресурс developer.samsung.com/samsung-gear предлагает четыре примера, из которых три, по сути, друг от друга не отличаются: обмен между часами и смартфоном строкой, двоичными данными и файлами. Главное тут — понять общую схему взаимодействия; мы рассмотрим ее ключевые моменты на примере Hello Accessory. В его состав входят два проекта: HelloAccessoryProvider (проект хост‑приложения для Eclipse) и HelloAccessoryConsumer (проект виджета для Tizen IDE for Wearable). Они импортируются в соответствующие среды стандартным способом. После загрузки проекта Eclipse, скорее всего, покажет первоначальные ошибки, поэтому в настройках Project
надо явно задать версию Android SDK (Project Build Target).
Код логики работы хоста находится в файле HelloAccessoryProviderService.java, а в каталоге проекта assets размещается встраиваемый в APK-программу виджет (файл с расширением wgt). Порядок сборки финального приложения будет таким: программируем и отлаживаем виджет в Tizen IDE for Wearable, затем копируем его в проект хоста в Eclipse и собираем окончательный продукт.
Логика виджета программируется типовым способом на HTML5/JavaScript. Она сосредоточена в файле main.js. Элементы пользовательского интерфейса описываются обычным HTML-кодом, который хранится в файле проекта index.html. Кроме того, в ряде случаев понадобится файл config.xml, где, в частности, описываются допустимые разрешения для виджета.
Взаимодействуют хост и виджет посредством подобия сокетной связи, реализуемой классом SASocket. В примере на серверной стороне ведется хеш (HashMap) соединений через класс HelloAccessoryProviderConnection (наследник SASocket). У него, в частности, есть стандартный метод
send(int channelId, byte[] data);
передающий сокету нужные данные (см. рис. 1), а ответная информация от виджета принимается перезаписываемым обработчиком
public void onReceive(int channelId, byte[] data);
Логика «клиентской» части ничуть не сложнее: также используется SASocket, с помощью которого включается слушатель соединения
SASocket.setDataReceiveListener(onreceive);
Обработчик
function onreceive(channelId, data) { reateHTML(data); }
получает строку, которую сразу и показывает на часах в HTML-формате:
var log = document.getElementById('resultBoard');log.innerHTML = log.innerHTML + "<br> : " + data;
Отправка сообщения смартфону выполняется стандартным методом сокета sendData():
SASocket.sendData(CHANNELID, "Hello Accessory!");
Вот и вся базовая схема взаимодействия смартфона и часов.
warning
Носимые гаджеты — довольно редкий случай устройств, взлом которых не столько вреден, сколько полезен. Поэтому вся информация данной статьи предоставлена автором не только в ознакомительных, но и в мотивирующих целях.
Отлаживаем виджет на часах
Отладку виджета можно вести через встроенный в Tizen SDK for Wearable эмулятор (см. рис. 3), однако он по своей тормознутости не слишком отличается от эмулятора Android SDK.
Поэтому проще всего открыть файл index.html проекта вручную в обычном настольном браузере — главное, держать в уме примерные границы изображения. Кроме того, далеко не всегда удобна официальная схема инсталляции виджета на телефон: в идеале желательно постоянно следить, как работает виджет на реальном устройстве. Обойти эти незадачи поможет утилита Smart
, расположенная в каталоге tizen-wearable-sdk\
.
Установка виджета на часы, подключенные к компьютеру через USB, выполняется простой командой
sdb install xxx.wgt
SDB содержит множество фич: тут и одновременная прослушка нескольких устройств, и удаленное выполнение команд, передача файлов, анализ логов, настройка рутового доступа и другое.
Альтернативные платформы
В первую очередь стоит присмотреться к свежей технологии Android
, активно поддерживаемой Google, которая, в частности, обеспечивает стыковку с Google Play API. Разработка ведется с помощью Android Studio под Android 4.3 и выше. Даже Samsung выпустил версию Gear под эту платформу, недаром на ней уже запущены Minecraft, Doom и эмулятор Game Boy Color с играми.
Гаджеты Apple
появятся в начале 2015 года. В них будет установлена долгожданная платформа для носимых устройств на базе iOS 8+. Пакет инструментов и SDK WatchKit будет поддерживаться в Xcode, бета обещана в конце текущего года.
О Microsoft
пока мало что известно, эти часы будут функционировать под управлением таинственной Windows Wear 8.1. Программировать наверняка можно будет в Visual Studio.
Обязательно надо познакомиться и с Pebble
— этот проект собрал на кикстартере 10 миллионов долларов и обеспечивает, что важно, взаимодействие часов Pebble (ядро FreeRTOS) с гаджетами Android и iOS. Девелоперам доступна открытая платформа PebbleKit — либо облачная, либо под Linux. Разработка ведется на си и JavaScript.
info
16-летний школьник ухитрился инсталлировать Windows 95 на часы Samsung Gear Live.
Гладко было при отладке, да забыли про сертификаты
Все было бы прекрасно, ведь APK-файл, собранный из эталонного примера, запускается на часах нормально и обменивается сообщениями со смартфоном, однако при попытке перекомпилировать виджет и пересобрать хост‑проект уже с новым оригинальным клиентским wgt-файлом Gear Manager в установке программки на часы откажет (PRIVILEGE_LEVEL_VIOLATION). Проблема кроется в настроечном файле виджета config.xtm, в частности вот в этой строке:
<tizen:privilege name="http://developer.samsung.com/privilege/accessoryprotocol"/>
Эту строчку можно удалить (см. рис. 4), после чего пересобранный виджет успешно установится на часы.
Однако теперь он по понятным причинам не сможет устанавливать соединение с телефоном, а будет работать только как автономное приложение.
Домашнее задание 2
Попробуй разобраться, почему стандартный пример взаимодействия виджета и хоста успешно устанавливается на любые часы и что надо подправить в проектах, чтобы и твой прикладной «клиент‑серверный» проект с полноценными привилегиями тоже мог ставиться на любые часы без проблем, а APK-файл с виджетом, инсталлирующимся на любые часы в обход официального процесса сертификации Samsung, можно было, например, официально загрузить в маркет Google Play.
Доламываем часы по-доброму
Samsung Gear ломают активно и успешно: на них без особых проблем запускается множество APK-приложений, от MX Player до Candy Crush, и даже ставится стоковая Android 4.2.2. Но самое вкусное, конечно, — это организация взаимодействия часов с внешним гаджетом. Тут два проблемных момента: во‑первых, возможность тестовой сборки только под конкретный гаджет, во‑вторых, утомительный процесс сертификации самсунгом приложений (знакомые говорили, что он занимает недели, а то и месяцы, хотя, возможно, с выходом Gear S ситуация изменилась в лучшую сторону). Обойти их можно без каких‑либо хакерских манипуляций — достаточно получить разрешение Samsung на полноценную отладку и тестирование программ на конкретном физическом устройстве. Для этого надо отправить в Samsung уникальный идентификатор часов Device
(DUID, указывается в файле request_certificate.xml) и получить от них сертификат register_certificate.xml, который позволит запускать полноценные приложения на одном конкретном гаджете.
DUID определяется через Connection Explorer на панели Info оболочки Tizen IDE for Wearable. Сам запрос также можно отправить непосредственно из этой среды: достаточно щелкнуть на кнопке главного меню Register
и либо сгенерировать новый запрос, либо импортировать уже существующее хранилище Android keystore для твоих андроид‑программ. Таким способом полноценный софт для часов вполне можно официально делать под свои индивидуальные хакерские нужды либо на конкретный заказ.