List icon 目录

Chromium

本指南将介绍如何使用 JxBrowser 使用的 Chromium 构建。

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

二进制文件

每个受支持平台的 Chromium 二进制文件都位于相应的 JxBrowser JARs 中。

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

位置

默认情况下,JxBrowser 会将 Chromium 二进制文件提取到 Linux 和 macOS 上的用户临时目录,以及 Windows 上的 AppData\Local\JxBrowser 目录。

以下是如何更改 JxBrowser 提取二进制文件的目录的方法:

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

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

    Java
    Kotlin

    System.setProperty("jxbrowser.chromium.dir", "Users/Me/.jxbrowser");
    

    System.setProperty("jxbrowser.chromium.dir", "Users/Me/.jxbrowser")
    

    或者通过 JVM 参数来设置:

    -Djxbrowser.chromium.dir="Users/Me/.jxbrowser"
    
  2. 在构建 Engine 时通过 EngineOptions

    Java
    Kotlin

    var engine = Engine.newInstance(
            EngineOptions.newBuilder(renderingMode)
                    .chromiumDir(Paths.get("Users/Me/.jxbrowser"))
                    .build()
    );
    

    val engine = Engine(renderingMode) {
        chromiumDir = Path("Users/Me/.jxbrowser")
    }
    

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

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

验证

每个 JxBrowser 版本仅与其相同版本的二进制文件兼容。例如, JxBrowser 的 8.5.2.1 版本无法使用来自 JxBrowser 8.5.2 的二进制文件。

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

提取

默认情况下,当首次创建 Engine 时,JxBrowser 会从相应的 JAR 文件中提取二进制文件。如果您需要提前提取二进制文件,请使用以下代码:

Java
Kotlin

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

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

如果兼容的二进制文件已经提取过,JxBrowser 将不会再次提取它们。否则,JxBrowser 会再次提取二进制文件并覆盖现有文件。

自定义交付

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

要自定义交付,实现 BinariesDelivery 接口,并在需要时交付二进制文件:

Java
Kotlin

class TuneBinaryDelivery implements BinariesDelivery {

    public void deliverTo(Path chromiumDir) {
        // 伪代码:
        // Path downloadedArchive = SharedNetworkDrive.download("jxbrowser-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("jxbrowser-win64.gz");
        // Gzip.extract(downloadedArchive, chromiumDir);
    }
}
...
// 使用默认目录。
ChromiumBinaries.deliverToDefaultDirectory(TuneBinaryDelivery())

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

如果兼容的二进制文件已经被提取,JxBrowser 将不会调用自定义交付。

沙盒

Windows

JxBrowser 支持 Windows 上的 Chromium 沙盒。沙盒默认启用,但您可以通过适当的 Engine 选项禁用它:

Java
Kotlin

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

val engine = Engine(renderingMode) {
    sandboxDisabled = true
}

Linux 和 macOS

目前沙盒仅支持 Windows 平台。

网络流量

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

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

优化指南服务

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

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

拼写检查器

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

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

翻译排序器

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

JxBrowser 已禁用此组件,因此不会向外部 Web 服务器请求任何数据。

媒体投放

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

默认情况下,Chromecast 功能已禁用,不会产生网络流量。如果需要启用此功能,可以在初始化 Engine 实例时进行配置,具体方法请参考媒体指南。

组件更新器

该组件用于更新 Chromium 中的其他组件。默认情况下,组件更新器处于禁用状态。若启用专有编解码器,则该组件将自动启用,以更新相关的内部组件。一旦启用,您可能会看到访问 https://update.googleapis.com/service/update2/json 的请求。

DNS Over HTTPS (DoH)

是 Chromium 中默认的 DNS 解析协议。Chromium 会检查系统 DNS 提供商是否支持 DoH,并尝试识别。如果系统 DNS 配置了 Google Public DNS 或其他支持 DoH 的提供商,Chromium 将自动切换到相应的 DoH 服务。此时,Chromium 将向可信的 DoH 服务器(如 google.dns)发送请求以解析 DNS。

在 JxBrowser 中,DoH 默认启用。如果您希望禁用它,请使用以下代码:

Java

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

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

品牌自定义

JxBrowser 使用自己的 Chromium 构建,该构建作为库的一部分随附分发。Chromium 在一个名为 Chromium 的独立本地进程中运行。该进程具有默认的图标、版本、描述和版权信息。

Chromium processes in Task Manager

当您将 JxBrowser 集成到您的 Java 桌面应用程序中时,您可能希望自定义 Chromium 进程的名称、图标、版本等,并使用您自己的品牌,以提升用户体验。通过将其自定义为与您的应用程序品牌匹配,您的用户就不会对任务管理器中显示的陌生 Chromium 进程感到困惑。

要自定义 Chromium 进程,请使用开源的 Chromium Branding 命令行工具。有关如何使用该工具的说明,请参阅 README.md 指南。

配置 JxBrowser 使用自定义品牌的 Chromium 二进制文件时,只需在初始化 Engine 实例时指定自定义 Chromium 的路径:

Java
Kotlin

var engine = Engine.newInstance(
        EngineOptions.newBuilder(renderingMode)
                .chromiumDir(Paths.get("path/to/branded/Chromium"))
                .build()
);

val engine = Engine(renderingMode) {
    chromiumDir = Path("path/to/branded/Chromium")
}

自定义 Chromium 进程名称和图标 文章中,您可以找到有关如何在 Windows 上自定义 Chromium 进程名称、图标、版本和其他品牌信息的分步指南。