自行在谷歌下载Windows使用的NDK
下载x264源码:
https://www.videolan.org/developers/x264.html
下载msys2:
https://www.msys2.org/
安装msys2后,“以管理员身份运行” MSYS2 MinGW x64
写文件脚本
这里我将脚本文件(.sh)
和libx264 源码
还有ffmpeg 源码
放在了F:/Android
目录下
写完脚本后, msys2进入到F:/Android
目录,直接运行脚本即可, 先运行x264脚本,再运行ffmpeg脚本
msys2需要安装某些库,编译失败时会提示,自行安装即可,无非是一些依赖库
用pacman -S
安装
x264_armeabi_v7a.sh
#!/bin/bash
CUR_DIR=F:/Android
SRC_DIR=$CUR_DIR/x264-master
export NDK=$CUR_DIR/android-ndk-r21 # your android ndk folder
export HOST_TAG=windows-x86_64 # adjust to your building host
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
export API=21
export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang # c compiler path
export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++ # c++ compiler path
CPU=armeabi-v7a
cd $SRC_DIR
function build_armeabi-v7a
{
echo ">> configure $CPU libx264"
./configure \
--prefix=$CUR_DIR/x264_lib/$CPU \
--enable-static \
--enable-pic \
--disable-asm \
--disable-opencl \
--disable-cli \
--host=armv7a-linux-androideabi \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$TOOLCHAIN/sysroot \
echo ">> make $CPU libx264"
make clean
make
make install
echo ">> build $CPU libx264 finished"
}
build_armeabi-v7a
echo build_armeabi-v7a finished
x264_arm64-v8a.sh
#!/bin/bash
CUR_DIR=F:/Android
SRC_DIR=$CUR_DIR/x264-master
export NDK=F:/Android/android-ndk-r21 # your android ndk folder
export HOST_TAG=windows-x86_64 # adjust to your building host
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
export API=21
export CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang # c compiler path
export CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++ # c++ compiler path
CPU=arm64-v8a
cd $SRC_DIR
function build_arm64-v8a
{
echo ">> configure $CPU libx264"
./configure \
--prefix=$CUR_DIR/x264_lib/$CPU \
--enable-static \
--enable-pic \
--disable-asm \
--disable-opencl \
--disable-cli \
--host=aarch64-linux-android \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
--sysroot=$TOOLCHAIN/sysroot \
echo ">> make $CPU libx264"
make clean
make
make install
echo ">> build $CPU libx264 finished"
}
build_arm64-v8a
echo build_arm64-v8a finished
需要哪个 cpu的库就构建哪个
在x264目录下会有个新目录 android
, 里面有对应CPU的.a库
ffmpeg 编译
注意API和cc, cxx要和x264保持一致
ffmpeg_armeabi_v7a.sh
#!/bin/bash
FFMPEG_VERSION=4.4.2
CUR_DIR=F:/Android
SRC_DIR=$CUR_DIR/ffmpeg-$FFMPEG_VERSION
DST_DIR=$CUR_DIR/ffmpeg_lib-$FFMPEG_VERSION
NDK=$CUR_DIR/android-ndk-r21/toolchains/llvm/prebuilt/windows-x86_64
API=21
# x264
X264_LIB_DIR=$CUR_DIR/x264_lib/armeabi-v7a
echo ">> x264 dir: $X264_LIB_DIR"
cd $SRC_DIR
echo ">> cd $SRC_DIR"
function build_onearch
{
echo ">> configure $CPU, ffmpeg version: $FFMPEG_VERSION"
./configure \
--enable-cross-compile --target-os=android \
--prefix=$DST_DIR/$ANDROID_ABI --cross-prefix=$CROSS_PREFIX \
--cc=$CLANG_PREFIX --cxx=$CLANG_PREFIX++ \
--arch=$ARCH --cpu=$CPU --sysroot=$NDK/sysroot \
--enable-shared --disable-static \
--enable-small --disable-programs --disable-doc \
--enable-asm --disable-neon \
--enable-jni \
--enable-mediacodec --enable-hwaccels \
--enable-version3 --enable-gpl --enable-libx264 \
--extra-ldflags="-L$X264_LIB_DIR/lib" \
--extra-cflags="-I$X264_LIB_DIR/include -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD"
echo ">> make $CPU"
make clean
make
make install
echo ">> build ffmpeg $CPU finished"
}
ANDROID_ABI=armeabi-v7a
ARCH=arm
CPU=armv7-a
CROSS_PREFIX=$NDK/bin/arm-linux-androideabi-
CLANG_PREFIX=$NDK/bin/armv7a-linux-androideabi$API-clang
build_onearch
ffmpeg_arm64-v8a.sh
#!/bin/bash
FFMPEG_VERSION=4.4.2
CUR_DIR=F:/Android
SRC_DIR=$CUR_DIR/ffmpeg-$FFMPEG_VERSION
DST_DIR=$CUR_DIR/ffmpeg_lib-$FFMPEG_VERSION
NDK=$CUR_DIR/android-ndk-r21/toolchains/llvm/prebuilt/windows-x86_64
API=21
# x264
X264_LIB_DIR=$CUR_DIR/x264_lib/arm64-v8a
echo ">> x264 dir: $X264_LIB_DIR"
cd $SRC_DIR
echo ">> cd $SRC_DIR"
function build_onearch
{
echo ">> configure $CPU"
./configure --enable-cross-compile --target-os=android \
--prefix=$DST_DIR/$ANDROID_ABI --cross-prefix=$CROSS_PREFIX \
--cc=$CLANG_PREFIX --cxx=$CLANG_PREFIX++ \
--arch=$ARCH --cpu=$CPU --sysroot=$NDK/sysroot \
--enable-shared --disable-static \
--enable-small --disable-programs --disable-doc \
--enable-asm --enable-neon \
--enable-jni \
--enable-mediacodec --enable-hwaccels \
--enable-version3 --enable-libx264 --enable-gpl \
--extra-ldflags="-L$X264_LIB_DIR/lib" \
--extra-cflags="-I$X264_LIB_DIR/include -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD"
echo "<< make $CPU"
make clean
make
make install
}
ANDROID_ABI=arm64-v8a
ARCH=arm64
CPU=armv8-a
CROSS_PREFIX=$NDK/bin/aarch64-linux-android-
CLANG_PREFIX=$NDK/bin/aarch64-linux-android$API-clang
build_onearch