FAQ для разработчиков приложений

Что нужно, чтобы мое приложение добавили?

Почитайте, пожалуйста, правила добавления и убедитесь, что ваше приложение выполняет все необходимые для включения в официальный репозиторий F-Droid условия. Самый быстрый способ добавить приложение — создать мерж реквест в fdroiddata (подробные инструкции — тут. У нас есть Краткое руководство для желающих поучаствовать в F-Droid. Запросы на упаковку стоит посылать в трекер Запросы на упаковку.

Также можно настроить свой собственный репозиторий (вне репозитория F-Droid.org) и распространять приложение самостоятельно.

Как изменить описание или добавить метаданные (например, скриншоты)?

Мы собираем метаданные из трех мест:

Хотя вы не можете редактировать последнее, запросы на слияние в хранилище метаданных, обновляющие описание, приветствуются. Скриншоты, с другой стороны, в настоящее время используются только из репозитория upstream.

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

Как я могу лицензировать свое приложение?

В целом, существует две категории: авторское лево и разрешительная, наиболее популярными из которых являются GPLv3 и Apache 2.0 соответственно. Выбирайте первую, если вы настаиваете на том, чтобы производные имели ту же лицензию, и вторую, если вы разрешаете любое повторное использование.

Общая лицензия должна быть совместима с лицензией компонентов. Однако мы будем проявлять некоторую гибкость, когда дело касается активов и ресурсов; так что если у вас есть, например, музыка под некоммерческой лицензией Creative Commons (т.е. лицензия Non-Free), то мы примем ее. Главное, чтобы информация об авторских правах на активы, а также на исходный код была указана в заголовках файлов и/или в README. Полезно иметь копию лицензий в корне репозитория (файлы LICENSE или COPYING). Также обратите внимание на авторские права и лицензии, относящиеся к внешним ресурсам или программам, и если они связаны с бесплатным сервисом, рассмотрите возможность использования Affero GPL. Подробнее см. в Inclusion Policy.

Как обрабатываются пожертвования?

На веб-сайте и в клиенте F-Droid мы предоставляем ссылки для пожертвования на ваш проект. В идеале у вас должна быть специальная страница, объясняющая, как и почему можно пожертвовать на ваш проект, чтобы мы могли напрямую ссылаться на нее. Помните, что большинство пользователей, вероятно, получат доступ к этой странице прямо из клиента F-Droid на устройстве Android. Вы также должны иметь доступ к этой информации из вашего приложения.

В наших метаданных есть поля для пожертвований Bitcoin, Litecoin, Flattr и Liberapay. Обязательно свяжитесь с нами, если произошли изменения в любом из этих методов или если вы перестали их принимать; если вы принимаете новые методы, вы также можете связаться с нами по этому поводу.

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

Будет ли мое приложение создано из исходного кода?

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

А как насчет версии?

Android знает две информации о версии: versionName (строка для пользователя) и versionCode (целое число, которое сравнивается, чтобы определить, что на самом деле является обновлением). Дополнительную информацию можно найти в Android Developer Documentation. Убедитесь, что информация не противоречит друг другу (например, несовпадение AndroidManifest.xml и build.gradle).

Мы стараемся создавать только то, что вы считаете релизами. Они должны иметь совпадающие имена версий и, что более важно, совпадающие коды версий с релизами, которые вы собираете сами, и быть собранными из того же кода. Очевидно, что эта задача облегчается, если история вашего исходного кода ясна - например, если релизы помечаются тегами или иным образом маркируются. Если вы помечаете релизы, пожалуйста, убедитесь, что вы придерживаетесь той же схемы пометки, например, если вы начали использовать префикс “v”, продолжайте использовать его.

Мы стараемся не собирать из случайной версии репозитория.

Должен ли я сообщать вам о своем обновлении?

Мы будем обнаруживать новые релизы вашего приложения и обновлять наши метаданные соответствующим образом, что заставит нас проверить код и добавить новые сборки в нашу систему. Теги очень помогают при добавлении новых версий, но не забывайте каждый раз добавлять их в исходное репо. Конечно, если вы переносите исходный код на другой сайт, вы должны сообщить нам об этом. В настоящее время существуют некоторые проблемы с обнаружением новых версий при перемещении AndroidManifest.xml, поэтому, если есть какая-то срочность, вы можете сообщить нам об этом.

Некоторые разработчики приложений при выпуске отправляют нам запросы на слияние со всеми соответствующими данными сборки. Вам не обязательно это делать, но это может ускорить процесс. Исторически сложилось так, что мы, как небольшой проект сообщества, обрабатываем обновления медленнее, чем хотелось бы, но ситуация постоянно улучшается.

Наши проверки обновлений тупые и просто сканируют файлы сборки: Мы не запускаем код сборки, поэтому не используем версионирование по времени или любые другие способы вычисления версии во время сборки (например, перемещение в несколько подверсий, которые объединяются при сборке, или даже сложные вызовы функций для этого).

Я опубликовал новый релиз. Почему его нет в репозитории?

После того как мы обнаруживаем новый выпуск, его попадание в репозиторий может занять несколько дней, поскольку процесс сборки происходит только раз в день. До завершения сборки, страница проверки вашего приложения появится в списке F-Droid Monitor - Требуется обновление. Если в разделе Версии в тексте “Текущая (рекомендуемая) версия — xxx (код версии yyy)” указаны номера версий, соответствующие вашему последнему выпуску, значит мы его обнаружили и APK скоро будет доступен. Просто дайте ему немного времени.

Другая причина может заключаться в том, что приложение не удалось собрать. Вы можете отслеживать процесс сборки здесь F-Droid Monitor - Running, а предыдущие результаты в Build.

А как насчет подписания?

Пакеты, собранные F-Droid, подписаны им, поэтому все приложения в официальном репозитории F-Droid подписаны ключами F-Droid’а. F-Droid генерирует новый ключ для каждого включенного приложения. Все различные APK, созданные из разных версий приложения, будут подписаны одним и тем же ключом. Но обратите внимание: если приложение также распространяется в APK, подписанном разработчиком, как в Google Play Store, то APK F-Droid будет иметь другую подпись.

ОС Android требует, чтобы для обновления приложения на месте оно имело ту же подпись, что и текущая установленная версия. Это защищает от случайной установки недоверенного или нежелательного обновления, а также защищает личные данные приложения, доступ к которым может получить только это приложение (или приложение, получившее root-доступ).

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

Мы также поддерживаем воспроизводимые сборки, так что мы можем собрать версию из исходных текстов и проверить ее по вашему официальному релизу. Если они совпадают (игнорируя подпись), мы можем опубликовать ваш официальный APK с вашей подписью. Это утомительная задача, так как мы должны стандартизировать параметры и инструменты сборки, но это должно стоить того в долгосрочной перспективе. Мы также пытаемся проверить наши собственные сборки и получить много бинарных отличий, смотрите результаты работы нашего верификационного сервера. Однако со временем ситуация будет улучшаться.

Можно ли включить APK, подписанные моим ключом?

Только APK, созданные F-Droid, включаются в официальные репозитории F-Droid. Мы можем попытаться воспроизвести ваш APK, как упоминалось выше, но если это не удастся (или, например, если вы хотите распространять приложение с закрытыми компонентами или ключами API и т.д.), вы можете поместить любой APK в свой собственный “F-Droid binary repo”, и люди могут добавить ваш репо в свой клиент F-Droid, чтобы получить ваши APK.

Могу ли я запустить собственный репозиторий пакетов F-Droid?

Да! Вы также можете настроить и запустить свой собственный репозиторий F-Droid с приложениями и другими пакетами. Если вы также выпускаете свои собственные приложения через другие магазины приложений, например Google Play, мы рекомендуем вам также включить эти релизы в собственное бинарное хранилище, поскольку, помимо прочего, это обеспечит источник APK для воспроизводимых сборок. Этот репозиторий может быть “простым бинарным репозиторием”, который не использует систему сборки fdroidserver, или вы можете разместить свое собственное зеркало полного репозитория F-Droid.org.

Могу ли я увидеть, кто устанавливает мое приложение?

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

Могу ли я отслеживать пользователей из своего приложения?

You can, but if you include any kind of tracking or analytics in your application (even sending crash reports) this must be something that the user explicitly opts in to - i.e. you ask them on first run, before sending anything anywhere, or there’s a preference that defaults to OFF. In all other cases, we may still include the app, but it will be flagged with our ‘Tracking’ Anti-Feature, which means users will only ever see the app if they choose to view such apps.

Кроме того, обратите внимание, что сторонние аналитические библиотеки, поставляемые в виде проприетарного программного обеспечения (например, Google Analytics или Flurry), здесь неприемлемы.

Могу ли я включить рекламу?

Да, но:

  1. Многие пользователи не любят рекламу и считают ее навязчивой. Мы помечаем приложения, содержащие рекламу, чтобы люди знали, что они получают. Они могут выбирать, показывать им эти приложения или нет.
  2. Часто включение рекламы в приложение происходит путем включения проприетарного программного обеспечения в виде бинарной библиотеки (jar-файл). Очевидно, что это сделает ваше приложение неприемлемым для включения.

Какие библиотеки и зависимости стоит использовать?

Чтобы быть FLOSS, все ваше приложение должно быть FLOSS, включая зависимости. Если вы используете несвободные/проприетарные библиотеки, мы не сможем собрать ваше приложение, и, следовательно, оно не может быть включено в наш основной репозиторий (в этом случае смотрите “Могу ли я запустить свой собственный репозиторий приложений?”). К сожалению, это исключает любые библиотеки, входящие в “репозиторий Google” из менеджера SDK (например, play-services, fabric, firebase) - разрешено использовать только “репозиторий поддержки Android”.

Для внешних ресурсов, пожалуйста, ограничьтесь “хорошо известными репозиториями”, например, mavenCentral или JCenter (см. полный список в разделе “srclib” Build Metadata Reference). Обратите внимание, что, например, Bintray предлагает не только JCenter, но и user-repos. Они не входят в список доверенных репозиториев.

Если вам требуются зависимости, недоступные в этих репозиториях, пожалуйста, не используйте бинарные jar-файлы напрямую, а предоставьте простой способ собрать их из исходного кода: например, предоставив скрипт “предварительной сборки”, включив их в ваш фактический процесс сборки (gradle task) и включив исходный код библиотеки в ваш проект (жестко или через подмодуль).

Замена известных “обычных подозреваемых”:

Обратите внимание, что все перечисленное ниже - это лишь субъективные предложения, основанные на популярности; возможно, существуют другие проекты FOSS, более подходящие для ваших нужд.

  • Crittercism, BugSense — ACRA
  • Google Аналитика — Piwik
  • Google Карты — OpenStreetMap, например, через mapsforge или osmdroid

Разве SDK и библиотеки Google не бесплатное программное обеспечение с открытым исходным кодом?

В то время как большая часть Android является бесплатным программным обеспечением с открытым исходным кодом, большая его часть вовсе не является таковым. Бинарные файлы Android SDK предоставляются Google по проприетарной лицензии, но почти весь исходный код Android SDK доступен по лицензии Apache. API Google, используемые для создания приложений, использующих сервисы Google, такие как Maps, GCM и т.д., бесплатны в той степени, в которой библиотека поставляется предустановленной на устройство. Почти все библиотеки Google, такие как Play Services, Google Admob и GCM, являются проприетарными и не могут быть включены в основной репозиторий F-Droid.

Какую систему сборки использовать?

У нас есть хорошая поддержка сборок на основе “ant” и “gradle”, а “maven” использовался только в течение короткого периода времени и для зависимостей. Для других систем сборки, возможно, вам придется предоставить нам подробную информацию о том, как с ними работать, чтобы мы могли правильно настроить приложение или, возможно, даже включить их в наши серверные инструменты.

Особое замечание по Cordova/Phonegap/HTML-приложениям:

Мы не можем собирать приложения cordova напрямую, но последняя версия позволяет экспортировать код, специфичный для платформы, который может быть собран отдельно с помощью “gradle”. Поэтому сейчас мы требуем, чтобы этот код присутствовал и был актуальным в репозитории исходников.

Как я могу удалить свое приложение?

As a best practice our packaging team usually makes sure we have consent from upstream developers, before adding apps to the official f-droid.org repository. Should you for whatever reason want us to remove your app from the official f-droid.org repository, please ask our packaging team to do so. The probably fastest way to get your request processed is to open an issue on our data issue tracker. You can also get in contact with our team on our other communication channels.

Почему мое приложение может быть удалено?

Любые изменения в вашем приложении которые нарушают нашу политику приведут к удалению или архивированию приложения. Например вы можете использовать лицензию на будущие версии, которая запрещает кому-либо распространять его, или вы можете внедрить несвободные двоичные файлы в ваш исходный код. И то, и другое гарантирует, что эти будущие версии не появятся в нашем репозитории, но вам придется пойти гораздо дальше (например, серьезные недостатки безопасности в предыдущих версиях в сочетании с неопубликованным исходным кодом и нежеланием сотрудничать), чтобы мы действительно удалили все приложение.

In some rare cases we also have to comply with take-down requests in accordance with our other policies. Generally speaking we recommend steering clear of trademark and copyright infringements.

Я вижу в крупных магазинах приложения, которые являются откровенными копиями. Не лучше ли будет, если я сделаю свое приложение с закрытым исходным кодом?

Во-первых, это зависит от лицензии: если вы не применяете лицензию с копилефтом, например GPLv3, другие люди могут делать с исходным кодом все, что захотят (хотя от них может потребоваться его ребрендинг). Если ваше приложение работает под GPLv3, а плагиаторы не публикуют исходный код; их версии, очевидно, включают несвободные рекламные библиотеки, или любые признаки вашего авторства просто удалены, эти копии нарушают закон, и вам следует потребовать от Google удалить их из своего магазина приложений. При желании вы можете пригрозить им DMCA или другими местными законами. Если все остальное не удается, прежде чем прибегать к проприетарным мерам, взвесьте потери и путаницу для пользователей и разработчиков бесплатного приложения с чувством справедливости, которое вы получите, увидев, как эти незаконные клоны теряют те несколько центов дохода от рекламы, которые они могли бы получить. В долгосрочной перспективе мы хотим улучшить пожертвования через F-Droid, чтобы вы могли получать финансовую поддержку, и мы уже поддерживаем Bitcoin, Litecoin, OpenCollective, Flattr и Liberapay, а также любой другой способ оплаты, который вы можете предложить через веб-сайт.

Как устроен рабочий процесс git клиента F-Droid?

git позволяет гибко подходить к процессу совместной работы, поэтому важно четко определить рабочий процесс этого сообщества, чтобы люди знали, чего ожидать. Рабочий процесс git, который использует клиентское приложение F-Droid, относительно прост и основан на очень распространенном рабочем процессе, установленном на github.com, gitlab.com и им подобных. Вот краткое описание того, что это значит:

  • вся разработка происходит в ветке master
  • код подается на включение через запросы на слияние (MR)
  • релизы происходят в недолговечной ветке стабильных релизов для каждого основного релиза (например, stable-0.95, stable-0.96, stable-0.97 и т.д.)
  • работа, которая идет в ветку стабильного релиза, должна быть жестко сфокусирована и как можно меньше, чтобы цикл выпуска был как можно короче
  • ветвь master никогда не должна сливаться с любой ветвью стабильного релиза
  • ветки стабильных релизов никогда не должны сливаться с веткой master
  • Запросы на слияние для стабильной ветки релиза могут включать коммиты из master
  • не все коммиты, включенные в ветку стабильного релиза, должны быть в master
  • что вы делаете в своих git-форках, зависит от вас, но окончательный запрос на слияние не должен включать коммиты слияния

Вот обсуждение с собрания, на котором мы закрепили это: https://web.archive.org/web/20171220230923/https://botbot.me/freenode/fdroid-dev/2015-08-04/?msg=46407489&page=1

Эта статья включает хорошее обсуждение “ветвей возможностей” в сравнении с “ветвями релизов” и короткоживущих и долгоживущих ветвей: http://blogs.atlassian.com/2013/11/the-essence-of-branch-based-workflows/