Запуск приложения на устройстве
Содержание
Существует несколько способов установки RPM-пакетов на устройство. Самый простой вариант — скопировать его (например, командой scp
) и затем установить вручную через файловый менеджер. Однако, для автоматизации это не годится, т.к. требует дополнительных действий.
До версии Авроры 5.1 можно было установить пакет командой devel-su pkcon -y install-local ${RPM}
, но, во-первых, использование суперпользователя требует ввода пароля, а во-вторых, в 5.1 и выше этот способ больше не работает — установщик ругается на то, что пакет не системный и не может быть установлен.
Тем не менее, выход из ситуации есть. Уже знакомая нам утилита mb2
позволяет не только собирать пакеты, но и устанавливать их на устройство. Но прежде необходимо выполнить некоторые подготовительные действия.
Подготовка устройства
Первым делом нам нужно подготовить устройство. Если вы уже настраивали режим разработчика, этот шаг можно пропустить и сразу перейти к настройке Platform SDK.
Для установки и запуска приложений необходимо включить на устройстве Средства Разработчика и разрешить установку приложений без подписи.
Открываем приложение “Настройки” и находим пункт меню “Источники приложений” в разделе “Безопасность”. Заходим в него и включаем галочку “Разрешить установку приложений без подписи источника”.
Дальше выходим на главный экран Настроек и чуть выше находим пункт “Средства разработчика”. Заходим в него и включаем доступ к средствам разработчика. Все настройки можно оставить по-умолчанию, только в самом низу включить настройку “Разрешить тихую установку”, чтобы не приходилось каждый раз подтверждать запуск приложения.
Теперь мы можем подключаться к устройству посредством SSH. Но доступ по паролю будет нам не очень удобен, особенно, если в дальнейшем будем автоматизировать установку с помощью скриптов или IDE. По-этому первым делом настроим доступ по ключу (подставьте IP-адрес устройства в своей сети):
Однако, по какой-то причине ssh-copy-id
может не работать — не принимает пароль пользователя. При этом доступ по SSH есть. В таком случае можно выполнить настройку вручную. Для этого в домашней директории пользователя на устройстве создаём директорию .ssh
и сразу задаём ей правильный уровень доступа:
Затем копируем содержимое публичного ключа, в моём примере это будет файл aurora.pub
и вставляем в файл .ssh/authorized_keys
на устройстве. Важно также задать правильный уровень доступа для этого файла:
После этого станет возможен доступ к устройству по SSH с использованием ключа, и т.к. это всё тот же ключ с пустой фразой, который мы используем для доступа к эмулятору, с его помощью мы сможем выполнять команды на устройстве без прямого участия.
Для большего удобства стоит добавить в ~/.ssh/config
настройки для доступа к устройству:
Теперь можно использовать короткую команду:
Настройка Platform SDK
Как я уже говорил, для установки пакета на устройство мы будем использовать утилиту mb2
из Platform SDK. У неё есть команда deploy
, которая делает именно то, что нам нужно. Но для её работы необходимо рассказать Platform SDK об имеющихся у нас устройствах и как с ними общаться.
Для этого подключаемся к нашей сборочной машине командой ssh aurora_builder
.
Чтобы сборочная машина могла подключаться к устройству, необходимо на ней создать ключи для доступа по SSH, как мы это делали на рабочей системе:
Рекомендую всё так же оставлять passphrase пустой, чтобы скрипты не прерывались на ввод фразы. И не забываем установить публичную часть ключа на устройство:
Теперь заходим в корневую директорию PSDK (в моём примере это ${HOME}/Tools/PlatformSDK
) и создаём там директорию shared
. Впрочем, назвать её можно как угодно, главное потом не забыть для чего она.
Внутри этой директории нужно создать файл devices.xml
со следующим содержимым:
192.168.2.15
$HOME/.ssh/aurora
22
defaultuser
Давайте немного поясню параметры:
host name
— это, очевидно, имя хоста, с которого происходит подключение. Не знаю влияет ли оно на что-то, но на всякий случай лучше использовать вывод командыhostname
.device name
— название нашего устройства. Оно может быть любым, но это то название, которое будет использоваться в командеmb2 deploy
.ip
— IP-адрес устройства. В данном примере приведён адрес USB-подключения, но если вы используете зафиксированный WiFi-адрес, то нужно указать его.sshkeypath
— путь до приватного ключа для доступа к устройству. Важно указать тот ключ, публичная часть которого была добавлена на само устройство. Думаю, остальные параметры понятны и без описания.
Теперь наша сборочная система умеет подключаться к смартфону F+ R570e!
Запуск приложения
Установка на устройство
Т.к. для установки приложения мы используем утилиту mb2
из Platform SDK, команды из этого параграфа нужно выполнять на сборочной системе. Чтобы установить наше приложение на устройство, перейдём в сборочную директорию проекта:
Теперь из этой директории выполняем следующую команду:
Если всё прошло успешно, наше приложение появится в списке приложений.
Остановлюсь немного подробнее на аргументах команды mb2 build
(для более детального описания можно обратиться к официальной документации):
-t AuroraOS-${PSDK_VER}-base-armv7hl
— является обязательным параметром, мы должны явно указать таргет, который будет использоваться утилитой.-f ${PSDK_DIR}/../../shared
— это путь к той директории, в которой находится файлdevices.xml
.-d R570E
— задаёт название устройства, оно должно точно совпадать с соответствующим полем вdevices.xml
.deploy
— говорит утилите, что мы хотим разворачивать приложение на устройстве.--sdk
— задаёт тип установки, там есть несколько вариантов: zypper, pkcon, rsync и sdk, но нам нужен именно sdk.--all
— позволяет установить вместе с приложением и все его зависимости. Пока не ясно, как этот параметр использовать и нужен ли он вообще, но утилита рекомендует его проставлять.--silent
— выполняет “тихую” установку — устройство не будет оповещать пользователя об установке и спрашивать разрешения. Главное не забыть разрешить такой вариант установки в настройках.--force
— заставляет утилиту перезаписывать приложение, если оно уже было установлено ранее. Без этого ключа утилита не сможет повторно установить приложение, если у него не отличается номер версии. Для удобства отладки лучше всегда форсировать установку.
Важно отметить, что параметры нужно передавать именно в таком порядке, т.к. утилита mb2
по сути является bash-скриптом и не имеет достаточно гибкого и умного разбора аргументов.
Удалённый запуск
Теперь можно переключиться в терминал нашей рабочей машины и зайти по SSH на устройство, чтобы посмотреть список бинарников в /usr/bin
— там должно появиться наше приложение. Если его запустить через бинарник, оно откроется, но не подхватятся файлы локализации. Это точно не то, что нам нужно.
Чтобы приложение запустилось полноценно и с нормальными текстами, а не идентификаторами, нужно при вызове добавить переменную окружения AURORA_PACKAGE_NAME
:
AURORA_PACKAGE_NAME=ru.example.MyProject
При запуске с такой переменной локализация подхватывается, но выбирается локаль по-умолчанию, то есть английская. Даже не смотря на то, что в системе настроен русский язык.
Исправить это довольно просто: нужно добавить переменную окружения LANG
, тогда полный вызов будет выглядеть так:
LANG=ru_RU.UTF8 AURORA_PACKAGE_NAME=ru.example.MyProject
Эту команду можно выполнять по SSH, если настроен прямой доступ к устройству в ~/.ssh/config
. Например, для запуска на F+ R570e я использую такую команду:
Автоматизация
Т.к. каждый раз вводить все эти команды довольно неудобно, предлагаю небольшие скрипты автоматизации процесса установки и запуска приложения. Это очень простые скрипты, которые я привожу больше для примера, чем для реального использования, т.к. они не учитывают множество возможных ошибок и в целом не сказать, что очень гибкие.
Сборочная система
Начнём с нашей сборочной системы aurora_builder
. Создадим в директории ~/Tools/
скрипт psdk-deploy
:
#!/bin/bash
PROJ_DIR=
if [; then
fi
DEVICE=
if [; then
fi
ARCH=
if [; then
ARCH="armv7hl"
fi
Скрипт принимает три аргумента:
- Название проекта (директория внутри
~/Projects
). - Название устройства (должно быть в
devices.xml
). - Архитектура устройства (по умолчанию ARMv7)
Рабочая машина
На нашей рабочей машине, где мы собираемся вести разработку, создаём такой скрипт (например, aurora-deploy
):
#!/bin/bash
DEVICE=
ARCH=""
PROJ_DIR=
DESKTOP=
SSH_DEVICE=
if [; then
fi
if [; then
fi
PACKAGE_NAME=
ORG_NAME=
APP_NAME=
Скрипт должен вызываться из корневой директории проекта и принимает два аргумента:
- Название устройства, которое сборочная система попробует найти в своём файле
devices.xml
- Архитектура устройства (не обязательно).
Для запуска приложения скрипт будет опираться на конфигурацию SSH, там должна быть запись с именем устройства, иначе скрипт не будет знать как подключиться к устройству.
Заключение
Ну вот, теперь наша сборочная система практически полностью готова к работе: она умеет собирать приложения, подписывать и валидировать пакеты, устанавливать и запускать их на физическом устройстве. В целом, этого уже достаточно для начала полноценной разработки, но, конечно, хотелось бы больше удобств: отладку запущенного приложения, подключение QML LiveBench, а в идеале и настройку любимой IDE для полноценной работы с Авророй. Всё это будет, но чуть позже, следите за новостями!