Linux chromium 源码下载及编译

2023-11-03


1. Chromium Souce Code Download

    1.1  download source code

1> 方法一

# 获得所有发布tag的信息。
git fetch --tags
 
# 根据37.0.2062.103版本建立一个你自己的分支
git checkout -b your_release_branch 37.0.2062.103
 
// 同步所有相关工程代码
gclient sync --with_branch_heads --jobs 16

2>方法2

 .gclient

solutions = [
  {
    "managed": True,
    "name": "src",
    "url": "https://chromium.googlesource.com/chromium/src.git@41.0.2272.76",
    "custom_deps": {
    "src/content/test/data/layout_tests/LayoutTests": None,
    "src/chrome/tools/test/reference_build/chrome_win": None,
    "src/chrome_frame/tools/test/reference_build/chrome_win":None,
    "src/chrome/tools/test/reference_build/chrome_linux":None,
    "src/chrome/tools/test/reference_build/chrome_mac": None,
    "src/third_party/hunspell_dictionaries": None,
    },
    "deps_file": ".DEPS.git",
    "safesync_url": "",
  },
]
target_os = ['android']
    然后 gclient  sync --with_branch_heads --jobs 16

  1.2 配置gyp

~/chromium$ echo "{ 'GYP_DEFINES': 'OS=android', }"> chromium.gyp_env

~/chromium$ gclient runhooks

1.3 安装jdk

1.4 build

~/chormium$ . build/android/envsetup.sh // 配置环境

~/chromium$ android_gyp //在out目录下生成*.ninja文件,会读取环境变量GYP_DEFINES确定platform

// chromium39推荐使用./build/gyp_chromium来代替android_gyp

~/chromium$ ninja -C out/Release content_shell_apk

如果GYP_DEFINES设置不正确,会产生错误ninja: error: unknown target 'content_shell_apk', did you mean 'content_shell_pak'?



2. Build

   http://code.google.com/p/chromium/wiki/LinuxBuildInstructions

   ./build/gyp_chromium -Dflag1=value1 -Dflag2=value2 // create 'out' folder and makefiles
   ninja -C out/Release chrome

   // ninja -C out/Debug chrome // 4G内存 4Gswap 编译了大概有3个小时


   目前能成功编译,但是运行crash,sanbox问题。待解。。。


3. Debug Render进程

    3.1 调试browser进程

     gdb out/Debug/chrome // 只能调试browser进程代码,即只有browse代码的断点能停住

    3.2 调试render进程

    3.2.1  先运行chrome

       ./out/Debug/chrome

    3.2.2 查看render进程id

        pstree -ap | grep chrome

        返回结果如下

         |                      |-bash(6496)---chrome(7043)-+-chrome(7044)
          |                      |                                                |-chrome(7045)-+-chrome(7076)-+-{chrome}(7077)
          |                      |                                                |              |                                      |-{chrome}(7078)
          |                      |                                                |              |                                      `-{chrome}(7128)

             7076 就是render进程id

    3.3.3 运行gdb 并attach到render进程id (需要root 运行gdb,否则attach失败

        $su

         #gdb

         (gdb) attach 7076

          Attaching to process 7076
          Reading symbols from /home/xxx/work/chrome/google/src/out/Debug/chrome...done.

         (gdb) b WebCore::ResourceLoader::didReceiveResponse
         Breakpoint 1 at 0x7f67077c6ea6: file ../../third_party/WebKit/Source/core/loader/ResourceLoader.cpp, line 317.
         (gdb) c

         //刷新界面后,断点停住,可用bt来查看callstack

        (gdb) bt
#0  WebCore::ResourceLoader::didReceiveResponse (this=0x3518a8a35da0, response=...)
    at ../../third_party/WebKit/Source/core/loader/ResourceLoader.cpp:317
#1  0x00007f670815a35e in WebCore::ResourceHandleInternal::didReceiveResponse (this=0x3518a89138e0, response=...)
    at ../../third_party/WebKit/Source/core/platform/network/ResourceHandle.cpp:122
#2  0x00007f6707cc440f in webkit_glue::WebURLLoaderImpl::Context::OnReceivedResponse (this=0x3518a825fb60, info=...)
    at ../../webkit/glue/weburlloader_impl.cc:640

。。。。。


chromium58

If you're trying to build older releases using a current gclient, you'll most likely need to pass --disable-syntax-validation on the command line.

gclient sync --with_branch_heads --disable-syntax-validation


build release tag/branch

https://www.chromium.org/developers/how-tos/get-the-code/working-with-release-branches


gn gen out_arm64_58/Release --args='target_os="android" target_cpu="arm64" is_debug=true is_component_build=true is_clang=false 
                                    symbol_level=1 enable_incremental_javac=false enable_nacl=false proprietary_codecs=true
                                    ffmpeg_branding="Chrome"'

ninja -C out_arm64_58/Release chrome_public_apk





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux chromium 源码下载及编译 的相关文章

随机推荐

  • ARP攻击后续

    查看ARP缓存表 我们先了解一下ARP缓存表的概念 络设备一般都有一个ARP缓存 ARP Cache ARP缓存用来存放IP地址和MAC地址的关联信息 在发送数据前 设备会先查找ARP缓存表 如果缓存表中存在对方设备的MAC地址 则直接采用
  • VS2013编译FFMPEG遇到的坑

    因为需要 用到老的FFMPEG库 但官方又没有编译好的LIB和DLL 只能下载源码自己编译了 但对LINUX环境不懂 只有在WINDOWS上配置环境编译 记录过程如下 1 下载FFMPEG源码 下载地址 http ffmpeg zerano
  • RV32I指令集

    RV32I是最基本的32位Base指令集 它支持32位寻址空间 支持字节地址访问 仅支持小端格式 little endian 高地址高位 低地址地位 寄存器也是32位整数寄存器 RV32I指令集的目的是尽量简化硬件的实施设计 所以它只有47
  • 蓝奏云访问修复(JavaScript 几个参数及命令讲解)

    每次都要更改蓝奏云分享链接中的 www lanzous com 为 ww lanzous com 麻烦 改 Hosts 有效果 但写个脚本不香么 蓝奏云访问 用到的命令和参数 window location href 当前页面的 URL 字
  • 解决粘包问题的三种方法

    方法一 定长数据流 服务器客户端提前协商 每个消息定长 不足的空白字符补足 方法二 特殊结束符 双方协商定义一个特殊的分隔符号 比如 等 只要没有发送分隔符就意味着一条数据没有结束 方法三 协议 相对最成熟额数据传递方式 由服务器开发者提供
  • http常见字段

    Host字段 客户端发送请求时 用来指定服务器域名 有了Host字段 就可以将请求发往同一台服务器上的不同网站 Content Length 字段 服务器在返回数据时 会有Content Length字段 表名本次回应的数据长度 Conne
  • Vue 团队公开快如闪电的全新脚手架工具,未来将替代 Vue-CLI,才300余行代码,学它!...

    1 前言 大家好 我是若川 欢迎关注我的公众号若川视野源码共读活动ruochuan12 想学源码 极力推荐之前我写的 学习源码整体架构系列 jQuery underscore lodash vuex sentry axios redux k
  • 求生之路2 局域网联机教程

    1 下载游侠网的 求生之路2 生存之旅2 V2 1 2 1中文绿色免安装公网联机版 2 双方保持版本号一致 3 版本号在E Left 4 Dead 2 left4dead2 steam inf里 4 对主程序建立快捷方式 5 在快捷方式的属
  • 文件服务器磁盘增量备份,完全备份、差异备份以及增量备份

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 常用的数据备份方式有完全备份 差异备份以及增量备份 那么这三种备份方式有什么区别 在具体应用中又该如何选择呢 1 备份方式简介 完全备份 Full Backup 备份全部选中的文件夹 并不依赖文
  • JS alert() 弹出框乱码的问题

    今天写了一个html 中间引用了js文件 chrome显示和html的字符集都是utf 8 但执行事件onclick alert 请输入数字 弹出乱码 百度一下 找到了解决方法 好了 废话不说了 1 在html中 引入js 插入的语句中指定
  • Mysql 启动报错解析:Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/dat

    问题 root centos74 service mysqld start Starting MySQL ERROR The server quit without updating PID file usr local mysql dat
  • 【Obsidian样式】修改文件夹名称和文件名称前的图标

    声明 本文大部分内容来自于https www bilibili com read cv17822164 方法一 Obsidian Icon Folder插件 Github https github com FlorianWoelki obs
  • 中断管理基础学习笔记 - 6. 软中断

    目录 1 前言 2 软中断概述 软中断类型 软中断数据结构 3 注册软中断 4 触发软中断 raise softirq raise softirq irqoff 5 执行软中断 中断返回 ksoftirqd local bh enable
  • 在windows环境下使用wget

    众所周知呢wget这个工具是Linux Unix下才能使用的 但是本人公司的电脑上没有这两个系统 产品经理又硬性要求 所以查百度 问朋友终于搞定了 wget在windows的环境下使用原来以前都有前辈做到了 这里是自己做下笔记 以方便自己以
  • telbot负载均衡设置

    telbot负载均衡设置 概述 golang 横向扩展电报机器人 采用webhook方式 nginx做负载均衡 这样就可以分担请求 减小单个服务器的负担 配置方式 负载端 package main import tele gopkg in
  • idea eclipse 快捷键全局搜索替换代码 修改包名

    全局搜索替换 选中项目右击 点击Replace in files 在文件中替换 输入查找 替换的内容 replaceAll 替换所有 全局搜索查找代码Ctrl H File mask 选择文件类型 可以更精确查找 文件查找Ctrl Shif
  • STM32+LZMA的移植经历

    连续一天加一个晚上 查资料 发现无解 压缩不可能在STM32上进行的 因为代码中那个内存分配的结构体占内存太大了 解压是可以实现的 因此这个算法在STM32上也是有一些作用 在某些场合可以在PC机进行压缩存入ARM中 然后ARM解压 比如某
  • Sql Server判断数据库、表、存储过程、函数是否存在

    判断数据库是否存在 if exists select from sys databases where name 数据库名 drop database 数据库名 判断表是否存在 if exists select from sysobject
  • 【无标题】vxworks ARM Pl330DMA 数据传输指令流创建

    pl330DmaChanMicroCodeCreate create micro code for dma transfer This routine create micro code for dma transfer RETURNS O
  • Linux chromium 源码下载及编译

    1 Chromium Souce Code Download 1 1 download source code 1 gt 方法一 获得所有发布tag的信息 git fetch tags 根据37 0 2062 103版本建立一个你自己的分支