构建应用
你可以直接从源代码构建二进制 APK,而不是(或同时)在存储库中包含来自外部源的二进制 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
来覆盖这一规则。请注意,当前该模式不执行完整性检查,因此,如果已签名输出目录中的文件被修改,你不会被提示。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论