文章目錄
-
-
- 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 編譯
拉取 chromium 指定版本的代碼