Last active
July 24, 2025 08:20
-
-
Save wsdydeni/45679394b214a2483277c130fa26904c to your computer and use it in GitHub Desktop.
Android在windows环境上面编译libyuv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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