Skip to content

Instantly share code, notes, and snippets.

@wsdydeni
Last active July 24, 2025 08:20
Show Gist options
  • Save wsdydeni/45679394b214a2483277c130fa26904c to your computer and use it in GitHub Desktop.
Save wsdydeni/45679394b214a2483277c130fa26904c to your computer and use it in GitHub Desktop.
Android在windows环境上面编译libyuv
xxxx目录/
├─ build-libyuv.bat (编译脚本)
└─ libyuv-source/ (已下载的libyuv源码)
libyuv随便一个版本的详情页https://chromium.googlesource.com/libyuv/libyuv/+/96134e95a7468af63ff2ea74a85b0d6db2d2c25e
点击tgz下载源码,解压之后libyuv-xxx版本目录名然后改成libyuv-source
编译完成之后,源码里面的include目录就是头文件,使用cmake配置一下就可以用了。
build-libyuv.bat
```bat
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion
:: 颜色定义(避免ANSI转义码导致的乱码,改用简单文字提示)
set "RED=[错误] "
set "GREEN=[成功] "
set "YELLOW=[进度] "
:: 获取脚本所在目录的完整路径(解决路径问题)
set "SCRIPT_DIR=%~dp0"
set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%"
:: 检查依赖
echo %YELLOW%检查依赖...
where git >nul 2>nul || (echo %RED%需要安装Git && goto :error)
where cmake >nul 2>nul || (echo %RED%需要安装CMake && goto :error)
where ninja >nul 2>nul || (echo %RED%需要安装Ninja && goto :error)
:: 检查环境变量
if "%ANDROID_NDK_HOME%"=="" (
echo %RED%请设置ANDROID_NDK_HOME环境变量
goto :error
)
:: 检查源码目录
if not exist "%SCRIPT_DIR%\libyuv-source" (
echo %RED%未找到libyuv-source目录,请确认源码位置正确
goto :error
)
:: 定义变量
set "LIBYUV_SRC=%SCRIPT_DIR%\libyuv-source"
set "BUILD_DIR=%SCRIPT_DIR%\build-libyuv"
set "OUTPUT_DIR=%SCRIPT_DIR%\output"
set "ARCHS=armeabi-v7a arm64-v8a x86 x86_64"
set "MIN_SDK_VERSION=21"
:: 创建目录
echo %YELLOW%创建目录结构...
mkdir "%BUILD_DIR%" 2>nul
mkdir "%OUTPUT_DIR%" 2>nul
for %%a in (%ARCHS%) do mkdir "%BUILD_DIR%\%%a" 2>nul
:: 创建CMake配置文件
echo %YELLOW%创建CMake配置文件...
(
echo cmake_minimum_required(VERSION 3.4.1)
echo project(libyuv)
echo.
echo file(GLOB_RECURSE LIBYUV_SOURCES
echo "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cc"
echo "${CMAKE_CURRENT_SOURCE_DIR}/source/*.h")
echo.
echo list(FILTER LIBYUV_SOURCES EXCLUDE REGEX ".*_win.cc$")
echo list(FILTER LIBYUV_SOURCES EXCLUDE REGEX ".*_mac.cc$")
echo list(FILTER LIBYUV_SOURCES EXCLUDE REGEX ".*_linux.cc$")
echo.
echo include_directories(
echo ${CMAKE_CURRENT_SOURCE_DIR}/include
echo ${CMAKE_CURRENT_SOURCE_DIR}/source
echo )
echo.
echo set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fexceptions")
echo add_library(libyuv STATIC ${LIBYUV_SOURCES})
echo.
echo set(LIBYUV_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include PARENT_SCOPE)
echo set(LIBYUV_LIBRARIES libyuv PARENT_SCOPE)
) > "%LIBYUV_SRC%\CMakeLists.txt"
:: 编译所有架构
echo %YELLOW%开始编译所有架构...
for %%a in (%ARCHS%) do (
echo %YELLOW%编译 %%a 架构...
mkdir "%BUILD_DIR%\%%a" 2>nul
cd "%BUILD_DIR%\%%a"
cmake -G "Ninja" ^
-DCMAKE_TOOLCHAIN_FILE="%ANDROID_NDK_HOME%\build\cmake\android.toolchain.cmake" ^
-DANDROID_ABI="%%a" ^
-DANDROID_PLATFORM="android-%MIN_SDK_VERSION%" ^
-DANDROID_STL="c++_shared" ^
"%LIBYUV_SRC%" || (echo %RED%CMake配置失败: %%a && cd.. && goto :error)
ninja || (echo %RED%编译失败: %%a && cd.. && goto :error)
mkdir "%OUTPUT_DIR%\%%a" 2>nul
copy libyuv.a "%OUTPUT_DIR%\%%a\" >nul
cd..
)
echo %YELLOW%所有架构编译完成!
:: 完成
echo.
echo %GREEN%=============================================
echo %GREEN%libyuv编译完成!
echo %GREEN%输出文件位于: %OUTPUT_DIR%
echo %GREEN%=============================================
:: 暂停窗口,防止自动关闭
pause
exit /b 0
:error
echo.
echo %RED%编译过程中发生错误!
pause
exit /b 1
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment