使用自定义 GeckoView 进行开发

如果您是从事 Gecko(View) 开发的工程师,您可能希望使用您自己构建的 GeckoView 来构建 Focus/Klar。

为此,您需要

  • 检出 mozilla-central(或其他分支)

  • 设置您的系统以构建适用于 Android 的 Firefox

  • 打包 GeckoView AAR

  • 修改您的 Focus gradle 配置以使用您自定义的 GeckoView AAR。

设置构建系统

按照 构建说明 设置适用于 Android 的 Firefox 构建(ARM 或 x86)。

用于 GeckoView 开发的最小 mozconfig 可能如下所示(ARM)

ac_add_options --enable-application=mobile/android
ac_add_options --target=arm-linux-androideabi
# For x86 use: ac_add_options --target=i386-linux-android

ac_add_options --with-android-sdk="<path-to-android-SDK>"
ac_add_options --with-android-ndk="<path-to-android-NDK>"

打包 GeckoView AAR

设置好构建系统后,您应该能够构建和打包适用于 Android 的 Firefox。

./mach build
./mach package

现在您可以从编译后的代码创建 GeckoView AAR。

./mach android archive-geckoview

这将在您的构建输出文件夹 (MOZ_OBJDIR) 中创建一个名为 geckoview-*.aar 的文件。

$ ls <your-output-directory>/gradle/build/mobile/android/geckoview/outputs/aar
geckoview-official-withGeckoBinaries-noMinApi-release.aar

将 Focus/Klar 构建指向您的 AAR

在您的 Focus/Klar 检出中打开 app/build.gradle(**不是**根目录中的 build.gradle 文件!)并找到 repositories 块。此块定义了 gradle 将在何处查找依赖项。将 AAR 的绝对路径添加如下所示

repositories {
    // ...

    flatDir(
        name: 'localBuild',
        dirs: '<absolute path to AAR>'
    )
}

现在找到 dependencies 块。此块定义了编译应用程序所需的依赖项。找到已存在的 armImplementationx86Implementation 语句。这些语句当前指向从我们的构建服务器提取的 AAR。替换正确的语句(x86/ARM)以使用本地 AAR 的名称

dependencies {
    // ...

    // armImplementation "org.mozilla:geckoview-nightly-armeabi-v7a:60.0a1"
    armImplementation (
            name: 'geckoview-official-withGeckoBinaries-noMinApi-release',
            ext: 'aar'
    )
    x86Implementation "org.mozilla:geckoview-nightly-x86:60.0a1"

    // ...
}

现在从 Android Studio 构建 klarArmDebugklarX86Debug 构建变体(可能需要运行一次“与 Gradle 文件同步项目”),或从命令行构建并安装。

./gradlew installKlarArmDebug
./gradlew installKlarX86Debug

最后,默认渲染器可能设置为 Webview。您可以检查 focus:about 中 Gecko 徽标的存在或不存在以进行验证。您可以在 focus:test 中更改渲染引擎设置,然后按返回键以重新启动应用程序。这将存储您的引擎首选项,直到您卸载或清除数据。

您也可以在 focus-android/app/src/debug/java/org/mozilla/focus/web/Config.kt 中更改默认引擎。将 DEFAULT_NEW_RENDERER 设置为 true 将使用 GeckoView。