Chromium

本指南介绍了如何使用 Fuzio 所使用的 Chromium 构建版本。

你无需在目标环境中安装 Chromium 或 Google Chrome 即可使用 Fuzio。Fuzio 使用并部署其自有的 Chromium 构建版本。

二进制文件 

每个支持平台的 Chromium 二进制文件位于相应的 Fuzio JAR 包中:

  • fuzio-win32-2026.1.0.jar – 适用于 Windows 32 位的 Chromium 二进制文件。
  • fuzio-win64-2026.1.0.jar – 适用于 Windows 64 位的 Chromium 二进制文件。
  • fuzio-mac-2026.1.0.jar – 适用于 macOS 的 Chromium 二进制文件。
  • fuzio-mac-arm-2026.1.0.jar – 适用于 macOS Apple Silicon 的 Chromium 二进制文件。
  • fuzio-linux64-2026.1.0.jar – 适用于 Linux 64 位的 Chromium 二进制文件。
  • fuzio-linux64-loong-2026.1.0.jar – 适用于 Linux Loong 64 位的 Chromium 二进制文件。
  • fuzio-linux64-arm-2026.1.0.jar – 适用于 Linux ARM 64 位的 Chromium 二进制文件。

位置 

默认情况下,Fuzio 会将 Chromium 二进制文件解压到 Linux 和 macOS 上的用户临时目录,在 Windows 上则解压到 AppData\Local\Fuzio 目录中。

以下是如何更改 Fuzio 解压二进制文件的目录的方法:

  1. 使用 fuzio.chromium.dir 系统属性。

它可以通过 System.setProperty() 方法来设置:

Java
Kotlin
System.setProperty("fuzio.chromium.dir", "Users/Me/.fuzio");
System.setProperty("fuzio.chromium.dir", "Users/Me/.fuzio")

或者通过 JVM 参数来设置:

-Dfuzio.chromium.dir="Users/Me/.fuzio"
  1. 在构造 Engine 时通过 EngineOptions 设置:
Java
Kotlin
var engine = Engine.newInstance(
    EngineOptions.newBuilder(renderingMode)
            .chromiumDir(Paths.get("Users/Me/.fuzio"))
            .build()
);
val engine = Engine(renderingMode) {
chromiumDir = Path("Users/Me/.fuzio")
}

该目录路径可以是相对路径,也可以是绝对路径。

改目录不能位于网络驱动器上。

验证 

每个 Fuzio 版本仅与其相同版本的二进制文件兼容。例如, Fuzio 的 2026.1.0.1 版本无法与 Fuzio 2026.1.0 的二进制文件一起工作。

为确保 Chromium 二进制文件与当前的 Fuzio 版本兼容,该库会对这些二进制文件进行验证。

解压 

默认情况下,Fuzio 会在首次创建 Engine 时,从对应的 JAR 文件中解压二进制文件。如果你需要更早解压二进制文件,请使用以下代码:

Java
Kotlin
// 使用默认目录。
ChromiumBinaries.deliverToDefaultDirectory();
// 或者使用任意目录。
ChromiumBinaries.deliverTo(Paths.get("/path/to/binaries"));
// 使用默认目录。
ChromiumBinaries.deliverToDefaultDirectory()
// 或者使用任意目录。
ChromiumBinaries.deliverTo(Path("/path/to/binaries"))

如果兼容的二进制文件已经解压过,Fuzio 将不会再次解压。否则,Fuzio 会重新解压这些二进制文件并覆盖现有文件。

自定义二进制文件交付 

开发者可以完全控制 Chromium 二进制文件到环境的交付过程。这项功能是为高级用例设计的,例如从网络下载二进制文件,或使用自定义压缩算法。

如需自定义分发方式,请实现 BinariesDelivery 接口,并在需要时提供相应的二进制文件:

Java
Kotlin
class TuneBinaryDelivery implements BinariesDelivery {

    public void deliverTo(Path chromiumDir) {
        // 伪代码:
        // Path downloadedArchive = SharedNetworkDrive.download("fuzio-win64.gz");
        // Gzip.extract(downloadedArchive, chromiumDir);
    }
}
...
// 使用默认目录。
ChromiumBinaries.deliverToDefaultDirectory(new TuneBinaryDelivery());

// 或使用任意目录。
ChromiumBinaries.deliverTo(chromiumDir, new TuneBinaryDelivery());
class TuneBinaryDelivery : BinariesDelivery {
    override fun deliverTo(chromiumDir: Path) {
        // 伪代码:
        // Path downloadedArchive = SharedNetworkDrive.download("fuzio-win64.gz");
        // Gzip.extract(downloadedArchive, chromiumDir);
    }
}
...
// 使用默认目录。
ChromiumBinaries.deliverToDefaultDirectory(TuneBinaryDelivery())

// 或使用任意目录。
ChromiumBinaries.deliverTo(chromiumDir, TuneBinaryDelivery())

如果兼容的二进制文件已经被解压,Fuzio 将不会调用自定义分发逻辑。

沙盒 

Windows 和 macOS 

Fuzio 在 Windows 和 macOS 系统上支持 Chromium 沙盒功能。沙盒默认处于启用状态,但可以通过相应的 Engine 选项来禁用沙盒:

Java
Kotlin
var engine = Engine.newInstance(
        EngineOptions.newBuilder(renderingMode)
                .disableSandbox()
                .build()
);
val engine = Engine(renderingMode) {
    sandboxDisabled = true
}

Linux 

目前,沙盒在 LoongArch Linux 平台上不受支持。

Chromium 依赖用户命名空间对其子进程进行沙盒隔离。 当该功能不可用时,Fuzio 将无法启动 Chromium,并会在 Engine 初始化期间抛出 SandboxNotSupportedException

在 Debian 10 上,默认情况下非特权用户的用户命名空间是禁用的。Ubuntu 也支持通过内核参数切换该功能。在这些系统上,你可以通过以下方式启用用户命名空间:

bash
sudo sysctl -w kernel.unprivileged_userns_clone=1
echo 'kernel.unprivileged_userns_clone=1' | sudo tee -a /etc/sysctl.d/99-enable-unprivileged-userns.conf

在 Ubuntu 23.10 及更高版本中,用户命名空间还会受到 AppArmor 的进一步限制。 要放宽该限制,请配置以下参数:

bash
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
echo 'kernel.apparmor_restrict_unprivileged_userns=0' | sudo tee -a /etc/sysctl.d/99-enable-unprivileged-userns.conf

其他 Linux 发行版通常默认启用用户命名空间,无需额外配置。

如果无法通过修改环境配置来启用用户命名空间,则可以禁用 Chromium 沙盒。该方法会显著降低安全性,因此仅应作为最后手段考虑。

网络流量 

Chromium 是一个复杂的软件,包含多个组件。一些组件可能会因发送统计数据、同步、优化、数据下载等目的而在后台进行网络活动。

本节将介绍可能会产生额外网络流量的组件,并说明如何禁用它们。

优化指南服务 

该组件是 Google 提供的 Chromium 服务,旨在帮助开发者提升应用性能和效率。它基于设备的硬件、软件和用户习惯,提供个性化的优化建议和运行时配置数据。在开发 Android 应用时,这项服务尤其重要。启动时,该服务会从 Google Web 服务获取优化模型。

Fuzio 已禁用此组件,因此不会从 Google Web 服务获取任何数据。

拼写检查器 

默认情况下,该组件不会向外部 Web 服务器发送任何请求。它使用本地词典进行拼写检查。然而,如果某些语言的词典在本地不可用,它可能会向 Google Web 服务发送请求以获取相应的词典。

如果你不需要拼写检查功能,并希望禁止与其相关的任何网络活动,可按照拼写检查器指南中描述的方法禁用拼写检查器。

翻译排序器 

该组件用于判断是否应向用户显示翻译提示。Chromium 会下载用于语言识别的排序模型。

该组件在 Fuzio 中已被禁用,因此不会从外部 Web 服务器拉取任何数据。

媒体投放 

该组件负责将媒体内容投放到支持 Chromecast 的媒体设备上。当 Chromium 启动时,该组件会在本地网络中发送组播请求,以发现可用于投屏的设备。

默认情况下,Chromecast 功能是禁用的,因此不会产生任何流量。可以在初始化 Engine 实例时启用 Chromecast 功能,具体方式请参见媒体指南。

组件更新器 

该组件负责更新 Chromium 中的其他组件。默认情况下它是禁用的。如果你启用了专有编解码器,组件更新器会自动启用,以更新相应的内部组件。启用该组件后,你可能会看到向 https://update.googleapis.com/service/update2/json 发出的请求。

DNS Over HTTPS (DoH) 

DoH 是 Chromium 默认使用的 DNS 解析协议。Chromium 会检查系统 DNS 提供商是否支持 DoH,并尝试识别它。如果系统 DNS 配置为使用 Google Public DNS 或其他已识别且支持 DoH 的提供商,Chromium 将自动切换到该提供商的 DoH 服务。因此,Chromium 会向受信任的 DoH 服务器(例如 google.dns)发出请求以解析 DNS。

默认情况下,Fuzio 启用了 DoH。如果你想禁用它,请使用以下代码:

Java
var engine = Engine.newInstance(
        EngineOptions.newBuilder(renderingMode)
                .disableDnsOverHttps()
                .build()
);

禁用 DoH 后,Chromium 会根据操作系统的 DNS 配置,使用未加密的系统 DNS(UDP 或 TCP)进行解析。

微信咨询

即库客服

微信公众号二维码

技术客服

微信公众号二维码