适用于 Android 的 Firefox

适用于 Android 的 Firefox 由三个层组成

  • GeckoView:这是一个将 Gecko API 引入 Android 的库。

  • Android 组件:这是一个可重用浏览器构建块的库。

  • 前端 (Fenix):指的是前端界面。

所有三个组件都可以在 mozilla-central 中找到。要为这三个组件中的任何一个做出贡献,您需要设置成为 Firefox 的贡献者。

Mozilla Central 设置

要设置 Mozilla Central,您可以按照 Mozilla 源代码文档中提供的通用说明进行操作

此外,要专门为 mozilla-central 设置,您可以参考以下指南

引导程序

引导程序为 GeckoView 和 Fenix(适用于 Android 的 Firefox)开发配置所有内容。

  • 确保您已检出 mozilla-central。如果这是您第一次执行此操作,则可能需要一些时间。

git checkout central/default

如果您使用的是 Mac,则需要安装 Xcode 构建工具。您可以通过以下两种方式之一执行此操作:安装 Xcode 或从命令行仅安装工具,方法是运行 xcode-select --install 并按照屏幕上的说明进行操作。

如果您使用的是具有 Apple Silicon M2 或 M3 处理器的较新 Mac,则还需要安装 Rosetta 以实现向后兼容性

softwareupdate --install-rosetta

您需要为 GeckoView/适用于 Android 的 Firefox bootstrap。最简单的方法是运行以下命令

./mach --no-interactive bootstrap --application-choice="GeckoView/Firefox for Android"

注意

  • --no-interactive 参数将使 bootstrap 从头到尾运行,而无需您进行任何输入。它将自动接受任何许可协议。

  • --application-choice="GeckoView/Firefox for Android" 参数在使用 --no-interactive 时是必需的,以便为正确的应用程序(而不是默认应用程序)完成“引导”。

如果您想自己进行所有选择和/或阅读许可协议,则只需运行

./mach bootstrap

然后,您应该选择以下选项之一

A- 您不会更改或调试任何 C++ 代码:

选择:3. GeckoView/Firefox for Android Artifact Mode

工件模式下载预构建的 C++ 组件,而不是在本地构建它们,用带宽换取时间。(更多关于工件模式的信息)

B- 您打算更改或调试 C++ 代码:

选择:4. GeckoView/Firefox for Android

这将从头开始构建 GeckoView,并且比上面的选项花费更多时间。

一旦 ./mach bootstrap 完成,它将自动将配置写入新的 mozconfig 文件中。如果您已经有 mozconfig,则 mach 将输出一个新的配置,您应该将其附加到现有文件中。

从命令行构建

为了获取我们刚刚进行的配置更改,我们需要从命令行构建。这将更新生成的源代码、编译本机代码并生成 GeckoView AAR 以及示例和测试 APK。

./mach build

使用 Android Studio 构建

  • 安装 Android Studio

  • 如果在 Windows 上,请创建一个 JAVA_HOME 环境变量并将其设置为 Android Studio jbr 的路径。使用默认安装位置,它是 C:\Program Files\Android\Android Studio\jbr

  • 从工具栏中选择文件 -> 打开

  • 导航到 mozilla-central 源代码目录的根目录,然后单击“打开”

  • 如果它询问您是否要使用 Gradle 包装器,请单击是。

    • 如果 Gradle 同步没有自动启动,请选择文件 > 使用 Gradle 文件同步项目。

  • 等待项目索引和 Gradle 同步。同步后,工作区将重新配置以显示不同的项目。

    • 注释包含 GeckoView 内部使用的自定义 Java 注释

    • app 包含 geckoview 构建设置和 omnijar。omnijar 包含 Gecko 和 GeckoView 中不是用 Java 或 Kotlin 编写的部分

    • geckoview 是 GeckoView 项目。这里包含与 GeckoView 相关的所有 Java 文件

    • geckoview_example 是使用 GeckoView 构建的示例浏览器。

现在您已设置完毕并准备就绪。

重要提示:目前,从 Android Studio 或直接从 Gradle 构建不会(重新)编译本机代码,包括 C++ 和 Rust。这意味着您需要自己运行 mach build 以获取对本机代码的更改。 错误 1509539 跟踪使 Android Studio 和 Gradle 自动执行此操作。

如果您想为 Kotlin 设置代码格式,请参考 IntelliJ IDEA 配置

移动设备和模拟器

默认的 mozconfig 文件(位于 mozilla-central 的根目录中)包含在 x86、arm64 和 x86_64 架构中运行移动测试设备的配置。

使用默认的 mozconfig 配置,您机器的架构应与测试设备的架构匹配。在基于 Apple Silicon 构建的较新的 Mac 上,可能不需要更改 mozconfig,因为它在 arm64 上运行,并且大多数移动设备都在 arm64 上运行。

如果您的机器与物理测试设备的架构不同,则应取消注释与您的测试设备匹配的选项。通常,这意味着取消注释 arm64 选项

ac_add_options --target=aarch64

注意:使用模拟器时,mozconfig 目标配置很可能需要与您机器的架构匹配。

自定义 AVD

创建自定义 AVD 可能需要几个原因,例如,默认模拟器设置可能对于某些任务来说太旧了,并且可能需要运行一些更新版本的 API 或其他内容。

假设以下环境变量已设置(版本/操作系统可能会更改)

JAVA_HOME=$HOME/.mozbuild/jdk/jdk-17.0.12+7
ANDROID_HOME=$HOME/.mozbuild/android-sdk-linux
ANDROID_AVD_HOME=$HOME/.mozbuild/android-device/avd
PATH=$ANDROID_HOME/cmdline-tools/12.0/bin/:$PATH

您可以通过以下方式识别系统上已安装的可使用包

sdkmanager --list

它将输出可用和已安装包的列表。感兴趣的包是 system-images 并遵循规则 system-images;android-API;pkg;arch,其中

  • APIAndroid API 级别

  • pkg 是已安装的包集,例如 defaultgoogle_apisgoogle_apis_playstore

  • 最后一个是模拟器架构,通常坚持使用 x86_64

您将使用的系统映像包需要安装,因此,如果它不在上面的列表中,请使用(在此示例中,它安装了 Android 14(API 级别 34)、default 包和 x86_64 架构的包)。

sdkmanager "system-images;android-34;default;x86_64"

然后可以使用以下命令创建 AVD

avdmanager create avd --name android14-x86_64 --package "system-images;android-34;default;x86_64"

参数中传递的名称可以是您想要的任何名称,并且包是已安装列表中的一个。然后需要修改 android_device.py 中的条目才能使用 mach android-emulator,将定义更改为与上面创建的 AVD 的名称匹配。以下示例

diff --git a/testing/mozbase/mozrunner/mozrunner/devices/android_device.py b/testing/mozbase/mozrunner/mozrunner/devices/android_device.py
index 4f883261d45c1..07f91c1ab800e 100644
--- a/testing/mozbase/mozrunner/mozrunner/devices/android_device.py
+++ b/testing/mozbase/mozrunner/mozrunner/devices/android_device.py
@@ -151,7 +151,7 @@ AVD_DICT = {
     ),
     "x86_64": AvdInfo(
         "Android x86_64",
-        "mozemulator-x86_64",
+        "android14-x86_64",
         [
             "-skip-adb-auth",
             "-verbose",

创建 avd 后,可以通过更改 config.ini 文件(位于 $ANDROID_AVD_HOME/<avd-name>.avd/ 下,例如,在上面的示例中为 $HOME/.mozbuild/android-device/avd/android14-x86_64/config.ini)来对其进行自定义。建议通过将值 hw.keyboard 更改为 yes 来启用物理键盘(否则只有虚拟键盘输入才能工作)。

使用 Android Studio 的自定义 mozconfig

开箱即用,Android Studio 将使用默认的 mozconfig 文件,通常位于 mozilla-central 检出的根目录中的 mozconfig 中。

要使 Android Studio 使用自定义位置中的 mozconfig,您可以将以下内容添加到您的 local.properties

mozilla-central.mozconfig=relative/path/to/mozconfig

请注意,当从命令行运行 mach 时,此值将被忽略,并且将改为使用 mach 环境中的 mozconfig。

要覆盖 mach 使用的 mozconfig,您可以使用 MOZCONFIG 环境变量,例如

MOZCONFIG=debug.mozconfig ./mach build

项目特定说明

现在您已做好准备并完成设置,您可以访问以下特定项目说明