目前,chromium的源代码已经全部迁移到了git管理,所以本文主要梳理一下下载chromium源代码的过程。
chromium现在分为四个大分支:
chromium源代码的构建工具集的管理是通过depot_tools来管理的,所以首先要下载一个depot_tools。这个工具是在chromium的官网上的,可能需要科学上网才能够下载,具体的下载地址:depot_tools。直接下载对应的系统的版本,windows的直接下载一个压缩包。
下载完成后,将depot_tools.zip解压,把depot_tools目录路径添加到系统的PATH环境变量开始处;如PATH=c:\depot_tools;.......
要把depot_tools的目录放大path的前面。如果加在path路径后面,要确保你path内部没有git,python等路径
depot_tools工具下载设置完成后,就可以利用depot_tools中的脚本去下载一些必要的工具,比如git、svn、Python等工具,同时也会更新depot_tools中的数据。这些脚本的执行都是在cmd中完成的,并需要连接网络来下载数据,这时就要为cmd设置网络代理。具体的方法如下所示:
首先必须找到一个可用的高速http/https/socks5的代理服务器
为cmd设置http/https/socks5代理。打开一个具有管理员权限的cmd(非常重要),在其中输入:
x:>netsh
netsh>winhttp
netsh winhttp>
netsh winhttp>
netsh winhttp>set proxy http.proxy.com:12345
其中http.proxy.com:12345
为你的代理的IP地址和端口号。
设置完成后,退出该cmd就可以了。该设置使固化在系统红的,重新启动之后,该设置依然有效。
启动一个新的cmd,执行命令x:>gclient
,这时就能够利用设置好的cmd代理下载git、svn、python等工具并更新depot_tools。
等上面的步骤执行结束后,再次执行x:>gclient
,一般这里的执行结果会失败。即使再次成功了,也没有关系,继续往下设置。
之所以说这里可能失败,是因为第一次执行gclient只要是更新depot_tools、下载git等工具;第二次执行gclient就要通过git工具下载一些东西了,但是这时git并没有设置代理。如果git下载不能翻墙,那么就会报错。
在第二次运行gclient命令前,我们要为git设置好代理。git支持git、http/https、ssh等协议,在这里我们只需要设置最简单的http/https协议就行了。假设代理服务器的地址为:http://http.proxy.com:12345,http://https.proxy.com:2345,scoks5://scoks.proxy.com:3456,设置方法如下:
先设置CMD环境变量,在CMD中输入:
x:>set http_proxy=http://http.proxy.com:12345
x:>set https_proxy=http://https.proxy.com:23456
x:>set socks5_proxy=socks5://https.proxy.com:23456
为git设置代理
a)使用http/https代理服务器
x:>git config --global http.proxy %http_proxy%
x:>git config --global https.proxy %https_proxy%
或者:b)使用socks5代理服务器
x:>git config --global http.proxy %socks5_proxy%
x:>git config --global https.proxy %socks5_proxy%
验证git代理
设置完后,用下面命令看是否成功:
x:>git config --get http.proxy
x:>git config --get https.proxy
再次执行gclient命令
这时git的代理就设置好了,再次运行gclient
命令,就会利用git通过设置的代理下载一些数据。这样gclient
命令就能够正确的执行完毕。
成功后可以运行一次gclient –version看看版本号,并注意一下有没有错误提示:
x:>gclient --version
配置git的用户名和邮箱
x:>git config --global user.name "yourname" #yourname改为你希望的用户名
x:>git config --global user.email "[email protected]" #输入你自己的邮箱
x:>git config --global core.autocrlf false
x:>git config --global core.filemode false
环境设置完毕,下面就开始同步源代码:
建立一个目录用于下载chromium代码,比如D:\chromium,在此目录中在建立一个目录master;D:\chromium\master就是我们将要签出代码的主目录。
进入该目录,通过下面的命令,产生.gclient文件:
gclient config https://chromium.googlesource.com/chromium/src.git
设置环境变量
set GYP_MSVS_VERSION=2013
set GYP_GENERATORS=ninja
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
// 如果要编译release版本则是 set GYP_DEFINES=branding=Chromium buildtype=Official
//这里使用的是windows kit 10,后面说为什么。
set GYP_DEFINES=windows_sdk_path="C:\Program Files (x86)\Windows Kits\10" component=shared_library disable_nacl=1 enable_automation=0 enable_captive_portal_detection=0 enable_google_now=0 enable_hidpi=0 fastbuild=1 ffmpeg_branding=Chrome incremental_chrome_dll=0 proprietary_codecs=1 remoting=0
提示:环境变量set GYP_MSVS_VERSION原来是2015,但是用了一个月过期了,再次使用它编译出现一些问题,所以还是用2013版本的。
在当前窗口运行,运行如下内容耐性等待,看网络条件2–40小时:
gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"
如果发生错误,注释掉depot_tools\python276_bin\Lib\mimetypes.py文件的248–251行内容:
# try:
# ctype = ctype.encode(default_encoding) # omit in 3.x!
# except UnicodeEncodeError:
# pass
再次运行下面的命令:
gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"
执行完成后进入src目录,执行下面的命令:
cd src
git fetch
git pull
为了安全起见,再次执行下面的命令:
cd ..
gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"
cd src
git fetch
git pull
生成工程文件(最好做一个备份或者做个分支)
一定要注意,runhooks前要修改两个文件: src\build\common.gypi 在5488行(4610, # Object
can never be instantiated)左右,加入 4702, 4819, 4996,
src\build\some.gyp 的 #’../chrome/chrome.gyp:chrome’,前面的#取消,解除注释这里说一下添加这几个数字的用途:
由于编译chromium源码对warning要求很严格,一旦出现warning就会停止编译。在common.gypi文件中增加这些整数就是降低该warning的等级,或者说忽略该warning。
如果在最新的代码基础上面产生工程文件,会生产一个不稳定版本。类似于 http://dev.chromium.org/getting-involved/dev-channel 上面的 Canary build for Windows 版本.
执行命令开始构建系统:
gclient runhooks --force
编译当前版本源代码,在src目录执行:
ninja -C out\Debug chrome # 生成x86 Debug版本
ninja -C out\Debug content # 生成content_shell版本
ninja -C out\Release chrome # 生成x86 Release版本
ninja -C out\Debug_X64 chrome # 生成x64 Debug版本
ninja -C out\Release_X64 chrome # 生成x64 Release版本
注意:这样直接的编译会产出好多的提示信息,又由于windows的控制台是不能翻页的,所以最好把编译的信息重定向到一个文件中。在每一个命令的后面加上>>log.txt 2>&1
就可以了。
恢复netsh winhttp设置为直连
打开一个具有管理员权限的CMD,输入下面命令:
x:>netsh
netsh>winhttp
netsh winhttp>
netsh winhttp>reset proxy
输入下面命令看清除是否成功,成功后显示下面信息:
netsh winhttp>show proxy
Current WinHTTP proxy settings:
Direct access (no proxy server).
清除git代理
打开一个普通的CMD,输入下面的命令:
git config --global --unset http.proxy
首先切换至src目录下,列出所有版本的标签,下面的命令将标签记录到tags.txt文本中:
git tag >>tags.txt 2>&1
用sublime打开tags.txt文件后查看版本号,这里只截取最新版本号。
大家可以切换到某个tag进行编译,命令和切换到分支相同,使用如下命令:
git checkout -b chrome_43.0.2355.2_local_branch 43.0.2355.2
这句话的意思就是创建本地分支chrome_43.0.2355.2_local_branch并切换到远程43.0.2355.2tag上。这里可以通过git branch查看当前的分支。
在某个特定的版本上创建完分支之后,再次同步代码:
gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"–jobs 16
//使用--nohooks可以减少每次都检查编译环境等信息。
这样就能够编译当前版本的chromium源代码了。
文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99
文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效
文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是
文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件
文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件
文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码
文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware
文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停
文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待
文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析
文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code
文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象