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
//由於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
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. 其它問題
如果遇到其它問題,有解決方案的話可以加進來。