Dev FAQ
Разработка под Аврора ОС
Как начать разрабатывать под Аврора ОС?
Разработка возможна на C++/Qt, либо (с ограничениями) на Flutter и Kotlin Multiplanform. Основной ресурс - это официальная документация.
Полезные ссылки для начинающих разработчиков:
- Неофициальное сообщество разработчиков в Telegram
- Учебные материалы от разработчиков ОС
- Разработка приложений для ОС Аврора (бесплатный курс)
- Разработка прикладного ПО на Qt и ОС «Аврора» (платный курс)
- Разработка программного обеспечения для ОС АВРОРА (платный курс)
- Внедрение, администрирование и работа с платформой централизованного управления мобильными устройствами Аврора Центр (платный курс)
- Видео
- Роман Аляутдин, Денис Глазков — Разработка для ОС «Аврора»
- Алексей Гладков — ОС «Аврора» глазами Android- и iOS-разработчика
- Aurora OS. Первый взгляд / Мобильный разработчик
- Установка и настройка QEMU + Alpine Linux + Аврора Platform SDK
- Механизмы безопасности и изоляции приложений в мобильной ОС Аврора
- Современные подходы к доверенной загрузке ОС на примере Аврора СДЗ для процессоров Baikal-M
- Aurora, Server + macOS M1
- Видеоматериалы по ОС Аврора и Sailfish OS: использование, разработка, мероприятия
- Установка программ в эмулятор ОС Аврора
- Статьи
На каких платформах возможна разработка?
Формально доступны дистрибутивы SDK для Windows, Linux и macOS (только x86).
Как запустить SDK на macOS?
Работа на устройствах на базе ARM64 официально не поддерживается, хотя существуют обходные пути с развертыванием Build Engine вне macOS. Следующая инструкция проверена на macOS Sonoma 14.5 (x86):
- Скачайте оффлайновый установщик интересующей вас версии SDK, кликните дважды на скачанном .dmg, в открывшемся окне кликните на установочном файле правой кнопкой мыши и выберите "Открыть". Подтвердите открытие в диалоговом окне.
- Запустится инсталлятор, установите SDK c его помощью.
После установки эмулятором можно пользоваться сразу, но для работы с устройством потребуются дополнительные действия. При добавлении девайса через интерфейс IDE, не удается достучаться до него по SSH. Общий смысл официальных рекомендаций описан в официальной документации, в разделе "Установка драйвера мобильного устройства в macOS", но указанная там версия драйвера HoRNDIS не работает на последних версиях macOS.
- Можно посмотреть в сторону более свежего форка HoRNDIS + Kext Droplet, возможно у вас удастся заставить девайс работать по USB
- Либо включить USB Tethering (см. ответ на вопрос "Как раздать интернет по кабелю?" выше) и подключаться к девайсу по SSH через Wi-Fi. В этом случае нужно не забыть в настройках девайса сделать Deploy Public key, указать Authentication type: Specific key и путь до приватного ключа.
При скачивании Аврора SDK требуется выбрать версию, которая соответствует версии целевого устройства (таргета). Как собрать проект на разные версии ОС?
Plarform SDK позволяет установить несколько таргетов и собирать проект для разных версий ОС Аврора.
Какой версии Qt в Аврора ОС?
Qt 5.6.3 c определенными ограничениями. В комплект входят нативные UI компоненты Silica и Aurora Controls (последние - с Авроры 5)
В каких папках устройства располагаются файлы установленного приложения?
- исполняемый файл располагается по пути /usr/bin/{имя проекта};
- desktop-файл располагается по пути /usr/share/applications/{имя_проекта}.desktop;
- иконки располагаются по путям /usr/share/icons/hicolor/{разрешение}/apps/{имя проекта}.png;
- дополнительные файлы, используемые приложением, располагаются в директории /usr/share/{имя проекта}.
Почему не рекомендуется использовать библиотеку Qt Widgets?
В процессе развития фреймворка Qt появился подход разработки интерфейса приложения с применением QML (Qt Modeling Language), что было продиктовано необходимостью создания гибких пользовательских интерфейсов, требованием упростить описание элементов на сенсорном экране. В качестве альтернативы модулю Qt Widgets предлагается Qt QML, Qt Quick и Qt Quick Controls. Такой подход не ограничен только мобильными/сенсорными устройствами, но применим и для настольных ОС. Подробнее разработке на основе Qt Quick можно прочитать здесь https://metanit.com/cpp/qt/3.1.php . (По отзывам исследователей, приложение для ОС Аврора 4, использующее Qt Widgets, может запуститься, но не пройдет проверку валидатора).
Какие существуют примеры/статьи по написанию тестов для проекта на Qt?
Модульное тестирование Qt/C++ под Sailfish OS https://habr.com/ru/articles/323518/
Тестирование QML-компонентов https://habr.com/ru/articles/320808/
Методы и инструменты автоматизированного тестирования приложения для SailfishOS https://www.researchgate.net/publication/320649391_Method_and_tools_for_automated_end-to-end_testing_of_applications_for_sailfish_OS
Разработка и запуск сценариев для Qmltestrunner https://www.theseus.fi/bitstream/handle/10024/98894/Johansson_Lauri.pdf?sequence=1
Возможно ли портировать Аврора ОС на стороннее устройство?
На данном этапе развития ОС такой возможности нет, т.к. нет открытого Hardware Adaptation Kit, открытого исходного кода системы и прочих инструментов для этого.
Даже если это было бы возможно, то в таком случае не будет работать экосистема Авроры в виде Маркета, Аврора Центр и прочего ПО. В качестве альтернативы и упражнения можно попробовать портировать Sailfish OS, UBPorts, NemoMobile и другие мобильные Linux ОС.
Как подписывать приложения из консоли?
Есть готовое решение для подписи пакета в настольной ОС.
Как подписывать приложения на устройстве?
Для подписи приложений не обязательно ставить SDK:
- Включаем режим разработчика и терминал
- Скачиваем стандартные ключ и сертификат
- Скачиваем RPM-пакет, который нужно подписать, заходим в терминал под рутом (
devel-su
), переходим туда, куда скачали (напр./home/defaultuser/Downloads
) - Выполняем
rpmsign-external sign --key regular_key.pem --cert regular_cert.pem имя_подписываемого_пакета.rpm
- Если у пакета уже есть неподходящая подпись, добавляем
--force
Можно ли использовать sudo вместо devel-su при работе с Аврора ОС через терминал?
Возможно. Для этого нужно сделать следующие действия:
- Заходим под рутом через
devel-su
pkcon install sudo
- Раскомментируем строчку
%wheel .........NOPASSWD
в/etc/sudoers
usermod -aG wheel defaultuser
- Перезаходим под defaultuser
Как добавить зависимость в проект?
Как добавить репозиторий в эмулятор и таргет для последующей сборки описано здесь.
Пример: проекту нужен curl, который есть в Аврора SDK.
libcurl есть в чистом виде в ОС Аврора, можно ее собрать самому рядом со своим проектом, нужной версии (не сложно), можно заменить Qt API для работы с REST API, через QNetworkAcessManager и QNetworkRequest. В простом случае прописать зависимости в spec файл, линковать библиотеку с проектом через pkgconfig (можно и на прямую, можно и через cmake файлы). Если вы берете curl сами с сайте, вам нужны исходники. Из них собираете библиотеку, пакуете и линкуете со своим проектом.
https://developer.auroraos.ru/doc/software_development/guidelines/spec_requirements - как в .spec прописать библиотеку,
https://developer.auroraos.ru/doc/software_development/reference/public_api - про зависимости
рецепт в общих чертах для curl из SDK
1. в spec файле прописываем зависимость от curl
BuildRequires: pkgconfig(libcurl)
2. в pro файле
PKGCONFIG += libcurl
последняя директива не обязательно будет использовать системную библиотеку, но в общем случае - да (т.е. pkconfig ищет файлы конфигов в системных папках).
Если собираете с проектом (стороннюю) библиотеку, линкуйте напрямую
LIBS += -L$$PWD/libs/curl -lcurl
Как вывести устройство из состояния "Заблокировано навсегда"?
Вывод устройства из состояния "Аутентификация неуспешна; Устройство заблокировано навсегда":
- В выключенном состоянии зажать кнопку питания и громкость+, далее выбрать Fastboot Mode (громкость+ переключает выбор, громкость- вход в выбранный режим)
- В режиме fastboot Wipe userdata выполнить следующие команды:
fastboot devices
,fastboot -w
. В случае, когда невозможно сделать сброс в recovery, если "Заблокировано при помощи Aurora Device Manager; Это устройство заблокировано навсегда", этот шаг можно пропустить. - Дождаться выполнения команды и выполнить
fastboot reboot bootloader
- В режиме recovery сброс
Как обновиться до неофициальной версии Аврора 5.*.*?
Сейчас это невозможно. Раньше был открыт публичный доступ к тестовым версиям, старую инструкцию все еще можно найти здесь.
Как получить сервисную информацию об устройстве?
Нужно зайти в настройки, об устройстве и много раз быстро нажать на версию сборки. Выглядит она так.
Есть ли поддержка low latency ядра в Авроре?
На данный момент свойства high resolution low latency звука на Авроре не определены, скорее всего они не лучше Linux дистрибутивов без накруток.
Что нужно сделать (rtpatch , pipewire итд ) разработчики системы пока не знают, но о запросе услышали и рекомендуют оформить запрос на улучшение в трекер бета-программы.
Проигрывание видео на эмуляторе
Чтобы использовать QtMultimedia.Video на эмуляторе, нужно:
- Добавить в строку "Requires" spec-файла
qt5-qtmultimedia-plugin-mediaservice-gstmediaplayer
Заставить именно эмулятор проигрывать видео h265 пока не удалось даже путём установки плагинов gstreamer. Ошибка выглядит так:
No decoder available for type 'video/x-h265, stream-format=(string)hvc1, ...
Как избежать изменения .gnu.build-id при сборке/разворачивании проекта
если это важно при настройке breakpad/crashpad
.gnu.build-id меняется в post install, это так и задумано rpm'ом, можно предотвратить через
%global _no_recompute_build_ids 1
в spec-файле
При запуске приложения из командной строки, оно стартует без песочницы. Как запустить из консоли приложение со включенной песочницей?
$ invoker --type=qt5 <app_name>