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

如何为Android编译OpenCV_contrib的Freetype模块

正确交叉编译OpenCV_contrib Freetype模块(Android平台)

一、前置准备

确保你已准备好以下资源:

  • Android NDK(推荐r25b及以上版本,避免兼容性问题)
  • CMake 3.18+
  • 版本一致的OpenCV与OpenCV_contrib源码(例如OpenCV 4.5.5对应OpenCV_contrib 4.5.5)
  • Freetype源码(推荐2.12.1版本)与Harfbuzz源码(推荐6.0.0版本)

二、交叉编译Freetype

进入Freetype源码目录,执行以下命令编译指定架构(以arm64-v8a为例):

cd freetype-2.12.1
mkdir build_arm64 && cd build_arm64

cmake .. \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-24 \
-DCMAKE_INSTALL_PREFIX=/your/custom/path/freetype_arm64 \
-DBUILD_SHARED_LIBS=ON \
-DFT_DISABLE_HARFBUZZ=OFF \
-DFT_DISABLE_ZLIB=OFF \
-DFT_DISABLE_PNG=OFF

make -j$(nproc)
make install

三、交叉编译Harfbuzz

Harfbuzz依赖Freetype,编译时必须指定已编译好的Freetype路径:

cd harfbuzz-6.0.0
mkdir build_arm64 && cd build_arm64

cmake .. \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-24 \
-DCMAKE_INSTALL_PREFIX=/your/custom/path/harfbuzz_arm64 \
-DBUILD_SHARED_LIBS=ON \
-DHB_HAVE_FREETYPE=ON \
-DFREETYPE_INCLUDE_DIRS=/your/custom/path/freetype_arm64/include/freetype2 \
-DFREETYPE_LIBRARY=/your/custom/path/freetype_arm64/lib/libfreetype.so

make -j$(nproc)
make install

四、编译带Freetype模块的OpenCV4Android

方式1:直接用CMake编译

进入OpenCV源码目录,执行以下命令:

cd opencv-4.5.5
mkdir build_android_freetype && cd build_android_freetype

cmake .. \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-24 \
-DCMAKE_INSTALL_PREFIX=/your/custom/path/opencv_android_arm64 \
-DOPENCV_EXTRA_MODULES_PATH=/your/path/to/opencv_contrib-4.5.5/modules \
-DBUILD_opencv_freetype=ON \
-DFREETYPE_INCLUDE_DIRS=/your/custom/path/freetype_arm64/include/freetype2 \
-DFREETYPE_LIBRARY=/your/custom/path/freetype_arm64/lib/libfreetype.so \
-DHARFBUZZ_INCLUDE_DIRS=/your/custom/path/harfbuzz_arm64/include/harfbuzz \
-DHARFBUZZ_LIBRARY=/your/custom/path/harfbuzz_arm64/lib/libharfbuzz.so \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF

make -j$(nproc)
make install

方式2:用build_sdk.py编译

创建自定义配置文件custom_config.py:

def configure(context):
    context.add_cmake_option("BUILD_opencv_freetype=ON")
    context.add_cmake_option("FREETYPE_INCLUDE_DIRS=/your/custom/path/freetype_arm64/include/freetype2")
    context.add_cmake_option("FREETYPE_LIBRARY=/your/custom/path/freetype_arm64/lib/libfreetype.so")
    context.add_cmake_option("HARFBUZZ_INCLUDE_DIRS=/your/custom/path/harfbuzz_arm64/include/harfbuzz")
    context.add_cmake_option("HARFBUZZ_LIBRARY=/your/custom/path/harfbuzz_arm64/lib/libharfbuzz.so")

然后执行build_sdk.py:

python build_sdk.py --config custom_config.py --arch arm64-v8a --ndk_path $ANDROID_NDK --sdk_path $ANDROID_SDK

五、NDK-build项目中引用库的注意事项

  1. 复制库文件:将编译好的libfreetype.so、libharfbuzz.so复制到项目src/main/jniLibs/arm64-v8a目录下;将Freetype与Harfbuzz的头文件复制到项目jni/include目录。
  2. 修改Android.mk:
# 导入OpenCV配置
include /your/path/to/opencv_android_arm64/sdk/native/jni/OpenCV.mk

# 添加头文件路径
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/freetype2
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/harfbuzz

# 链接依赖库
LOCAL_LDLIBS += -lfreetype -lharfbuzz
  1. 修改Application.mk:
APP_ABI := arm64-v8a
APP_PLATFORM := android-24

常见问题排查

  • 版本不匹配:确保OpenCV、OpenCV_contrib、Freetype、Harfbuzz版本完全对应,避免API兼容问题。
  • 工具链错误:必须使用NDK自带的cmake工具链,不能用系统默认cmake链,CMAKE_TOOLCHAIN_FILE参数必须正确指定。
  • 库路径错误:NDK-build找不到库时,检查APP_ABI是否与编译的库架构一致,库文件是否放在正确的jniLibs子目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:05:30