外部ソースから取得したバイナリAPKをリポジトリに含める代わりに、またはそれに加えて、ソースコードから直接ビルドできます。
この方法を使用すると、アプリケーションが正しくビルドされること、ソースコードと対応していること、自由ソフトウェアのみを含んでいることを検証できます。残念ながらAndroidの世界では、バイナリAPKとして提供されるアプリケーションが、実際には以下の一部またはすべてに該当するにもかかわらず、自由ソフトウェアであるかのように見せていることが非常によくあるようです:
- ソースコード(特定のバージョン、またはすべてのバージョンのものさえ)が入手できない、または不完全である。
- ソースコードから、実際に提供されているバイナリを生成できない。
- 「ソースコード」に、出所不明のバイナリファイルや、プロプライエタリなライセンスのバイナリファイルが含まれている。
このため、メインのF-Droidリポジトリでは、ソースからビルドされたアプリケーションが推奨される方式です。ただし、技術的または歴史的な理由により、このポリシーには例外が設けられることがあります。
ソースからアプリケーションをビルドする場合、それらは自分の鍵で署名することになる点に注意してください(Androidにインストール可能にするには、すべてのAPKファイルに署名が必要です)。アプリケーションがすでに端末にインストールされている場合、元のアプリを先にアンインストールしない限り、異なる鍵で署名された新しいバージョンへそのままアップグレードすることはできません。アンインストールすると以前のインストールに関連付けられたデータが失われるため、これはユーザーにとって不便になる可能性があります。
ソースからビルドされたアプリケーション用のリポジトリを管理する手順は、「Simple Binary Repository」の章で説明したものと非常によく似ています。ただし、ここでは次の作業が必要になります:
- メタデータファイルにBuildエントリを含める。
- まだビルドされていないアプリケーションをビルドするために、
fdroid buildを実行する。 - パッケージ化を完了し、ビルド済みのAPKに署名するために、
fdroid publishを実行する。
アプリデータディレクトリ、別名 fdroiddata
何か操作を行うには、少なくとも1つのリポジトリデータディレクトリが必要です。すべてのリポジトリ管理タスクを実行するには、このディレクトリから
fdroid コマンドを実行します。新しく作成することも、メインのF-Droidリポジトリで使用されているデータのコピーを取得することもできます:
git clone https://gitlab.com/fdroid/fdroiddata.git
ツールの使用目的にかかわらず、いくつかの基本的な設定項目は必ずセットアップする必要があります。これは、データディレクトリに config.yml
というファイルを作成して行います。fdroidserverプロジェクトのサンプルファイル(./examples/config.yml)をデータディレクトリにコピーし、その中の説明に従って編集してください。
このように設定すると、ツールのすべての機能は fdroid
コマンドを実行して利用できます。利用可能なサブコマンドの一覧を表示するには、単独で実行してください。
任意のコマンドに --help を付けると、そのコマンドで利用可能な追加オプションの一覧を表示できます。
fdroid update --help
fdroid build について詳しく
パラメーターなしで実行すると、fdroid build は、repo ディレクトリ(より正確には unsigned
ディレクトリ)にまだ存在しないアプリケーションのすべてのバージョンをビルドします。他にもさまざまな操作ができます。すべてのツールと同様に、--help
オプションが頼りになりますが、以下では、よく使われる使用モードについて、注釈付きの例と説明をいくつか示します:
単一のアプリケーションの単一バージョンをビルドするには、次を実行します:
fdroid build org.fdroid.fdroid:16
これは、F-Droidクライアントのバージョンコード16(バージョン0.25)のビルドを試みます。多くのツールは引数をパッケージとして認識するため、処理対象を限られたパッケージのみに制限できます。
上記のビルドが成功した場合、unsigned ディレクトリに2つのファイルが配置されています:
org.fdroid.fdroid_16.apk
org.fdroid.fdroid_16_src.tar.gz
1つ目は(未署名の)APKです。これをデバッグ鍵で署名し、テスト用に端末またはエミュレーターへ直接pushできます。2つ目は、バイナリの生成に使用されたソースを正確に含むソースtarballです。
これらのファイルを公開する場合は、続いて次を実行します:
fdroid publish
ソースtarballは repo
ディレクトリ(Webサーバーへpushするディレクトリ)に移動されます。署名され、zipalignされたAPKもそこに配置され、両方のファイルは
unsigned ディレクトリから削除されます。
純粋にテスト目的でビルドしていて、少なくとも現時点では結果をリポジトリへpushするつもりがない場合は、--test オプションを使用して、出力先を
unsigned ではなく tmp ディレクトリに指定できます。同じような効果は、ビルド後に unsigned
から出力ファイルを削除するだけでも得られますが、削除し忘れるリスクがあります!
同様に、--test と組み合わせた場合に限り、--force
を使用して、通常は完全に無視されるDisabledアプリケーションを強制的にビルドできます。同じように、ELFや既知の非フリーライブラリを含むことが判明したバージョンも、強制的にビルドできます。Builds
セクションの scanignore と scandelete も参照してください。
ビルドに失敗した場合は、logs/ ディレクトリの出力を確認することで原因を調べることができます。それでも分からない場合は、通常の方法でアプリを段階的にビルドしてみてください: android update project、ndk-build、ant debug。
ソースコードリポジトリには、事前ビルド済みライブラリが含まれていることがよくあります。アプリがメインのF-Droidリポジトリへの収載対象として検討されている場合、そのような事前ビルド済みのものはすべて、メタデータを通じてビルドされているか、信頼できる第三者によってビルドされていることが重要です。
アプリのソース内で fdroid build を実行する
fdroid build を使用するもう1つの方法は、他の多くのアプリと一緒に metadata/
フォルダーに置かれたメタデータファイルではなく、アプリのソース自体に含まれるメタデータファイルを使用することです。.fdroid.yml
メタデータファイルは、ソースリポジトリのルートに置く必要があります。
そのセットアップが完了したら、次を実行することで、F-Droidスタック全体を使用してアプリの最新バージョンをビルドできます:
fdroid build
すべてのバージョンをビルドしたい場合は、--all を指定します。
直接インストール
fdroid install
コマンドを使用して、接続された端末またはエミュレーターへ直接ビルドしてインストールすることもできます。パッケージを引数として渡さずにこれを実行すると、各パッケージで利用可能な最新のビルド済み・署名済みバージョンがすべてインストールされます。ほとんどの場合、これは意図した操作ではないため、実行はすぐに停止します。ただし、それが本当に意図した操作である場合は、--all
を使用して上書きできます。現在、このモードでは健全性チェックが行われないため、署名済み出力ディレクトリ内のファイルが変更されていても通知されない点に注意してください。
