Cronet 库编译指南

文章目录

      • 1、获取源码
      • 2、编译
      • 3、生成的文件
      • 4、错误记录
      • 参考链接

Cronet 库是谷歌开发的移动端网络库。支持 HTTP、HTTP/2 以及 QUIC 协议。支持 Android 和 iOS 平台。
其编译工具是 gn 和 ninja,类似于 cmake 与 make 的关系。
下面介绍 Cronet 库的编译及编译注意事项。

1、获取源码

iOS 的必须在 mac 下编译,Android 必须要 linux 平台下编译。源码获取细节具体参考此博客Get Chromium source code。

  • 1.1 安装 depot_tools 工具
    在任意目录下载 depot_tools 源码,并将该项目根目录添加到 PATH,从而可以使用其工具比如 fetch。
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
  • 1.2 拉取 chromium 源码
    这里需要区分是拉取 Android 平台的,还是 iOS 平台的。
mkdir chromium
fetch --no-history --nohooks  android      # fetch --no-history  ios

此时 chromium 目录会生成一个 ‘.gclient’ 隐藏文件,若中间拉取失败,可以执行 gclient sync 继续拉取,
拉取结束后,该目录会生成一个 src 目录,包含 cronet 源码。

2、编译

编译环境要求:

  • Linux:python 2.7.5,及 openjdk 8,较高版本由于接口不兼容需避免使用。
  • Mac: python 2.7.5,openjdk 8,以及 xcode。
    进入 chromium/src 目录,执行下面命令,
 ./components/cronet/tools/cr_cronet.py gn --out_dir=out/Cronet    # 生成 ninja 文件
 ninja -C out/Cronet cronet_package                                                # 输入 ninja 文件执行编译,必须指定为 cronet_package

若要编译 cronet 库的 Release 版本,在生成 ninja 文件时需要添加 ‘–release’ 选项。
另外 iOS 版本会区分模拟器和真机,区别是 cpu 架构不一样,模拟器使用 x86 架构,真机使用的 ARM 架构。
上述 cr_cronet.py 命令默认生成模拟器版本的库,生成真机的库需要添加 ‘-i’ 选项,同时必须具有 iOS 开发者证书,并在 xcode 中配置好,
生成真机的 Release 库,使用如下命令:

 ./components/cronet/tools/cr_cronet.py gn -i --release --out_dir=out/Cronet-iphoneos-release 

3、生成的文件

iOS 库:

  • out/Debug-iphonesimulator/obj/components/cronet/ios/libcronet.a, 大小为 89M;
  • out/Debug-iphonesimulator/obj/components/cronet/ios/libcronet_static.a, 大小为 17M;
  • out/Debug-iphonesimulator/obj/components/cronet/ios/libcronet_deps_complete.a,大小为 1G。

Android 库:

  • out/Cronet-android/lib.java/components/cronet/android/ 所有 jar 包在此目录下;
  • out/Cronet-android/libcronet.77.0.3825.0.so,strip 后的库,6M;
  • out/Cronet-android/lib.unstripped,未 strip 的库在此目录下。

这里 strip 掉的主要应该是 debug info,具体 strip 内容暂不清楚。

4、错误记录

  • 无 iOS 开发者证书,编译真机库失败。

参考链接

cronet 编译

你可能感兴趣的:(后台,quic)