除了(或以及)包括來自存儲庫的外部源二進位 APK,可以直接從原始程式碼構建程式。
使用此方法,可以驗證應用程式構建是否正確,是否與原始碼相對應,是否只包含自由軟體。不幸的是,在 Android 世界中,以二進制 APK 形式提供應用程式並聲稱自己是自由軟體似乎司空見慣,它,然而實際上,以下部分甚至全部都是事實:
- 該原始碼(或許是某特定版本的,甚或是全部版本的!)無法取得或不完整。
- 該原始碼無法產生實際提供的二進制碼。
- 該「原始碼」包含不明來源或專屬授權的二進制檔案。
因此,從原始碼構建應用程式為 F-Droid 主軟體庫的首選方法,儘管偶爾出於技術或歷史原因,也有例外。
從原始碼編譯時,應注意,你需使用自己的密鑰對應用程式簽名(所有 APK 必須經過簽名才能在 Android 上安裝)。如果裝置已安裝某個應用程式,升級至使用不同密鑰簽名的新版本時,需首先卸載該應用程式。這可能對用戶帶來不便,因為卸載將導致與已安裝應用程式相關聯資料的丟失。
管理從原始碼編譯的應用程式的軟體庫的流程與《簡單二進制軟體庫》章節中的說明非常相似,不過還需:
- 包含 Build 條目至中介資料檔案。
- 執行
fdroid build來構建任何尚未構建的應用程式。 - 執行
fdroid publish完成封裝,並對所有已構建的 APK 進行簽名。
應用程式的資料目錄,即 fdroiddata
開始之前,你需要至少一個軟體庫資料目錄。在這個目錄下,可執行 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
該指令用於編譯版本代碼 16(即 0.25 版本)的 F-Droid 客戶端。這些工具中許多可將參數識別為包,以便其活動僅限於特定一組包。
編譯成功後,unsigned 目錄將生成兩個檔案:
org.fdroid.fdroid_16.apk
org.fdroid.fdroid_16_src.tar.gz
第一個檔案是(未簽名的)APK。你可以使用除錯密鑰簽名,然後直接在裝置或模擬器中進行測試。第二個檔案是原始碼 tarball,其中包含生成二進制所用的原始碼。
如果你想要發布這些檔案,請執行:
fdroid publish
原始碼 tarball 將移動到 repo 目錄(這是你將要推送到你的 Web 伺服器的目錄)。 APK
的已簽名和壓縮對齊版本也將出現在那裡,並且這兩個檔案將從 unsigned 目錄中被刪除。
如果你純粹是為了測試而構建,並且不打算將結果推送到軟體庫中,至少現在還不打算推送,那麼可以使用 --test 選項將輸出指向到 tmp
目錄,而不是 unsigned 目錄。類似的效果可以透過在構建後簡單地刪除 unsigned 目錄中的輸出檔案來實現,但你可能會忘記這麼做!
與此相似(並僅在與 --test 同時使用時,你可以使用 --force 強制構建 Disabled 的應用程式,一般它會被直接忽略。被發現包含
ELF 或已知非自由庫的版本也可以被強制構建。參見 — 構建_章節中的 _scanignore 和 scandelete。
如果構建未成功,你可以檢視 _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 來覆蓋這一規則。請注意,當前該模式不執行完整性檢查,因此,如果已簽名輸出目錄中的檔案被修改,你不會被提示。
