You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Android Cronet头文件以在JNI(C++)中使用cronet.so?

问题

我想在Android的JNI/C++层直接调用Cronet的C API(而非通过Java API),目前已经有了cronet.so(来自Play Services或构建输出),但缺少cronet_c.h、cronet.idl_c.h等头文件,无法调用Cronet_Engine_Create、Cronet_UrlRequest_Create这类原生函数。

尝试过多次构建Chromium来提取头文件,但都因为构建复杂度和系统问题失败,也没找到官方预构建的SDK或独立头文件包。

之前使用的构建脚本:

#!/bin/bash
set -e

WORKDIR="$HOME/cronet_build"
DEPOT_TOOLS="$WORKDIR/depot_tools"
SRC_DIR="$WORKDIR/src"
OUT_DIR="$SRC_DIR/out/Release"

sudo apt-get update
sudo apt-get install -y git python3 curl unzip gnupg build-essential clang lld ninja-build pkg-config libnss3 libnss3-dev openjdk-17-jdk

if [ ! -d "$DEPOT_TOOLS" ]; then
    git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git "$DEPOT_TOOLS"
fi
export PATH="$DEPOT_TOOLS:$PATH"

mkdir -p "$WORKDIR"
cd "$WORKDIR"
fetch --nohooks chromium

cd "$SRC_DIR"
gclient sync --with-branch-heads

gn gen "$OUT_DIR" --args='
is_debug=false
target_os="android"
target_cpu="arm64"
is_cronet_package=true
'

autoninja -C "$OUT_DIR" cronet_package

该脚本报错找不到siso,之后修改了GN参数:

gn gen "$HOME/release" --args='
is_debug=false
target_os="android"
target_cpu="arm64"
is_component_build=false
use_siso=false
'

生成目标成功,但执行autoninja -C ~/release cronet或autoninja -C ~/release cronet_package时提示未知目标。

需求:

  1. 能否单独获取Cronet的头文件(无需完整构建Chromium),最好是官方或可靠来源,用于NDK/JNI项目引入并链接cronet.so;
  2. 如果无法单独获取,请求协助解决构建失败的问题。
解决方案

一、单独获取Cronet头文件

目前官方没有提供独立的头文件包,但可以通过两种可靠方式获取:

  • 从Chromium源码仓库直接提取核心头文件
    不需要拉取整个Chromium代码,仅克隆Cronet相关的关键目录:

    # 克隆Cronet C API核心头文件目录
    git clone https://chromium.googlesource.com/chromium/src/net/cronet cronet_core_headers
    # 克隆原生层辅助头文件目录
    git clone https://chromium.googlesource.com/chromium/src/components/cronet/native cronet_native_headers
    

    提取后,cronet_c.h位于cronet_core_headers/c/目录下;cronet.idl_c.h是IDL生成文件,可从源码中的cronet.idl通过Chromium IDL工具生成,或从合法分享的构建产物中提取。注意:部分头文件依赖Chromium基础库(如base/目录下的文件),需同步提取必要依赖或根据使用场景裁剪。

  • 从预构建Cronet AAR包提取
    下载官方发布的Cronet AAR包,解压后在jni/[abi]/目录下有cronet.so,部分版本会在include/或assets/目录附带头文件。如果没有,可反编译AAR中的JNI代码,对照函数签名手动补全核心API的头文件声明(适合仅调用基础功能的场景)。

二、修复Chromium构建脚本问题

针对你遇到的构建错误,调整如下:

  1. 修正GN参数与构建目标
    Android平台Cronet的正确GN参数和构建目标:

    gn gen "$OUT_DIR" --args='
    is_debug=false
    target_os="android"
    target_cpu="arm64"
    is_cronet_package=true
    use_siso=false
    enable_nacl=false
    symbol_level=0
    '
    

    构建目标使用cronet_shared(动态库)或cronet_static(静态库),而非cronet_package:

    autoninja -C "$OUT_DIR" cronet_shared
    
  2. 解决siso缺失问题
    确保depot_tools为最新版本:

    cd "$DEPOT_TOOLS"
    git pull
    

    同时确认系统已安装Python3的全部依赖包,避免同步或构建时出现依赖缺失。

  3. 优化代码同步命令
    使用以下命令减少不必要的代码拉取,加快同步速度:

    gclient sync -D --jobs=4
    

    其中-D会删除未使用的文件,--jobs=4指定并行同步任务数。

内容的提问来源于stack exchange,提问作者HARRSH BERMANN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:53:11