Внесение изменений и локальное тестирование

На этой странице Вы найдете информацию о том, как скомпилировать системное приложение Ubuntu Touch для своего устройства. Большая часть программного обеспечения, предустановленного на устройстве Ubuntu Touch, поставляется в в виде пакета Debian. Этот формат используется несколькими дистрибутивами Linux, такими как Debian, Ubuntu и Linux Mint. В сети доступно множество документов о стандарте deb <https://www.debian.org/doc/manuals/maint-guide/index.en.html> __, поэтому мы не будем здесь подробно об этом рассказывать. Кроме того, в большинстве случаев потребуется изменить существующее программное обеспечение, а не разрабатывать новые пакеты с нуля. По этой причине это руководство в основном посвящено компиляции уже существующего пакета для Ubuntu Touch.

Есть два способа разработки системного программного обеспечения Ubuntu Touch на локальном устройстве:

Мы рассмотрим оба метода на примере программы address-book-app (Контакты).

Мы рекомендуем разрабатывать пакеты только с использованием устройства с Ubuntu Touch, установленным из канала разработки. Это гарантирует, что Вы тестируете программы в соответствии с самым последним состоянием кода Ubuntu Touch.

Предупреждение

При установке пакетов есть риск повредить программное обеспечение на устройстве так, что ничего работать не будет. В этом случае придется переустановить Ubuntu Touch.

Кросс-компиляция с помощью инструмента Crossbuilder

Crossbuilder - это скрипт, который автоматизирует установку и работу среды кросс-компиляции для пакетов Debian. Он подходит для разработки на любом устройстве, поскольку компиляция кода происходит на настольном ПК, а не на целевом устройстве. поэтому Crossbuilder рекомендуется использовать как основной инструмент разработки для Ubuntu Touch.

Примечание

Для работы Crossbuilder требуется дистрибутива Linux с установленной программой``lxd`` и доступным непривилегированным набором команд. Другими словами, нужно иметь возможность запускать команду lxc. Если на настольном ПК установлен дистрибутив Ubuntu, Crossbuilder настроит lxd самостоятельно.

Сначала нужно установить Crossbuilder на десктоп:

cd ~
git clone https://github.com/ubports/crossbuilder.git

Crossbuilder - это скрипт для оболочки shell, он не требует сборки. Нужно будет только добавить его каталог в переменную окружения PATH, чтобы его можно было запустить из любого каталога:

echo 'export PATH="$HOME/crossbuilder:$PATH"' >> ~/.bashrc
# and add it to your current session:
source ~/.bashrc

Теперь установка Crossbuilder закончилась, и можно использовать его для настройки LXD:

crossbuilder setup-lxd

Если установка LXD происходит впервые, то после её окончания нужно будет перезагрузить компьютер.

После установки LXD зайдите в каталог, где находится исходный код программы (например, cd ~/src/git/address-book-app) и запустите Crossbuilder:

crossbuilder

Crossbuilder создаст контейнер LXD, загрузит образ операционной системы, установит все необходимые файлы зависимостей и выполнит сборку пакета. Он также скопирует пакеты на устройство и установит их, если оно подключено к компьютеру (подробнее о подключении устройства к ПК см. .:doc:/userguide/advanceduse/adb). Первые два шага (создание образа LXD и получение зависимостей) могут занять несколько минут, но будут выполнены только при первом запуске скрипта Crossbuilder для нового пакета.

Теперь, если изменится исходный код в репозитории git, те же изменения будут доступны внутри контейнера. В следующий раз, когда будет выполнена команда crossbuilder, будут скомпилированы только измененные файлы.

Модульные тесты

По умолчанию crossbuilder не запускает модульные тесты; это сделано и по соображениям скорости, и потому, что контейнер не предназначен для запуска собственных (целевых) исполняемых файлов: все инструменты разработки (qmake/cmake, make, gcc и т. д.) запускаются на ПК без эмуляции (опять же из соображений скорости работы). Однако эмуляция qemu доступна внутри контейнера, поэтому должна быть возможность запускать модульные тесты. Вы можете сделать это, запустив оболочку внутри контейнера:

crossbuilder shell

Затем найдите модульные тесты и выполните их. Имейте в виду, что эмуляция не идеальна. Скорее всего, тесты завершатся ошибкой, даже если они успешно завершились на настольном ПК. Поэтому, разумнее не беспокоиться о модульных тестах при работе с Crossbuilder и запускать их только тогда, когда кросс-компиляция не выполняется.

Компиляция приложения на мобильном устройстве

Это самый быстрый и простой метод разработки небольших программ и их тестирования практически в реальном времени. Однако, в зависимости от ресурсов вашего устройства, этот путь может оказаться технически непростым: если на устройстве недостаточно свободного места в корневой файловой системе, Вы не сможете установить все файлы зависимостей для сборки пакета; на устройстве также может не хватить оперативной памяти во время компиляции.

Предупреждение

Этот способ подойдет не для всех пользователей. На многих устройствах не хватает свободного места для установки пакетов, необходимых для сборки компонентов Ubuntu Touch.

В этом примере мы скомпилируем и установим приложение «Адресная книга» (address-book-app). Все приведенные здесь команды должны запускаться на устройстве с Ubuntu Touch через удаленную оболочку.

На устройство оболочку можно установить по инструкции тут:doc:/userguide/advanceduse/adb или тут:doc:/userguide/advanceduse/ssh. Сначала перемонтируйте корневую файловую систему для чтения и записи:

sudo mount / -o remount,rw

Затем установите все пакеты, необходимые для сборки программы, над которой Вы работаете (в данном случае, это приложение «Контакты»):

sudo apt update
sudo apt build-dep address-book-app
sudo apt install fakeroot

Скорее всего, Вам захочется установить git чтобы работать с исходным кодом приложения на устройстве, а затем отправить изменения обратно в репозиторий:

sudo apt install git

Когда все закончится, можно получить исходный код приложения (в нашем примере - адресная книга) и перейти в его каталог:

git clone https://github.com/ubports/address-book-app.git
cd address-book-app

Теперь можно приступать к сборке пакета:

DEB_BUILD_OPTIONS="parallel=2 debug" dpkg-buildpackage -rfakeroot -b

Команда dpkg-buildpackage напечатает имена сгенерированных пакетов. Установите эти пакеты с помощью команды dpkg:

sudo dpkg -i ../<package>.deb [../<package2>.deb ...]

Однако обратите внимание, что установка всех пакетов может и не потребоваться: как правило, вы можно пропустить пакеты, имена которых заканчиваются на `` -doc`` или `` dev``, поскольку они не содержат кода, используемого устройством.

Дальнейшие шаги

Теперь изменения успешно внесены и протестированы локально, можно загрузить их на GitHub. Перейдите на следующую страницу, чтобы узнать как формировать пакеты с помощью UBports CI!