Chromium内核浏览器编译记(一)踩坑实录

封面

转载请注明出处:https://www.jianshu.com/p/0b9922ae5b23

本文出自 容华谢后的博客

往期回顾:

Chromium内核浏览器编译记(一)踩坑实录

Chromium内核浏览器编译记(二)UI定制

0.写在前面

本篇文章是用来记录编译Chromium源码的步骤和踩过的坑,以防止后续再用到的时候忘记,同时也希望能够帮助到遇到同样问题的同学。

官方推荐使用Ubuntu系统来编译源码,在Windows或者Mac环境下编译Android客户端是不支持的,我使用的是VMware虚拟机,在上面安装了Ubuntu 20.04.4 64位操作系统,分配了200G的硬盘空间,16G内存,12核心CPU,编译时间大概在5小时左右。

1.准备工作

因为Chromium的源码都在墙外,所以在下载源码之前,先要在Ubuntu系统上开启代理,本文中使用的是Clash工具,在GitHub中可以搜索到Linux版本客户端。

1.1 安装Git

使用以下命令安装:

sudo apt-get install git

设置Git网络代理:

git config --global http.proxy http://127.0.0.1:端口号

git config --global https.proxy https://127.0.0.1:端口号

下载源码的过程中,可能会报Git缓存的异常,可以通过以下命令把缓存设置的大一些:

sudo git config --global http.postBuffer 5242880000

sudo git config --global https.postBuffer 5242880000

2.1 配置depot_tools

Chromium使用了depot_tools来管理代码,先通过Git拉取代码:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

配置环境变量:

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

注意:文章中是把depot_tool下载到了【home/用户名】目录下,所以使用【$HOME】代表,环境变量要根据实际下载的路径修改。

源码的位置在这里:

源码位置

2.源码下载

2.1 拉取Chromium源码

当前处于【home/用户名】目录下,执行以下命令,创建chromium文件夹并进入:

mkdir ~/chromium && cd ~/chromium

拉取代码:

fetch --nohooks android

还可以设置不拉取历史记录,这样下载会快些:

fetch --nohooks --no-history android

提示下图中进度,则说明已经成功开始下载了:

下载源码

2.2 下载Android依赖

build/install-build-deps-android.sh

gclient runhooks

3.源码编译

Chromium使用Ninja作为主要的构建工具,并通过GN来生成.ninja配置文件,先初始化下配置文件:

gn gen --args='target_os="android" target_cpu="arm"' out/Default

关于target_cpu与本机代码指令集的对应关系,可以参照下列表格:

属性 说明
abi target_cpu
arm64-v8a arm64
armeabi-v7a arm
x86 x86
x86_64 x64

除了target_os和target_cpu之外,我们还可以根据编译类型(如debug、release)设置一些其他的参数:

  • is_debug: 设置true时编译debug版本,false时编译release版本,默认为false。

  • is_component_build: 设置true时会把声明为components的目标作为共享库动态加载,一般在编译debug版本时,会设置为true,这样每次改动编译链接花费的时间就会减少很多。若为false,则组件将采用静态链接。

  • is_official_build:设置true时会使用Chromium官方的编译优化,false时不设置。

初始化完成后,我们使用以下命令来编译Chromium APK:

autoninja -C out/Default chrome_public_apk

会提示下图中的进度:

编译中

经过漫长的等待,本文用了大概5个小时,如果没有出现任何报错的话,会在控制台看到以下信息:

ninja: Entering directory `out/Default'
[58707/58707] STAMP obj/chrome/android/chrome_public_apk.stamp

证明apk已经编译完成,名称为 ChromePublic.apkout/Default/apks 目录下。

编译时会产生一些缓存文件,可以通过以下命令进行清理,清理完成后,仅保留args.gn、build.ninja等基础的配置文件,以便我们进行一次编译:

gn clean out/Default

更多GN指令可以查看:https://gn.googlesource.com/gn/+/master/docs/quick_start.md

4.遇到的问题

4.1 磁盘空间

至少要分配100G的硬盘空间,Chromium Android相关的源码大概在30G左右,刚开始编译的时候,我只分配了60G的硬盘空间,编译过程中生成了几十G的缓存文件,直接占满了硬盘,导致虚拟机崩溃,无奈又重装系统。

4.2 depot_tools环境变量

如果拉取源码的时候,提示找不到fetch指令,那一定是环境变量的问题了,仔细看下路径设置的对不对。

4.3 Git网络代理

记得一定要给Git设置网络代理,不能拉取源码会一直超时,梯子我用的收费的Ghelper,里面有Clash的订阅。

4.4 下载源码或编译时中断了怎么办

下载源码执行下面的指令就可以了:

gclient sync

编译中断再执行下编译指令,会继续编译:

autoninja -C out/Default chrome_public_apk

4.5 编译过程中提示:No such file or directory: 'gcc'

安装下gcc就妥了:

sudo apt install gcc

4.6 编译过程中提示:No such file or directory: 'gperf'

同样的,安装下gperf:

sudo apt install gperf

4.7 编译过程中提示:No such file or directory: './clang_x86_v8_arm/gen-regexp-special-case'

缺少什么安装什么,遇到其他类似的报错,也是同样操作:

sudo apt install clang

5.写在最后

把apk安装看下效果,可以看到是最新的102.0.4966.0版本内核:

Chrome首页
关于Chrome

到这里,Chromium源码的编译就完成了,有问题可以给我留言评论,下一篇文章讲一讲如何定制修改源码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容