To The Mars.
← 所有笔记

Android · 开发实践

编译Android Chromium踩坑之路 — Solved “xt_connmark.h: no such file or directory Errors”

Tobe /

背景

由于开发项目的需要,发现先有版本的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

  1. CIPD self update failed, Trying to bootstrap the CIPD client from scratch …
    export DEPOT_TOOLS_UPDATE=0
    
  2. gn.py Could not find gn executable at xx/src/buildtools/linux64/gn error
    //re run following command
    gclient runhooks
    
  3. 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
    
  4. 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
    
  5. Syntax error: “(” unexpected
    checkout a new branch

耗费时间最长还是解决同步代码是”xt_connmark.h: no such file or directory Errors”错误,这也是偷懒不想装Linux双系统或者虚拟机的结果。使用WSL2 时,必须开启文件系统的大小写敏感。要不然会有很无法预知的错误。到时候更是一脸懵圈

引用

  1. https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instructions.md
— END —返回技术笔记 ↗