Dev FAQ: различия между версиями

Материал из AuroraWiki
Нет описания правки
Строка 22: Строка 22:
** [https://www.youtube.com/watch?v=IZNjxJoBg-c&t=18611s Современные подходы к доверенной загрузке ОС на примере Аврора СДЗ для процессоров Baikal-M]
** [https://www.youtube.com/watch?v=IZNjxJoBg-c&t=18611s Современные подходы к доверенной загрузке ОС на примере Аврора СДЗ для процессоров Baikal-M]
** [https://www.youtube.com/watch?v=Wk4YdCmyAkE Aurora, Server + macOS M1]
** [https://www.youtube.com/watch?v=Wk4YdCmyAkE Aurora, Server + macOS M1]
** [https://rutube.ru/video/7260594617e9b4480e64ece8816cd10d/ Основы QML и QtQuick. QML и мобильная ОС Аврора.]
** [https://rutube.ru/video/bc4f4f1a7f67859e699a59aa5add2002/ Знакомство с QML]
** [https://rutube.ru/video/3eec65de8aeee2030d2746b3e040dd0e/ Интеграция QML и C++]
** [https://rutube.ru/video/d6241f43f57fca060f89218526fbaacb/ Кирилл Чувилин — «Компоненты, модели и представления в Qt Quick»]
** [https://www.youtube.com/@AuroraOSCommunity Видеоматериалы по ОС Аврора и Sailfish OS: использование, разработка, мероприятия]
** [https://www.youtube.com/@AuroraOSCommunity Видеоматериалы по ОС Аврора и Sailfish OS: использование, разработка, мероприятия]
** [https://rutube.ru/video/2ac44fb17ebd4a70eb98f152ebfda686/ Установка программ в эмулятор ОС Аврора]
** [https://rutube.ru/video/2ac44fb17ebd4a70eb98f152ebfda686/ Установка программ в эмулятор ОС Аврора]

Версия от 13:47, 14 августа 2024

Разработка под Аврора ОС

Как начать разрабатывать под Аврора ОС?

Разработка возможна на C++/Qt, либо (с ограничениями) на Flutter и Kotlin Multiplanform. Основной ресурс - это официальная документация.

Полезные ссылки для начинающих разработчиков:

На каких платформах возможна разработка?

Формально доступны дистрибутивы 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 при работе с Аврора ОС через терминал?

Возможно. Для этого нужно сделать следующие действия:

  1. Заходим под рутом через devel-su
  2. pkcon install sudo
  3. Раскомментируем строчку %wheel .........NOPASSWD в /etc/sudoers
  4. usermod -aG wheel defaultuser
  5. Перезаходим под 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

Как вывести устройство из состояния "Заблокировано навсегда"?

Вывод устройства из состояния "Аутентификация неуспешна; Устройство заблокировано навсегда":

  1. В выключенном состоянии зажать кнопку питания и громкость+, далее выбрать Fastboot Mode (громкость+ переключает выбор, громкость- вход в выбранный режим)
  2. В режиме fastboot Wipe userdata выполнить следующие команды: fastboot devices, fastboot -w. В случае, когда невозможно сделать сброс в recovery, если "Заблокировано при помощи Aurora Device Manager; Это устройство заблокировано навсегда", этот шаг можно пропустить.
  3. Дождаться выполнения команды и выполнить fastboot reboot bootloader
  4. В режиме 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>