环境:ubuntu21.04
1.下载x264
git clone https://code.videolan.org/videolan/x264.git
2.下载Android NDK r21e(其他版本没有成功, ndk14-22的下载链接在文章末尾给出)
wget https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
unzip android-ndk-r21e-linux-x86_64.zip
3.在x264路径下创建并编写configure脚本
cd x264
touch buildx264_r21e.sh
sudo apt-get install gedit
gedit buildx264_r21e.sh
buildx264_r21e.sh 内容如下:
#!/bin/bash
export NDK=/home/hg/android-ndk-r21e # 这里需要替换成你本地的 NDK 路径,其他的不用修改
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export API=21
function build_android
{
./configure \
--prefix=$PREFIX \
--disable-cli \
--enable-shared \
--enable-pic \
--host=$my_host \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
make -j8
make install
}
#armeabi-v7a
PREFIX=./android/armeabi-v7a
my_host=armv7a-linux-android
export TARGET=armv7a-linux-androideabi
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export EXTRA_CFLAGS="-O0 -g" # 配置C编译器参数,-O0意思是设置优化等级为0,-g指的是生成符号表,这样在Android Native层使用libx264.so中的函数出错的时候可以配合 add2line查找出是哪一行代码的问题
export EXTRA_CXXFLAGS="-O0 -g" # 配置C++编译器参数,参数含义同上
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
build_android
如果是第一次使用这个 buildx264_r21e.sh 编译x264就使用下面的命令:
sudo chmod +x buildx264_r21e.sh
sudo apt-get install make
bash buildx264_r21e.sh
编译成功后会在x264路径下的 android/armeabi-v7a 路径下(这两个文件夹是脚本帮我们生成的)生成 include 和 lib 两个文件夹,lib 文件夹下面有 libx264.so 和 libx264.so.164 ,下面给出只生成 libx264.so 的解决办法。
在 ~/x264/configure脚本中搜索
echo "SONAME=libx264.so.$API"
将.$API去掉,然后保存
终端运行
cd ~/x264
rm -r android #要先删掉这个文件夹,make clean是删不掉这个生成的文件夹的
make clean
bash buildx264_r21e.sh
现在就只生成了libx264.so,而且这个 so 是带了符号表信息的,当android native 调用了 x264 的函数出错后,我们可以使用 android ndk21re 提供的 add2line工具找到是调用到哪个 x264 的函数报的错。
需要注意的是,执行完 buildx264_r21e.sh ,需要再次执行 buildx264_r21e.sh ,那么需要先在终端执行 rm -r android 和 make clean
ndk14-22的下载链接
https://dl.google.com/android/repository/android-ndk-r22b-linux-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip