ubuntu18.04编译修改chromium

本文详细介绍了如何通过depot_tools下载、安装Chromium源代码,以及编译过程中的fetch、gclient、fetchhooks、编译设置和常见问题解决方法,包括Python版本更新和importlib_metadata模块的安装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

chromium官网

https://www.chromium.org/developers/
https://www.chromium.org/developers/how-tos/get-the-code

安装depot_tools

这个工具是谷歌用来下载同步和管理其软件项目的工具,包括chromium。

cd /home/xxx
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

然后depot_tools的bin目录放到PATH环境变量中,也就是在当前用户的根目录下,打开 ~/.bashrc ,在最后面写入

export PATH="$PATH:${HOME}/depot_tools"

然后回到目录中,执行

cd /home/xxx
source ~/.bashrc

获取源码

创建一个你放源码的文件

cd /home/xxx/workspace
mkdir ~/chromium && cd ~/chromium

然后用fetch工具来获取源码,fetch工具是depot_tools中的工具

fetch --nohooks --no-history chromium

注意事项:

  • fetch代码时不能断点续传, 如果操作中断必须删掉整个文件夹重新fetch,建议传入 --nohooks,在fetch完成后手动使用gclient运行Hook, 防止不必要的意外
  • fetch代码时如果有翻阅Commit记录的需求, 不要传入 --no-history 
  • fetch完Chromium的主代码文件后,建议运行 gclient sync 同步一次源并执行一下各个Hook (这些Hook帮你下载第三方库然后配置好编译环境) 确保没有遗漏任何东西参数

更新代码

gclient sync

注意事项:

  • 使用 gclient sync 时可以加入 --no_bootstrap 选项来加快启动速度(避免从Google更新一次)
  • 使用 gclient sync 时如果你不在chromium的最新master分支, 需要带上 --with_branch_heads --with_tags 参数来确保切换到了正确的地方

下载依赖

我们下载下来的源码中,有个src目录,进去之后执行

cd src
./build/install-build-deps.sh

编译chromium

首先执行

gclient runhooks

下载hook并执行,完成之后,执行下面的命令即可

cd src
gn gen out/Default
# 这一步大概等待10s-60s左右

# 输出"Done. Made 17662 targets from 3219 files in 17656ms"
autoninja -C out/Default chrome
# 初次编译,这一步大约需要十几个小时

编译完成之后,进入到out/Default目录即可。可以看见名为chrome的可执行文件。

注意事项:

  • 改过 BUILD.gn 后不一定要重新执行 gn gen, 这会造成IDE需要重新加载整个解决方案. 你可以直接运行一下 autoninja 让它重新生成ninja文件然后在编译前 Ctrl+C 就可以仅在IDE里重载一个项目

配置

 如果你想编译时加入各种Codec的支持, 务必添加以下参数:

ffmpeg_branding = "Chrome"

proprietary_codecs = true

rtc_use_lto = true
rtc_use_h264 = true

use_openh264 = true

enable_hevc_demuxing = true
enable_ac3_eac3_audio_demuxing = true
enable_mse_mpeg2ts_stream_parser = true

Debug参数(加速编译):

is_debug = true
is_win_fastlink = true
is_component_build = true

blink_symbol_level = 0

Release参数(运行优化):

is_debug = false
is_win_fastlink = true
is_component_build = false

optimize_webui = true

symbol_level = 0
blink_symbol_level = 0

异常处理

异常1

1>WARNING: subprocess '"git" "-c" "core.deltaBaseCacheLimit=2g" "fetch" "origin" "refs/heads/main:refs/remotes/origin/main" "--no-tags" "--depth=1"' in /home/fuqiang/workspace/chromium1/src failed; will retry after a short nap...

解决方案:

等待一段时间,看会不会多次重复出现,我出现了4次后不在出现

异常2

fuqiang@ubuntu:~/workspace/chromium1/src$ autoninja -C out/Default chrome
ninja: Entering directory `out/Default'
[1875/56539] ACTION //components/resources:about_credits(//build/toolchain/linux:clang_x64)
FAILED: gen/components/resources/about_credits.html 
python3 ../../tools/licenses/licenses.py --target-os=linux --depfile gen/components/resources/about_credits.d credits gen/components/resources/about_credits.html
Traceback (most recent call last):
  File "../../tools/licenses/licenses.py", line 36, in <module>
    from spdx_writer import SpdxWriter
  File "/home/fuqiang/workspace/chromium1/src/tools/licenses/spdx_writer.py", line 6, in <module>
    import dataclasses
ModuleNotFoundError: No module named 'dataclasses'
[1878/56539] CXX obj/third_party/angle/angle_common/aligned_memory.o
ninja: build stopped: subcommand failed.

解决方案:

更新python版本,重新编译

sudo apt install -y python3.7-dev

注意上面用的是python3,通过

python3 --version

看看是否更新成功,如果没有成功,可能是某些软链接没有修改

fuqiang@ubuntu:~/workspace$ ls -al /usr/bin/python*
lrwxrwxrwx 1 root root      18 Feb 16 16:57 /usr/bin/python -> /usr/bin/python3.7
lrwxrwxrwx 1 root root       9 Apr 16  2018 /usr/bin/python2 -> python2.7
-rwxr-xr-x 1 root root 3628904 Nov 29 02:51 /usr/bin/python2.7
-rwxr-xr-x 1 root root     154 Nov 11  2017 /usr/bin/python2-pbr
lrwxrwxrwx 1 root root      18 Feb 16 16:59 /usr/bin/python3 -> /usr/bin/python3.7
-rwxr-xr-x 2 root root 4526456 Nov 25 22:10 /usr/bin/python3.6
lrwxrwxrwx 1 root root      33 Nov 25 22:10 /usr/bin/python3.6-config -> x86_64-linux-gnu-python3.6-config
-rwxr-xr-x 2 root root 4526456 Nov 25 22:10 /usr/bin/python3.6m
lrwxrwxrwx 1 root root      34 Nov 25 22:10 /usr/bin/python3.6m-config -> x86_64-linux-gnu-python3.6m-config
-rwxr-xr-x 2 root root 4852896 Dec 10  2021 /usr/bin/python3.7
lrwxrwxrwx 1 root root      33 Dec 10  2021 /usr/bin/python3.7-config -> x86_64-linux-gnu-python3.7-config
-rwxr-xr-x 2 root root 4852896 Dec 10  2021 /usr/bin/python3.7m
lrwxrwxrwx 1 root root      34 Dec 10  2021 /usr/bin/python3.7m-config -> x86_64-linux-gnu-python3.7m-config
-rwxr-xr-x 1 root root 5183008 Dec 10  2021 /usr/bin/python3.8
lrwxrwxrwx 1 root root      33 Dec 10  2021 /usr/bin/python3.8-config -> x86_64-linux-gnu-python3.8-config
lrwxrwxrwx 1 root root      16 Oct 25  2018 /usr/bin/python3-config -> python3.6-config
-rwxr-xr-x 1 root root     398 Nov 16  2017 /usr/bin/python3-jsonschema
lrwxrwxrwx 1 root root      10 Oct 12 16:04 /usr/bin/python3m -> python3.6m
lrwxrwxrwx 1 root root      17 Oct 25  2018 /usr/bin/python3m-config -> python3.6m-config
-rwxr-xr-x 1 root root     683 Apr 28  2017 /usr/bin/python3-petname
-rwxr-xr-x 1 root root    1797 Jul 12  2017 /usr/bin/python3-unidiff
fuqiang@ubuntu:~/workspace$ 

异常3

    import bind_gen
  File "/home/fuqiang/workspace/chromium1/src/third_party/blink/renderer/bindings/scripts/bind_gen/__init__.py", line 36, in <module>
    from .callback_function import generate_callback_functions
  File "/home/fuqiang/workspace/chromium1/src/third_party/blink/renderer/bindings/scripts/bind_gen/callback_function.py", line 8, in <module>
    from .blink_v8_bridge import blink_class_name
  File "/home/fuqiang/workspace/chromium1/src/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py", line 8, in <module>
    from .code_node import FormatNode
  File "/home/fuqiang/workspace/chromium1/src/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py", line 13, in <module>
    from .mako_renderer import MakoRenderer
  File "/home/fuqiang/workspace/chromium1/src/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py", line 7, in <module>
    import mako.runtime
  File "/home/fuqiang/workspace/chromium1/src/third_party/mako/mako/mako/runtime.py", line 14, in <module>
    from mako import compat
  File "/home/fuqiang/workspace/chromium1/src/third_party/mako/mako/mako/compat.py", line 68, in <module>
    import importlib_metadata  # noqa
ModuleNotFoundError: No module named 'importlib_metadata'
[4400/51900] ACTION //third_party/blink/rendere...lue_keywords(//build/toolchain/linux:clang_x64)
ninja: build stopped: subcommand failed.

解决方案:

sudo pip3 install importlib-metadata

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码论斤卖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值