配置 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-app
和 clear-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 操作。