返回介绍

构建应用

发布于 2023-08-06 23:35:04 字数 4106 浏览 0 评论 0 收藏 0

你可以直接从源代码构建二进制 APK,而不是(或同时)在存储库中包含来自外部源的二进制 APK。

使用此方法,可以验证应用构建是否正确,是否与源代码相对应,是否只包含自由软件。不幸的是,在 Android 世界中,以二进制 APK 形式提供应用并声称自己是自由软件似乎司空见惯,它,然而实际上,以下部分甚至全部都是事实:

  1. 源代码(对于特定版本,甚至所有版本!)未提供或不完整。
  2. 源代码实际无法生成所提供的二进制文件。
  3. “源代码”包含来源不明,或使用专有许可的二进制文件。

因此,从源代码构建应用为 F-Droid 主存储库的首选方法,尽管偶尔出于技术或历史原因,也有例外。

从源代码编译时,应注意,你需使用自己的密钥对应用签名(所有 APK 必须经过签名才能在 Android 上安装)。如果设备已安装某个应用,升级至使用不同密钥签名的新版本时,需首先卸载该应用。这可能对用户带来不便,因为卸载将导致与已安装应用相关联数据的丢失。

管理从源代码编译的应用的存储库的流程与《简单二进制存储库》章节中的说明非常相似,不过还需:

  1. 包含 Build 条目至元数据文件。
  2. 运行 fdroid build 来构建任何尚未构建的应用。
  3. 运行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 或已知非自由库的版本也可以被强制构建。参见 — 构建_章节中的 _scanignorescandelete

如果构建未成功,你可以查看 _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 来覆盖这一规则。请注意,当前该模式不执行完整性检查,因此,如果已签名输出目录中的文件被修改,你不会被提示。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文