背景
由于开发项目的需要,发现先有版本的Android webview在请求头部中都会带上X-Requested-With: package-name, 也就是会带上Android app的包名,有一些特殊的需求其实是不想webview在请求带上这个包名。解决这个问题方案有3种,1:针对webview随机返回系统一个安装的app的名字;2:不使用Webview,使用例如Geckoview开源SDK;3:自己编译一个Webview,去嗲这个头部的带入。方案1,2已经验证是可行的,唯独方案3还没验证,于是就想自己编译一个Webview下,于是说干就干。
历程
Windows wsl2 setting enable FILE SYSTEM case sensative
//On wsl enviroment,运行如下命令
mount
vi /etc/wsl.conf
[automount]
options="case=force"
wq //write and save wsl.conf file
exit //quit wsl enviroment
wsl --shutdown //restart wsl system
//如果使用case=force,那么需要在powershell管理员权限下执行以下命令
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lxss /v DrvFsAllowForceCaseSensitivity /t REG_DWORD /d 1
然后 wsl 重启就是大小写敏感型文件系统啦!
1. Prepare VPN
因为是在国内,所以首先得准备梯子;比如我使用的ClashX, 打开VPN界面,
1. Proxy > Port/Terminal > Copy Commands Only > Power Shell
2. Open Power Shell as adminstrastor
3. Paste 'Copied cmd' and run
4. Congrats! our termianl https proxy setting OK
2. Set git proxy & https proxy
git config --global http.proxy 'socks5://192.168.2.122:7890'
git config --global https.proxy 'socks5://192.168.2.122:7890'
//Test git is ok, Just intterupt clone operation after connected
//git clone https://chromium.googlesource.com/chromium/src.git
//Dont forget to unset git proxy by using belowing cmds
git config --global --unset http.proxy
git config --global --unset https.proxy
//set https proxy, don't add http on head of 192.x.x.x
export https_proxy=192.168.2.122:7890
//Test https_proxy is ok if it download an index.html in current directory
wget https://www.google.com
3. Set depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_toosls.git
vi ~/.bash_profile
insert 'export PATH=$PATH:{PATH-TO-depot_tools}'
4. Download source code
We can make folder first & run the following commands
mkdir chromium
cd chromium
fetch --nohooks android
There will be a long time wait to download source code
5. syn code if interrupted
gclient sync --force
如果此时出现了下面的错误
________ running 'cipd ensure -log-level error -root /app/build/android -ensure-file /tmp/tmpwdsko364.ensure' in '.'
> [P778 02:34:48.298 client.go:1913 E] [unzip] Failed to install chromium/third_party/android_toolchain/android_toolchain in "pdfium/third_party/android_toolchain/ndk": adding files to the site root: lstat /app/build/android/.cipd/pkgs/5/NSOM616pOQCfRfDAhC72ltgjyUQp9lAWCMzlmgB18dAC/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/netfilter/xt_connmark.h: no such file or directory
在开始遇到这个问题的时候,我也是很懵圈的,完全不知道从何下手。于是我以为我下代码过程出了问题,因为我中途中断了下,因为我看命令行没有反应了。于是我就又重新建立目录然后就走了上面的流程。结果很悲剧还是报上面的错误,浪费了我88G的流量啊,心痛!T.T。此时依旧不知道哪里出了问题
6. 安装编译依赖
sudo ./build/install-build-deps --android
7. Before compile
cd src
//Default can be replace any name you want but it must be subdirectory of out folder
gn args out/Default
//configure gn args
target_os = "andorid"
target_cpu = "arm64" //set https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instructions.md for more detail
8. Compile
比如我想编译chrome_apk,使用如下指令即可
autoninja -C out/Default chrome_public_apk
Conclusion & May occur problems
- CIPD self update failed, Trying to bootstrap the CIPD client from scratch …
export DEPOT_TOOLS_UPDATE=0 - gn.py Could not find gn executable at xx/src/buildtools/linux64/gn error
//re run following command gclient runhooks - Unable to create ‘xx/src/thirdparty/xx/.git/index.lock’ : File exists
//find & delete these files find ./src/thirdparty/ -type f -name 'index.lock' | xargs rm - You have PROXY values set in you enviroment…
//You can ignore this warning, can also solve by following operation cd chromium vi boto.cfg [Boto] proxy=http://192.168.2.122 proxy_port=7890 wq set NO_AUTH_BOTO_CONFIG={chromium_abs_path}/boto.cfg - Syntax error: “(” unexpected
checkout a new branch
耗费时间最长还是解决同步代码是”xt_connmark.h: no such file or directory Errors”错误,这也是偷懒不想装Linux双系统或者虚拟机的结果。使用WSL2 时,必须开启文件系统的大小写敏感。要不然会有很无法预知的错误。到时候更是一脸懵圈
引用
- https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instructions.md