chromium源码编译
参考博客:https://www.jianshu.com/p/5fce18cbe016
- 拜祭一下祖先和各路神仙,还有上帝,毕竟代码是在他的地盘;
- 一定一定要保证网路是通畅的,不能出现中断;
环境配置
- 本身编译环境Ubuntu 16.04,预留50G以上的磁盘空间;
- 一个稳定的科学上网工具(需要自行领悟);
- 耐心;
一、配置访问google环境
1. git设置全局代理
// 设置git代理
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
// 测试是否通畅,测试完后记得删掉对应文件,保证通畅即可,不必全部下载完成
git clone https://chromium.googlesource.com/chromium/src.git
// 最终记得取消git代理
git config --global --unset http.proxy
git config --global --unset https.proxy
2. https请求设置代理
export https_proxy=127.0.0.1:12333
// 测试是否通畅,测试完成后记得删掉对应文件,或者使用curl也可,保证https可以请求到GFW之外即可
wget https://www.google.com
二、下载源码
1. 设置depot_tools包
//获取depot_tools代码管理工具
clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
//配置path,替换实际地址
export PATH=$PATH:/media/psf/Home/code/chromium/depot_tools
2. 下载chromium源码
mkdir chromium
cd chromium
// 下载源码,这个过程网络不能中断,中断会重新下载,最终大约会下载40G左右的文件
fetch --nohooks android
3. 同步代码
要保证gclient sync --force没有错误地执行完成。
//同步一下代码,也可以用于下载过程中的意外中断
gclient sync --force
三、编译源码
- 如果之前都正常gclient sync完成以后就可以进入编译阶段了。
cd src
// 使用ninja编译,配置gn参数
gn args out/Default
- 之后需要配置gn参数,配置完成保存
target_os = "android"
target_cpu = "arm" # (default)
is_debug = true # (default)
# Other args you may want to set:
is_component_build = true
#is_clang = true
symbol_level = 1 # Faster build with fewer symbols. -g1 rather than -g2
#enable_incremental_javac = true # Much faster; experimental
- 安装依赖阶段
sudo ./build/install-build-deps-android.sh
//以下只针对编译1.7jar包的需求,实际上目前chromium已经切换到java 1.8,所以不需要切换版本,切换后会有问题
//由于openjdk-7已经不再提供,所以需要手动安装open-jdk-7
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
//类似于android源码编译过程,之后指向open-jdk-1.7,可以用java -version验证是否切换成功
sudo update-alternatives --config javac
sudo update-alternatives --config java
//没有javaws的切换
sudo update-alternatives --config javaws
sudo update-alternatives --config javap
sudo update-alternatives --config jar
sudo update-alternatives --config jarsigner
- 正式编译
// 编译对应的库
ninja -C out/Default/ net
ninja -C out/Default/ url
// 实际没有这个库名字
ninja -C out/Default/ zlib
四、问题汇总:
1. CIPD selfupdate failed. Trying to bootstrap the CIPD client from scratch...问题:
export DEPOT_TOOLS_UPDATE=0
2. 网络连接错误:
wget url查看网络返回是否通畅,不通畅就需要配置一下代理了~
3. gn.py: Could not find gn executable at: /media/data/Projects/OpenSource/chromium/src/buildtools/linux64/gn问题
//执行指令
gclient runhooks
4. Unable to create '/media/psf/Home/code/chromium/code/src/thirdparty/androidtools/.git/index.lock': File exists.问题
删掉对应lock文件即可
5. You have PROXY values set in your environment,.....
// 不处理也是可以的。
// 找一个位置创建文件boto.cfg,填入代理信息:
[Boto]
proxy=http://127.0.0.1
proxy_port = 12333
// 设置boto_config变量,路径设置对应位置
set NO_AUTH_BOTO_CONFIG=/home/linux/code/chromium/boto.cfg
6. Syntax error: "(" unexpected问题
应该是源码本身的问题,我这里切换了一个分支,后台又用gclient sync同步了最新的代码以后,就可以正常编译了。
7. 其它问题
如果遇到其它问题,有解决方案的话可以加进来。
8. 最终解决办法
直接下载我这里编译好的chromium源码:https://pan.baidu.com/s/1nQESf1c0XTRAx2ktK1hBVQ
记得cat chromium1 chromium2 chromium3 > chromium.tar.gz合成一个文件,然后直接解压tar -xvf chromium.tar.gz