配置 GeckoView 以实现自动化

如何设置环境变量、Gecko 参数和 Gecko 首选项以进行自动化和调试。

配置 GeckoView

GeckoView 和底层的 Gecko 引擎拥有许多选项、开关和“幕后”切换。自动化(以及在较小程度上,调试)可能需要配置 Gecko 引擎以允许(或不允许)特定的操作或功能。

某些此类操作和功能由您在使用项目中配置的 GeckoRuntimeSettings 实例控制。例如,通过 Firefox 开发者工具远程调试 Web 内容是通过 GeckoRuntimeSettings.Builder#remoteDebuggingEnabled 配置的。

并非所有操作和功能都具有 GeckoView API 接口。通常,不具有 GeckoView API 接口的操作和功能并非旨在广泛使用。这些类型的配置由以下内容控制:

  • GeckoView 运行时环境中的环境变量

  • 传递给 Gecko 进程的命令行参数

  • 内部 Gecko 首选项

特定于自动化的配置通常属于此类。

使用环境变量运行 GeckoView

在成功执行 ./mach build 后,可以使用 ./mach run --setenv 来使用给定的环境变量运行 GeckoView。

例如,要为 JSComponentLoader 启用扩展日志记录,请运行 ./mach run --setenv MOZ_LOG=JSComponentLoader:5

从文件读取配置

当 GeckoView 嵌入到可调试应用程序中时(即,当您的清单包含 android:debuggable="true" 时),默认情况下,GeckoView 会从名为 /data/local/tmp/$PACKAGE-geckoview-config.yaml 的文件中读取配置。例如,如果您的 Android 包名称为 com.yourcompany.yourapp,则 GeckoView 将从以下位置读取配置:

/data/local/tmp/com.yourcompany.yourapp-geckoview-config.yaml

配置文件格式

配置文件格式为 YAML。识别以下键:

  • env 是一个映射,用于将字符串环境变量名称映射到要在 GeckoView 的运行时环境中设置的字符串值。

  • args 是要传递给 Gecko 进程的字符串命令行参数列表。

  • prefs 是一个映射,用于将字符串 Gecko 首选项名称映射到要在 Gecko 配置文件中设置的布尔值、字符串或整数值。

# Contents of /data/local/tmp/com.yourcompany.yourapp-geckoview-config.yaml

env:
  MOZ_LOG: nsHttp:5

args:
  - --marionette
  - --profile
  - "/path/to/gecko-profile"

prefs:
  foo.bar.boolean: true
  foo.bar.string: "string"
  foo.bar.int: 500

验证来自文件的配置

当从文件读取配置时,GeckoView 会像这样将日志记录到 adb logcat 中:

    GeckoRuntime  I  Adding debug configuration from: /data/local/tmp/org.mozilla.geckoview_example-geckoview-config.yaml
GeckoDebugConfig  D  Adding environment variables from debug config: {MOZ_LOG=nsHttp:5}
GeckoDebugConfig  D  Adding arguments from debug config: [--marionette]
GeckoDebugConfig  D  Adding prefs from debug config: {foo.bar.baz=true}

如果找到配置文件但无法解析,则会记录错误并完全忽略该文件。如果找不到配置文件,则不会记录任何内容。

控制来自文件的配置

默认情况下,GeckoView 提供了一个安全的 Web 渲染引擎。自定义配置可以通过多种方式危及安全性:将敏感数据存储在设备上的不安全位置、信任具有不正确安全配置的网站、不验证 HTTP 公钥固定配置;等等。

您仅应在最终用户选择加入配置时才允许此类配置!

如果使用中的 Android 包被设置为当前的 Android “调试应用程序”(请参阅 adb 文档 中的 set-debug-appclear-debug-app),则 GeckoView 将始终从文件中读取配置。可以不考虑 android:debuggable 标志将 Android 包设置为“调试应用程序”。一次只能设置一个“调试应用程序”。要禁用“调试应用程序”检查,请完全禁用从文件读取配置。将 Android 包设置为“调试应用程序”需要对设备具有特权的 shell 访问权限(通常通过 adb shell am ...,这仅在启用了 ADB 调试的设备上才有可能),因此可以安全地根据“调试应用程序”标志采取行动。

要启用从文件读取配置

adb shell am set-debug-app --persistent com.yourcompany.yourapp

要禁用从文件读取配置

adb shell am clear-debug-app

无条件启用从文件读取配置

某些应用程序(例如,Web 浏览器)可能希望无条件允许用于自动化的配置,即,即使应用程序不可调试时,例如具有 android:debuggable="false" 的发布版本。在这种情况下,您可以使用 GeckoRuntimeSettings.Builder#configFilePath 强制 GeckoView 从给定文件路径读取配置,例如:

new GeckoRuntimeSettings.Builder()
    .configFilePath("/your/app/specific/location")
    .build();

完全禁用从文件读取配置

要强制 GeckoView 从不从文件读取配置,即使嵌入式应用程序可调试时,也要使用空路径调用 GeckoRuntimeSettings.Builder#configFilePath,例如:

new GeckoRuntimeSettings.Builder()
    .configFilePath("")
    .build();

空路径会被识别,并且不会执行任何文件 I/O 操作。