面向 Gecko 工程师的 GeckoView

目录

简介

本指南面向哪些人群:顾名思义,本指南的目标读者是需要构建和(本地)测试 GeckoView 的现有 Gecko 工程师。如果您不熟悉在桌面平台上构建 Firefox,那么阅读 我们的通用介绍 可能更适合您。如果您发现自己编写的补丁需要更改 GeckoView 的公共 API,则本指南也可能有所帮助,请参阅 提交补丁

本指南不面向哪些人群:如上所述,如果您不熟悉为桌面构建 Firefox,那么我们的通用引导指南可能更适合您。如果您希望为 Mozilla 的 Android 浏览器之一的前端开发做出贡献,那么您最好从其代码库开始,只有在需要实际更改 GeckoView 时才返回此处。例如,请参阅 Mozilla Central 上的 Fenix

如果本指南包含错误或导致您误入歧途,该怎么办:获取回复最快的方法是在 Mozilla Slack 上的 #gv 频道提问;#mobile 频道目前也可能有效,尽管回复速度可能会较慢。如果您认为本指南需要更新,最好提交工单以请求更新。

配置构建系统

首先,快速说明一下:本指南是在 MacOS 10.14 上编写的;它应该可以非常轻松地转换为 MacOS 的其他受支持版本和 Linux。目前,我们尚不支持在 Windows 上构建 GeckoView。首先,重新运行 ./mach bootstrap;它将为您提供要构建的 Firefox/GV 版本的选项。目前,选项 3适用于 Android 的 GeckoView/Firefox 工件模式,而 4适用于 Android 的 GeckoView/Firefox;如果您在这里,您需要其中之一。工件 与 GeckoView 的常规构建的简要且大致正确的区别在于,工件 构建不允许您处理原生代码,只能处理 JS 或 Java。选择构建类型后,bootstrap 应该会执行其常规操作并获取必要的依赖项。在此过程中,您可能需要同意一些许可证。 bootstrap 成功完成后,它将输出一个推荐的 mozconfig

Mozconfig 和构建

如果您按照上一节中的步骤操作,则 ./mach bootstrap 会输出一个推荐的 mozconfig,如下所示

# Build GeckoView/Firefox for Android:
ac_add_options --enable-project=mobile/android

# Targeting the following architecture.
# For regular phones, no --target is needed.
# For x86 emulators (and x86 devices, which are uncommon):
# ac_add_options --target=i686
# For newer phones.
# ac_add_options --target=aarch64
# For x86_64 emulators (and x86_64 devices, which are even less common):
# ac_add_options --target=x86_64

按原样,它默认构建的是 32 位 ARM 架构,这可能不是您想要的。如果您打算在实际设备上工作,则几乎可以肯定需要 64 位 ARM 构建,因为它受几乎所有现代 ARM 手机/平板电脑支持,并且是我们在 Google Play 商店中发布的唯一 ARM 构建。要采用此方法,请在 mozconfig 中取消注释 ac_add_options --target=aarch64 行。另一方面,x86-64 模拟设备被 GeckoView 团队广泛使用,并在 try 上广泛使用;如果您打算使用模拟器,请在 mozconfig 中取消注释 ac_add_options --target=x86_64 行。目前,不用担心安装模拟器,稍后将介绍。这里值得注意的是,其他 mozconfig 选项通常会按预期工作。此外,如果您计划在 Android 上调试原生代码,则应包含 我们的原生调试指南 中提到的 mozconfig 更改。现在,使用您所做的任何修改的 mozconfig,只需 ./mach build 即可。如果一切顺利,您将成功构建 GeckoView。

在 Fenix/AC 中安装、运行和使用

在大多数情况下,(x86-64)模拟器是贡献 GeckoView 最常见且最友好的方式。如果您要采用此方法,只需运行 ./mach android-emulator 即可——默认情况下,这将安装并启动运行与 try 上使用的相同 Android 7.0 映像的 x86-64 Android 模拟器。如果您需要不同的模拟器映像,可以运行 ./mach android-emulator --help 以获取有关通过 mach 可用的 Android 映像的信息。您也可以通过 Android Studio 安装模拟器映像。在模拟器可能无法满足某些情况(例如图形或性能测试)或您只是不想使用模拟器的情况下,您可以选择使用实际手机。为此,如果您尚未启用,则需要在手机上启用 USB 调试。在大多数现代 Android 设备上,您可以通过打开 设置,转到 关于手机,然后点击 内部版本号 七次来执行此操作。您应该会收到一条通知,告知您已解锁开发者选项。现在返回 设置,转到 开发者选项,然后启用 USB 调试。

GeckoView 示例应用程序

现在您已连接手机或设置了模拟器,测试 GeckoView 最简单的方法是通过运行 ./mach run 启动 GeckoView 示例应用程序(或使用 ./mach install 安装并自行运行)。这是一个简单的基于 GV 的浏览器,位于代码树中;在许多情况下,它足以测试和调试 Gecko 更改,并且是迄今为止最简单的方法。它默认支持远程调试——只需在桌面浏览器上打开远程调试,当示例应用程序打开时,连接的设备/模拟器应该会显示出来。您还可以将示例应用程序用于原生调试,请遵循 原生调试指南

GeckoView JUnit 测试

成功构建 GV 后,您可以使用 ./mach geckoview-junit 运行来自 GeckoView JUnit 测试套件的测试。有关更多示例(例如运行单个测试、重复测试等),请查阅 快速入门指南

Fenix 和其他基于 GV 的应用程序

如果您正在处理某些 GeckoView 示例应用程序由于某种原因而无法满足的工作,则可能需要 在 Mozilla 的基于 GV 的应用程序(如 Fenix)中使用您本地构建的 GeckoView

调试

远程调试

简单回顾一下以上内容,在 GeckoView 示例应用程序中,远程调试默认启用,并且您的设备无需任何特殊操作即可显示在桌面浏览器的远程调试窗口中。对于 Fenix,您可以通过打开三点菜单并在 开发者工具 下切换 通过 USB 进行远程调试 来启用远程调试;Mozilla 的其他基于 GV 的浏览器具有类似的选项。

原生调试

要在任何 GV 应用程序上执行原生调试,您需要安装 Android Studio 并按照 此处 的说明操作。

提交补丁

在大多数情况下,当提交影响 GeckoView 的补丁时,您无需处理任何异常情况;确保在您的 try 运行中包含 Android,您应该就可以了。但是,如果您需要以任何方式更改 GeckoView 公共 API——本质上是 GeckoView Java 文件中公开为 public 的任何内容——那么您会发现需要运行 API linter 并更新更改日志。为此,首先运行 ./mach lint --linter android-api-lint——如果您确实更改了公共 API,这将为您提供要运行的 gradle 命令,该命令将提供进一步的说明。GeckoView API 更改需要 GeckoView 团队成员的两次审查;您可以通过在 Phabricator 上添加 #geckoview-reviewers 作为审阅者,将其公开给整个团队。