美文网首页Android开发Android进阶之路Android开发经验谈
Chromium内核浏览器编译记(一)采坑实录

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

作者: 容华谢后 | 来源:发表于2022-03-31 07:39 被阅读0次
    封面

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

    本文出自 容华谢后的博客

    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源码的编译就完成了,有问题可以给我留言评论,下一篇文章讲一讲如何定制修改源码。

    相关文章

      网友评论

        本文标题:Chromium内核浏览器编译记(一)采坑实录

        本文链接:https://www.haomeiwen.com/subject/qtqpjrtx.html