升级 Chromium

本文概述了在Electron中升级Chromium所需的步骤。

  • 将libcc升级到新的Chromium版本
  • 使Electron兼容新的libcc
  • 如有必要,请更新Electron的相关依赖(如崩溃报告,NodeJS等)
  • 创建libcc和Electron的内部编译本
  • 如有需要,请更新Electron文档

将libcc升级到新的Chromium版本

  • 取得代码并初始化项目:sh$ git clone git@github.com:electron/libchromiumcontent.git$ cd libchromiumcontent$ ./script/bootstrap -v

  • 更新 Chromium 快照

  • 选择一个版本号从 OmahaProxy 并且更新这个 VERSION 文件

  • 运行 $ ./script/update

    • 倒杯茶吧 — 这可能会运行 30 分钟或更长。
    • 补丁的应用可能会失败。
  • Fix *.patch files in the patches/ and patches-mas/ folders.
  • (可选) script/update applies patches, but if multiple tries are needed you can manually run the same script that update calls: $ ./script/apply-patches
  • There is a second script, script/patch.py that may be useful. Read ./script/patch.py -h for more information.
  • Run the build when all patches can be applied without errors
  • $ ./script/build
  • If some patches are no longer compatible with the Chromium code, fix compilation errors.
  • When the build succeeds, create a dist for Electron
  • $ ./script/create-dist —no_zip

    • It will create a dist/main folder in the libcc repo's root. You will need this to build Electron.
  • (Optional) Update script contents if there are errors resulting from files that were removed or renamed. (—no_zip prevents script from create dist archives. You don't need them.)

更新Electron代码

  • 获取代码:sh$ git clone git@github.com:electron/electron.git$ cd electron

  • If you have libcc built on your machine in its own repo, tell Electron to use it:sh$ ./script/bootstrap.py -v --libcc_source_path /src --libcc_shared_library_path /shared_library --libcc_static_library_path /static_library

  • If you haven't yet built libcc but it's already supposed to be upgraded to a new Chromium, bootstrap Electron as usual $ ./script/bootstrap.py -v

  • Ensure that libcc submodule (vendor/libchromiumcontent) points to the right revision
  • Set CLANG_REVISION in script/update-clang.sh to match the version Chromium is using.
  • Located in electron/libchromiumcontent/src/tools/clang/scripts/update.py
  • Checkout Chromium if you haven't already:
  • https://chromium.googlesource.com/chromium/src.git/+/{VERSION}/tools/clang/scripts/update.py

    • (Replace the {VERSION} placeholder in the url above to the Chromium version libcc uses.)
  • 构建Electron。
  • Try to build Debug version first: $ ./script/build.py -c D
  • You will need it to run tests
  • 修复编译和链接错误
  • 确保也可以构建发布版本
  • $ ./script/build.py -c R
  • Often the Release build will have different linking errors that you'll need to fix.
  • Some compilation and linking errors are caused by missing source/object files in the libcc dist
  • Update ./script/create-dist in the libcc repo, recreate a dist, and run Electron bootstrap script once again.

关于修复编译错误的提示

  • 首先修复构建配置的错误
  • 首先修复致命错误,例如丢失文件和与编译器相关的错误 标志或定义
  • 尝试尽快识别复杂错误。

    • 如果您不确定如何修复问题,请寻求帮助
  • 禁用所有 Electron 功能,修复构建,然后逐个启用它们
  • 添加更多构建标志以在构建时禁用功能。When a Debug build of Electron succeeds, run the tests: $ npm run test Fix the failing tests.

按照上述所有步骤在所有支持的平台上修复 Electron 代码。

更新崩溃报告(Crashpad)

如果有任何与Crashpad相关的编译错误,则可能意味着您需要将fork更新为更新的版本。 查阅 更新崩溃报告 了解相关步骤。

更新NodeJS

Upgrade vendor/node to the Node release that corresponds to the v8 version used in the new Chromium release. See the v8 versions in Node on

请参见 更新 Node 有关这方面的说明。

验证 ffmpeg 支持

Electron 发行版的 ffmpeg,默认包括专有的编解码器 没有这些编解码器的版本也被构建并分发到每个版本。 每个Chrome升级都应该验证是否仍然支持切换此版本。

您可以通过加载以下页面来验证Electron对多个ffmpeg构建的支持。 它应该与使用Electron分发的默认ffmpeg库一起工作,而不使用没有专有编解码器的ffmpeg库。

  1. <!DOCTYPE html>
  2. &lt;html&gt;
  3. &lt;head&gt;
  4. &lt;meta charset="utf-8"&gt;
  5. &lt;title&gt;专用编解码器检查&lt;/title&gt;
  6. &lt;/head&gt;
  7. &lt;body&gt;
  8. &lt;p&gt;通过加载来自 http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4 的视频来检查 Electron 是否使用了专用编解码器 &lt;/p&gt;
  9. &lt;p id="outcome"&gt;&lt;/p&gt;
  10. &lt;video style="display:none" src="http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4" autoplay&gt;&lt;/video&gt;
  11. &lt;script&gt;
  12. const video = document.querySelector('video')
  13. video.addEventListener('error', ({ target }) => {
  14. if (target.error.code === target.error.MEDIA_ERR_SRC_NOT_SUPPORTED) {
  15. document.querySelector('#outcome').textContent = 'Not using proprietary codecs, video emitted source not supported error event.'
  16. } else {
  17. document.querySelector('#outcome').textContent = `Unexpected error: ${target.error.code}`
  18. }
  19. })
  20. video.addEventListener('playing', () => {
  21. document.querySelector('#outcome').textContent = 'Using proprietary codecs, video started playing.'
  22. })
  23. &lt;/script&gt;
  24. &lt;/body&gt;
  25. &lt;/html&gt;

相关链接