Сборка Приложений

Вместо (или же в добавок к) включения в репозиторий двоичных пакетов APK из внешних источников, Вы можете собирать их непосредственно из исходного кода.

Таким образом можно проконтролировать, что приложение правильно собирается, соответствует исходному коду и содержит только свободное ПО. К сожалению, часто бывает, что приложение, поставляемое в виде бинарного APK и заявленное как свободное ПО, оказывается с сюрпризом (или несколькими):

  1. Исходный код (конкретной версии или даже всех имеющихся версий) недоделанный или вообще отсутствует.
  2. Из исходного кода невозможно собрать предоставленный APK.
  3. В так называемом исходном коде есть бинарные файлы непонятного происхождения или файлы с проприетарной лицензией.

Поэтому мы предпочитаем включать в основной репозиторий F-Droid приложения, собранные из исходного кода, хотя иногда и делаем исключения по техническим или историческим причинам.

Обратите внимание: во время сборки приложения из исходного кода вы подписываете его вашим собственным ключом (на устройство Android можно установить только подписанное приложение). Если на устройстве установлена предыдущая версия приложения, подписанная другим ключом, ее придется удалить перед установкой текущей версии (т.е. невозможно обновить версию, если ключи отличаются). Такой подход добавляет пользователям хлопот, потому что при удалении приложения теряются все его данные.

Управлять репозиторием для приложения, собранного из исходного кода, нетрудно (схема действий очень похожа на описанную в главе “Простой репозиторий с бинарными файлами”), с небольшими дополнениями:

  1. Включайте сведения о сборке (из каких коммитов какие версии собирать) в файлы метаданных.
  2. Выполняйте команду fdroid build для любых еще не собранных приложений.
  3. Выполняйте команду fdroid publish для упаковки и подписи любых собранных APK.

Директория с данными приложения (fdroiddata)

Для любых задач вам понадобится как минимум одна директория с каталогом данных самого репозитория. Именно в ней выполняют команды fdroid для управления репозиторием. Можно создать ее с нуля, а можно скопировать уже имеющуюся из основного репозитория F-Droid:

git clone https://gitlab.com/fdroid/fdroiddata.git

Для любых задач и корректной работы инструментов управления необходимо добавить основные настройки в конфигурационный файл config.yml (его нужно создать в директории с каталогом данных репозитория). Для этого скопируйте шаблонный файл ./examples/config.yml из проекта fdroidserver в эту директорию и поправьте согласно содержащимся в нем инструкциям.

После этого вам становятся доступны все инструменты, нужно лишь выполнить команду fdroid. Чтобы посмотреть, какие, можно запустить эту команду без опций.

Список доступных для любой команды параметров можно посмотреть, запустив ее с опцией --help.

fdroid update --help

Подробнее об fdroid build

Если запустить команду fdroid build без дополнительных параметров, она соберет все версии приложения, которых еще нет в директории repo (точнее, в директории unsigned). Вы можете сделать миллион других вещей (--help вам в помощь при работе с инструментами fdroid), а ниже — несколько типичых примеров использования команды с пояснениями:

Чтобы собрать отдельно взятую версию какого-либо приложения, можно выполнить команду:

fdroid build org.fdroid.fdroid:16

Эта команда соберет код для 16 версии (versionCode) клиента F-Droid (versionName 0.25). Большинство инструментов распознает аргументы команды как имена пакетов, что позволяет им работать только с обозначенным набором пакетов.

Если сборка прошла без ошибок, то в директории unsigned появятся два файла:

org.fdroid.fdroid_16.apk
org.fdroid.fdroid_16_src.tar.gz

Первый файл — это неподписанный файл приложения (APK). Его необходимо подписать отладочным ключом (debug key) и установить на устройство или эмулятор устройства в тестовых целях. Второй файл — это архив с исходным кодом, из которого собран файл приложения.

Если вы собираетесь опубликовать эти файлы, то необходимо выполнить вот эту команду:

fdroid publish

Архив с исходным кодом будет помещен в директорию repo (каталог, который вы отправляете на веб-сервер). Туда же попадет оптимизированная и подписанная версия приложения (файл APK). Оба файла будут удалены из директории unsigned.

Если сборка происходит в тестовых целях, и результаты не предназначены для публикации в репозитории, то можно указать опцию --test, чтобы помещать результирующие файлы не в директорию unsigned, а в директорию tmp. Можно, конечно, просто-напросто удалить эти файлы из unsigned вручную после окончания сборки, но всегда есть риск, что вы забудете это сделать!

Аналогичным образом можно использовать опцию --force (только вместе с опцией --test!) для принудительной сборки отключенных приложений (обычно их не собирают). Так же принудительно можно собрать версии приложений со включенными в них ELF файлами и несвободными библиотеками (см. scanignore и scandelete в разделе Cборки ).

Если приложение не собралось, логи сборки можно посмотреть в директории logs/. Если после просмотра логов просветления не наступило (а такое бывает!), попробуйте собрать приложение старым добрым способом, шаг за шагом: android update project, ndk-build и ant debug.

Следует помнить, что в репозитории с исходным кодом очень часто включают заранее собранные библиотеки. Если вы планируете выложить приложение в основной репозиторий F-Droid, стоит убедиться, что все предварительные сборки выполнены или согласно инструкциям из файла метаданных, или внушающей доверие третьей стороной.

Запуск fdroid build в исходном коде приложения

fdroid build может использовать файл метаданных из исходного кода приложения (а не из папки metadata/, где сложена гора других приложений). Этот файл метаданных (.fdroid.yml) обязательно должен лежать в корне вашего репозитория с исходниками.

При такой схеме действий можно собрать самую свежую версию приложения, используя весь набор инструментов F-Droid. Выполняйте команду:

fdroid build

Если хочется собрать все существующие версии, добавьте --all.

Прямая установка на устройство

Можно объединить сборку и установку на подключенное устройство (или эмулятор) командой fdroid install. Если сделать это без указания конкретных пакетов (их передают в виде аргументов), то в результате вы получите самые свежие (собранные и подписанные) версии всех имеющихся приложений. Скорей всего, это не то, что сердце просит, поэтому установка прервется. Тем не менее, если хочется именно этого, то защиту от невнимательных можно перешагнуть, указав опцию --all. Сейчас проверок работоспособности приложений для этого режима нет, поэтому даже если файлы из подписанной результирующей директории поменялись, вам об этом никто не скажет.