cronet_build
概述
记录编译Cronet for Android 的过程和步骤.
准备工具
- install depot_tools
|
|
- 添加进path,或者 .bashrc/.zshrc
|
|
如果安装的位置是home目录下,上述命令切勿使用 ~,使用绝对路径或者 HOME 替代.
|
|
我的安装路径是 ~/ide/depot_tools
所以,我执行的命令是
|
|
下载代码
- 找个目录,clone代码,我选择的是 ~/workspace/chromium
- 拉取代码,因为我不想要history,如果想要history,去掉 –no-history 即可.
|
|
根据网速,快的话办小时,慢的话,数小时之后完成. 20G的东西,我的网速很慢,过了一夜吧,也没具体看多久,这个工具有个问题,没有进度条。。。 当命令结束之后,目录下就会出现隐藏文件.gclient 和 文件夹 src. 假如中间中断过,或者直接拷贝了一份已有的源码,非第一次拉取代码,可能会提示如下内容。
非初次同步,则执行同步代码的命令
|
|
进入漫长的等待…
同步完成,自动执行 gclient runhooks 命令.
切换到src目录下
|
|
安装额外依赖
|
|
依赖比较多,安装需要点时间,约1G的空间大小.
我安装的时候,还遇到一个问题
试了很多办法,还是不行,就按照提示的,跳过这个字体库的安装.
|
|
Run the hooks
|
|
build
需求一: Building Cronet for development and debugging
第一步: 设置out_dir,生成ninja文件
|
|
在linux进行编译,则自动生成Android 库,在Mac上,则会生成iOS库.
这个命令执行完成之后,会影响之前编译在out/Cronet目录中的内容.
如果 –out_dir 参数省略的话,就输出目录就会默认变成 out/Debug 和 out/Release,分别存放debug和release的输出内容.
第二步: Running the ninja files
|
|
生成物解释
编译完,用作Android开发的库都在 chromium/src/out/Cronet/cronet 目录下.
- Android的jar包: 该目录下的所有jar文件,就是需要的jar包;
- Android的动态库: libs目录下有对应的so文件;
- 符号表: 对应的符号信息在symbols目录下,用于线上crash或其他栈信息的mapping;
- 头文件: include目录下有对应的头文件.
- 反混淆文件: 也在该目录下.
需求二: build mobile release
|
|
需求三: 其他abi
默认不指定参数的情况下,生成的是 ARMv7 32位的库,如果需要其他版本的库,可以通过添加如下参数,进行生成.
方案一是,修改 cr_cronet.py 文件的 gn_args 变量,按照需求修改成如下的值.
- For ARMv8 64-bit: target_cpu=“arm64”
- For x86 32-bit: target_cpu=“x86”
- For x86 64-bit: target_cpu=“x64”
方案二: 交互式,不需要修改文件
|
|
会弹出输入界面,可以输入需要的参数,比如(这些参数我是参考的默认debug包的参数,只是添加了开头有的target_cpu部分)
|
|
Tip: 其实最终的参数存在 out/Cronet/args.gn 这个文件里,也可以直接修改这个文件.
执行编译操作
|
|
生成的so文件在 src/out/Cronet/cronet/libs 下,因为我之前编译过 x86的,所以有两个.
其他,iOS编译
曾经也编译过iOS版本,步骤差不多,按照文档来,但是当时有个问题,在此记录下.
- 按照iOS编译文档 操作执行,生成需要的文件夹;
- 如果当时fetch的时候,参数不是 iOS,则需要确认 .gclient ,最后一行有 target_os = [ “ios” ] ,然后再执行 gclient sync,下载iOS的依赖; 文档说明