天天看點

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 源碼。

如果要拉取指定版本的 chromium 源碼,還需執行以下步驟,注意需要都執行成功,否則會出現編譯失敗:

git fetch origin 75.0.3770.142
git checkout -b chromium-ios-75.0.3770.142 FETCH_HEAD
gclient sync --with_branch_heads
           

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 庫編譯指南

參考連結

cronet 編譯

拉取 chromium 指定版本的代碼