F-Droidにアプリを登録してみた

# 概要

[F\-Droid](https://www.f-droid.org/)に自作アプリ[CIFS Documents Provider](https://f-droid.org/packages/com.wa2c.android.cifsdocumentsprovider/)を登録してみたので、その内容について書きます。

# F-Droidとは

F-Droidとは、公式サイトによると次のように説明されています。

> F-Droidは、Androidプラットフォーム用のFOSS(Free and Open Source Software=フリーオープンソースソフトウェア)アプリケーションのインストール可能なカタログです。お使いの端末で簡単にブラウジング、インストール、およびアップデートの追跡ができます。

要するに、オープンソースのアプリに限定されたAndroidアプリストアです。
F-DroidアプリをAndroid端末にインストールすることで、登録されている各アプリを端末にインストールすることができます。
また、Androidだけでなく、Kindle FireのFire OSのようなAndroid派生OSでも扱うことができます。

# 登録アプリの条件

F-Droidに登録するためのアプリのポリシーについては、[Inclusion Polic](https://www.f-droid.org/ja/docs/Inclusion_Policy/)に書かれています。

大前提として、F-Droidに登録するアプリは、GPLやApacheライセンスのようなライセンスで公開されたオープンソースソフトウェアである必要があります。また、使用されるすべてのライブラリと依存関係を含め、ソフトウェア全体がFLOSS(Free/Libre and Open Source Software=自由ソフトウェア・オープンソース)である必要があり、FLOSSツールのみでビルド可能である必要があります。

細かい要件は次のようになります。

* Google独自のPlay Serviceが使われていないこと。
* CrashlyticsやFirebaseのような、FLOSSでない分析ツールやバグレポートが使われていないこと。(ACRAなどは使用可能)
* FLOSSでない広告ライブラリが使われていないこと。
* OracleのJDKや一部のプレリリースツールチェーンのような、フリーで無いビルドツールを必要としないこと。

その他、フォークした際にパッケージ名がそのままになっていないことや、商標が侵害されていないこと、といった要件はありますが、詳細はポリシーを参照した方が良いと思います。

ちなみに、自分が開発したアプリ以外でも申請(要するに登録依頼)ができるようですが、やったことは無いのでよく分りません。

# アプリ登録方法

## リポジトリの公開

当然ですが、登録するアプリのソースコードが公開されている必要があります。外部から参照可能なGitやMercurialなどのリポジトリが必要です。GitHubを初めとしたバージョン管理サービスで公開されていれば問題ありません。
公開されるアプリは、公開されているソースコードから自動的にビルドされますので、公開されているソースコードはビルド可能な状態になっている必要があります。

## fastlaneの作成

[fastlane](https://docs.fastlane.tools/)とは、アプリのリリース申請を自動化するための仕組みです。これを利用するためには、ソースコードプロジェクトのルートに「fastlane」というフォルダを作成し、各種リリース情報を配置します。F-Droidでは、このfastlaneの情報が、ストア上に反映されます。
実際に配置する情報について、CIFS Documents Providerの[fastlaneフォルダ](https://github.com/wa2c/cifs-documents-provider/tree/main/fastlane)では、登録に必要とされる最小限のデータを追加しています。

## タグの付与

リポジトリにリリース対象となるリリースのタグを付与します。F-Droidではこのタグが付与されたソースからアプリがビルドされます。
タグは一定のルールに基づいたものにしておくと、新しいタグを付与した際にF-Droidが自動的にバージョンを更新します。


## パッケージ登録依頼

アプリ登録を行う場合は、[Issue Tracker](https://gitlab.com/fdroid/rfp/-/issues)にパッケージ登録依頼Issueを出します。システム的な物ではなく、管理者が手動で設定を行うようです。
私が登録したときのIssueは[こちら](https://gitlab.com/fdroid/rfp/-/issues/1827)になります。入力については、

* タイトルを「[Request for Packaging] アプリ名」とする。
* 他のIssueと同様の入力フォーマットに従って情報を入力する。

としておくと良さそうです。また、タグ付けのルールについて説明を加えておくと良いかと思います。
この時、

* ビルド・エラーのチェック
* アプリ開発者に登録の承認が取れているか
* 重複申請は無いか
* FLOSSでないライブラリやサービスが使われていないか
* fastlaneフォルダが存在するか
* タグの規則性確認

といった感じの確認が行われるようです。

## アプリの登録

申請が受理された後、F-Droidがビルドおよび署名の付与を行い、自動的にストアに登録されます。
申請受理から登録まではタイミングによって異なるそうですが、自分の場合は2021-08-19に申請が受理され、2021-08-29に公開されました。おおよそ10日かかったので、この辺りを目安にした方が良いかと思います。

アプリが公開されると、次のようなページが作成されます。

[CIFS Documents Provider \| F\-Droid \- Free and Open Source Android App Repository](https://f-droid.org/en/packages/com.wa2c.android.cifsdocumentsprovider/)

## アプリの更新

アプリ更新する際は、定めたタグのルールに従ったアプリ登録時に設定されたのパターンのタグを付与すると、自動的にアップデートがかかります。
これもタイミングによって公開までの期間は異なるそうです。自分の実績としては

2021-09-09タグ追加 → 2021-09-17公開

という感じなので、タグ付与から1週間以上は見た方が良さそうです。

ちなみにタグがルール化されていないアプリに対して手動でアップデート申請をすることもできるようですが、よく知りません。

# 最後に

F-Droidの登録については以上になります。
正直なところ、F-Droidに登録して何かメリットがあるかと問われると困るのですが、自分は「何となくやってみたかったから」以上の理由は特にないです。(オープンソースアプリを開発していることを、第三者のチェックによって明確に誇示できるという意図は多少ありますが。)
ただ、こうして公開したことで、Google Playサービスの搭載されていないような純粋なAndroidではないOSが乗った端末でも利用可能になるので、どこかの誰かに役に立ってくれれば良いと思います。