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 解压二进制文件的目录的方法:
- 使用
fuzio.chromium.dir系统属性。
它可以通过 System.setProperty() 方法来设置:
System.setProperty("fuzio.chromium.dir", "Users/Me/.fuzio");
System.setProperty("fuzio.chromium.dir", "Users/Me/.fuzio")
或者通过 JVM 参数来设置:
-Dfuzio.chromium.dir="Users/Me/.fuzio"
- 在构造
Engine时通过EngineOptions设置:
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 文件中解压二进制文件。如果你需要更早解压二进制文件,请使用以下代码:
// 使用默认目录。
ChromiumBinaries.deliverToDefaultDirectory();
// 或者使用任意目录。
ChromiumBinaries.deliverTo(Paths.get("/path/to/binaries"));
// 使用默认目录。
ChromiumBinaries.deliverToDefaultDirectory()
// 或者使用任意目录。
ChromiumBinaries.deliverTo(Path("/path/to/binaries"))
如果兼容的二进制文件已经解压过,Fuzio 将不会再次解压。否则,Fuzio 会重新解压这些二进制文件并覆盖现有文件。
自定义二进制文件交付
开发者可以完全控制 Chromium 二进制文件到环境的交付过程。这项功能是为高级用例设计的,例如从网络下载二进制文件,或使用自定义压缩算法。
如需自定义分发方式,请实现 BinariesDelivery 接口,并在需要时提供相应的二进制文件:
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 选项来禁用沙盒:
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 也支持通过内核参数切换该功能。在这些系统上,你可以通过以下方式启用用户命名空间:
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 的进一步限制。 要放宽该限制,请配置以下参数:
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。如果你想禁用它,请使用以下代码:
var engine = Engine.newInstance(
EngineOptions.newBuilder(renderingMode)
.disableDnsOverHttps()
.build()
);
禁用 DoH 后,Chromium 会根据操作系统的 DNS 配置,使用未加密的系统 DNS(UDP 或 TCP)进行解析。

