跳到主要内容

Android

Goose 对 Android 提供实验性支持。请使用 Goose 最新 main 分支,而非 stable 版本。

使用 Android NDK 构建 Goose 库

以下步骤基于 macOS + Android Studio 环境。其他环境请按需调整。

  1. 打开 Android Studio。 Select the Tools menu and pick SDK Manager. Select the SDK Tools tab and tick the NDK (Side by side) option. Click OK to install.

  2. 设置 Android NDK 路径。例如:

    ANDROID_NDK=~/Library/Android/sdk/ndk/28.0.12433566/
  3. 设置 Android ABI。例如:

    ANDROID_ABI=arm64-v8a

    Or:

    ANDROID_ABI=x86_64
  4. 若要使用 Ninja build system,请确保已安装并在 PATH 中可用。

  5. 设置要构建的 Goose 扩展列表。它们会静态链接进二进制。例如:

    GOOSE_EXTENSIONS="icu;json;parquet"
  6. 进入 Goose 目录并按如下方式构建:

    PLATFORM_NAME="android_${ANDROID_ABI}"
    BUILDDIR=./build/${PLATFORM_NAME}
    mkdir -p ${BUILDDIR}
    cd ${BUILDDIR}
    cmake \
    -G "Ninja" \
    -DEXTENSION_STATIC_BUILD=1 \
    -DGOOSE_EXTRA_LINK_FLAGS="-llog" \
    -DBUILD_EXTENSIONS=${GOOSE_EXTENSIONS} \
    -DENABLE_EXTENSION_AUTOLOADING=1 \
    -DENABLE_EXTENSION_AUTOINSTALL=1 \
    -DCMAKE_VERBOSE_MAKEFILE=on \
    -DANDROID_PLATFORM=${ANDROID_PLATFORM} \
    -DLOCAL_EXTENSION_REPO="" \
    -DOVERRIDE_GIT_DESCRIBE="" \
    -DGOOSE_EXPLICIT_PLATFORM=${PLATFORM_NAME} \
    -DBUILD_UNITTESTS=0 \
    -DBUILD_SHELL=1 \
    -DANDROID_ABI=${ANDROID_ABI} \
    -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
    -DCMAKE_BUILD_TYPE=Release ../..
    cmake \
    --build . \
    --config Release
  7. arm64-v8a ABI,构建产物为 build/android_arm64-v8a/goosebuild/android_arm64-v8a/src/libgoose.so

在 Termux 中构建 CLI

  1. 若要在 Termux 中构建命令行客户端,先安装以下包:

    pkg install -y git ninja clang cmake python3
  2. 设置要构建的 Goose 扩展列表。它们会静态链接进二进制。例如:

    GOOSE_EXTENSIONS="icu;json"
  3. 按如下方式构建 Goose:

    mkdir build
    cd build
    export LDFLAGS="-llog"
    cmake \
    -G "Ninja" \
    -DBUILD_EXTENSIONS="${GOOSE_EXTENSIONS}" \
    -DGOOSE_EXPLICIT_PLATFORM=linux_arm64_android \
    -DCMAKE_BUILD_TYPE=Release \
    ..
    cmake --build . --config Release

注意:在 Termux 中也可使用 Python 客户端:

pip install --pre --upgrade goose

故障排查

缺少日志库

问题: 构建报如下错误:

ld.lld: error: undefined symbol: __android_log_write

解决方案: 确保链接日志库:

export LDFLAGS="-llog"