Android Chromium编译

858 阅读4分钟

一、背景

最近我司在做网页启动的优化,我通过对网络请求的观察,发现chromium创建的Connection的数目是有限的,这对于一些资源过多的页面来说,有点捉襟见肘了。 因此,笔者打算分析一下Chromium中的网络加载模块,看一下能否找到增加连接数目的方法。

本文主要分成如下几个阶段:

  1. 虚拟机环境的准备
  2. Chromium源码下载
  3. Chromium源码编译

二、虚拟机环境的准备

整体网络拓扑.png

Ubuntu虚拟上所要配置的环境变量及代理:

image.png

虚拟机上设置代理: Settings--》 Network --》 Network Proxy ---》 设置代理 ---》 关闭

三、Chromium源码下载

这个阶段既费耐心,又费流量,做好心理准备,哈哈。 笔者尝试了三种方式,前两种失败了, 建议直接使用第三种。

3.1 安装depot_tools(需要科学上网)

Google仓库上的该工具要比码云上的更新, 其需要依赖的python版本是3.8 , 而码云上的代码依赖的python版本是2.7。

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH="$PATH:/path/to/depot_tools"

还是需要注意 depot_tools的版本,建议使用Google官网最新的。

3.2 下载代码

  • 确定要获取的代码版本
  • 从码云上下载对应版本的代码 (这里不需要 “科学上网”)
  • 使用depot_tools中的Gclient同步Google的依赖

3.2.1 代码版本确定

代码版本确定:先查看一下,当前Android设备上的Webview的版本:

# adb shell dumpsys package com.android.chrome | grep versionName
versionName=114.0.5735.131

然后通过 码云下载 指定版本的代码,本文中的版本是(114.0.5735.131)

3.2.2 下载对应版本代码

mkdir chromium && cd chromium  # 创建一个工作目录
git clone --depth 100 -b  114.0.5735.131  https://gitee.com/mirrors/chromium.git src

3.2.3 同步第三库及下载编译依赖

然后通过gclient 同步google上的依赖库。(这一步是需要“科学上网”的)。 依次创建gclient.boto 和 .gclient文件, 内容文件如下,其作用是配置gclient的运行参数。

gclient.boto 需要通过 环境变量 NO_AUTH_BOTO_CONFIG进行配置 export NO_AUTH_BOTO_CONFIG=<gclient.boto 路径>


```text
// file : gclient.boto
[boto]
    proxy = <proxy_ip>
    proxy_port = <port>
    proxy_type = http

// file : .gclient
solutions = [
  { "name"        : "src",
    "url"         : "https://chromium.googlesource.com/chromium/src.git",
    "deps_file"   : "DEPS",
    "managed"     : False,
    "custom_deps" : {
    },
    "custom_vars": {
	  # "download_remoteexec_cfg": True
	   #  "download_remoteexec_cfg": True,
     # "rbe_instance": "projects/rbe-chromium-untrusted/instances/default_instance",	
     },
  },
]
cache_dir = None
target_os=["android"]

接下来执行:

gclient sync
gclient runhooks

gclient  sync 相关的图

gclient_sync之后的一些warnings.png

同步完成

3.3 下载代码其他方式(失败了,可以忽略掉)

记录一下过去一周的所尝试的方法。

3.3.1 下载方式一 (失败)

mkdir chromium && cd chromium
fetch --nohooks --no-history android
gti fetch origin --tags
git tag

上述方式是官方给出的同步方式。但是国内的网络环境(“尤其是科学上网之后”),是最大的一个挑战。 更为苦涩的是 没有断点续传功能,一旦失败,需要重新开始

上述fetch命令中的, “ --nohooks --no-history” 选项还是很重要的, 可以节省一些 不必要的浪费。

3.3.2 下载方式二(失败)

fetch chromium

这种方式,消耗的流量就更大了。

3.3.3 遇到的错误

无论是选择 “下载方式一” 还是选择 “下载方式二”, 都会报下面的错误:

error: RPC failed; curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet. fatal: the remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed

下面是一些笔者尝试的方式,最终没有解决。 大家可以参考一下。 给我的感觉是, 修改git.httpbuffer没有效果。

四、编译

4.1 编译

  • 使用GN生成编译配置
  • 使用AutoNinja 编译
gn args out/Default  # 会弹出一个配置文件,输入如下配置:


target_os = "android"
target_cpu = "arm64"
# 不把警告作为错误,不然很有可能报错
treat_warnings_as_errors = false

然后进行保存

1733495529931.png

1733495529931.png

4.2 编译错误

chromium.googlesource.com/chromium/sr… ninjia生成阶段找不到cfg文件

image.png 上面问题的链接 : blog.csdn.net/hns707/arti… 上面问题的最终解决方式:(禁用掉 use_reb 、 use_gamo)

image.png

依据Chromium版本,回退了depot_tools 的版本,然后进行了同步操作,发现提示如下:

image.png

终于编译起来了: image.png

4.3 编译成功

编译成功

四、安装

安装:

# adb install ....../ChromePublic.apk 
Performing Streamed Install
Success

启动:

image.png

五、相关链接

  1. Android Chromium编译

  2. 源码下载参考的这里

  3. gitee Chrome_Android编译指导

  4. 从源码编译Chrome

  5. 如何下载Chromium源码

  6. 从源码下载编译Chromium

  7. 从0编译Chromium浏览器(Chrome)源码

  8. 下拉&编译 chromium&v8 代码

  9. chromium源码的下载与编译_从github下载源码

  10. 使用代理克隆 Chromium 源码

写在最后

Chromium源码的下载,太费流量,太浪费Money了。

扫码_搜索联合传播样式-标准色版.png